加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

富甲天下外汇交易系统指标源码和模板(一)

(2015-06-19 12:54:38)
标签:

股票

外汇交易系统

外汇交易

分类: 外汇交易系统
http://s1/mw690/001DXNpCgy6Tbtv2as070&690
所用7个指标源码如下,源码文件及使用说明到群共享下载。
//------------------------------------
Heiken Ashi.mq4
//------------------------
//+------------------------------------------------------------------+
//|                                                  Heiken Ashi.mq4 |
//|                      Copyright c 2004, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
//| For Heiken Ashi we recommend next chart settings ( press F8 or   |
//| select on menu 'Charts'->'Properties...'):                       |
//|  - On 'Color' Tab select 'Black' for 'Line Graph'                |
//|  - On 'Common' Tab disable 'Chart on Foreground' checkbox and    |
//|    select 'Line Chart' radiobutton                               |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 White
#property indicator_color3 Red
#property indicator_color4 White
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 3
#property indicator_width4 3

//----
extern color color1 = Red;
extern color color2 = White;
extern color color3 = Red;
extern color color4 = White;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
//----
int ExtCountedBars=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//|------------------------------------------------------------------|
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, color1);
   SetIndexBuffer(0, ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2);
   SetIndexBuffer(1, ExtMapBuffer2);
   SetIndexStyle(2,DRAW_HISTOGRAM, 0, 3, color3);
   SetIndexBuffer(2, ExtMapBuffer3);
   SetIndexStyle(3,DRAW_HISTOGRAM, 0, 3, color4);
   SetIndexBuffer(3, ExtMapBuffer4);
//----
   SetIndexDrawBegin(0,10);
   SetIndexDrawBegin(1,10);
   SetIndexDrawBegin(2,10);
   SetIndexDrawBegin(3,10);
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexBuffer(3,ExtMapBuffer4);
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   double haOpen, haHigh, haLow, haClose;
   if(Bars<=10) return(0);
   ExtCountedBars=IndicatorCounted();
//---- check for possible errors
   if (ExtCountedBars<0) return(-1);
//---- last counted bar will be recounted
   if (ExtCountedBars>0) ExtCountedBars--;
   int pos=Bars-ExtCountedBars-1;
   while(pos>=0)
     {
      haOpen=(ExtMapBuffer3[pos+1]+ExtMapBuffer4[pos+1])/2;
      haClose=(Open[pos]+High[pos]+Low[pos]+Close[pos])/4;
      haHigh=MathMax(High[pos], MathMax(haOpen, haClose));
      haLow=MathMin(Low[pos], MathMin(haOpen, haClose));
      if (haOpen
        {
         ExtMapBuffer1[pos]=haLow;
         ExtMapBuffer2[pos]=haHigh;
        }
      else
        {
         ExtMapBuffer1[pos]=haHigh;
         ExtMapBuffer2[pos]=haLow;
        }
      ExtMapBuffer3[pos]=haOpen;
      ExtMapBuffer4[pos]=haClose;
        pos--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
开始下一个指标
//--------------------------------------
RSI div.mq4
//----------------------

#property copyright ""
#property link      ""

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 LimeGreen
#property indicator_color2 FireBrick
#property indicator_color3 Green
#property indicator_color4 Red
#property indicator_color5 Black

extern string separator1 = "*** OSMA Settings ***";
extern int rsiperiod = 7;
int g_period_104 = 3;
int g_period_108 = 6;
int g_period_112 = 3;
extern string separator2 = "*** Indicator Settings";
extern double positiveSensitivity = 0.0001;
extern double negativeSensitivity = -0.0001;
extern double historyBarsCount = 0.0;
extern bool drawDivergenceLines = FALSE;
double g_ibuf_152[];
double g_ibuf_156[];
double g_ibuf_160[];
double g_ibuf_164[];
double g_ibuf_168[];
double g_ibuf_172[];
double g_ibuf_176[];
int gi_180;

int init() {
   IndicatorBuffers(7);
   SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 2);
   SetIndexBuffer(0, g_ibuf_152);
   SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 2);
   SetIndexBuffer(1, g_ibuf_156);
   SetIndexStyle(2, DRAW_ARROW);
   SetIndexBuffer(2, g_ibuf_160);
   SetIndexArrow(2, 233);
   SetIndexStyle(3, DRAW_ARROW);
   SetIndexBuffer(3, g_ibuf_164);
   SetIndexArrow(3, 234);
   SetIndexStyle(4, DRAW_NONE);
   SetIndexBuffer(4, g_ibuf_168);
   SetIndexBuffer(5, g_ibuf_172);
   SetIndexBuffer(6, g_ibuf_176);
   SetIndexDrawBegin(0, g_period_112);
   SetIndexDrawBegin(1, g_period_112);
   IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS) + 2.0);
   IndicatorShortName("RSI_Divergence(" + rsiperiod + ")");
   if (historyBarsCount <= 0.0 || historyBarsCount > Bars) gi_180 = Bars;
   else gi_180 = historyBarsCount;
   return (0);
}

int deinit() {
   string name_0;
   for (int li_8 = ObjectsTotal() - 1; li_8 >= 0; li_8--) {
      name_0 = ObjectName(li_8);
      if (StringSubstr(name_0, 0, 14) == "DivergenceLine") ObjectDelete(name_0);
   }
   return (0);
}

int start() {
   int ind_counted_0 = IndicatorCounted();
   if (ind_counted_0 < 0) ind_counted_0 = 0;
   CalculateOsMA(ind_counted_0);
   CalculateDivergence(ind_counted_0);
   return (0);
}

void CalculateDivergence(int ai_0) {
   int li_4;
   double ld_8;
   int li_16;
   int li_20;
   int li_24;
   int li_28;
   double ld_32;
   double ld_40;
   double ld_48;
   double ld_56;
   int li_64;
   int li_68;
   int li_72;
   int li_76;
   double high_80;
   double high_88;
   double low_96;
   double low_104;
   double ld_112 = 50.0 * (1 / MathPow(10, MarketInfo(Symbol(), MODE_DIGITS) + 2.0));
   for (int li_120 = gi_180 - ai_0; li_120 >= 0; li_120--) {
      g_ibuf_164[li_120] = EMPTY_VALUE;
      g_ibuf_160[li_120] = EMPTY_VALUE;
      li_4 = GetFirstPeakOrTrough(li_120);
      ld_8 = g_ibuf_168[li_4];
      if (ld_8 > 0.0) {
         li_16 = GetIndicatorLastPeak(li_120);
         li_20 = GetIndicatorLastTrough(li_16);
         li_24 = GetIndicatorLastPeak(li_20);
         li_28 = GetIndicatorLastTrough(li_24);
      } else {
         li_20 = GetIndicatorLastTrough(li_120);
         li_16 = GetIndicatorLastPeak(li_20);
         li_28 = GetIndicatorLastTrough(li_16);
         li_24 = GetIndicatorLastPeak(li_28);
      }
      if (li_16 == -1 || li_24 == -1 || li_20 == -1 || li_28 == -1) continue;
      ld_32 = g_ibuf_168[li_16];
      ld_40 = g_ibuf_168[li_24];
      ld_48 = g_ibuf_168[li_20];
      ld_56 = g_ibuf_168[li_28];
      li_64 = li_16;
      li_68 = li_24;
      li_72 = li_20;
      li_76 = li_28;
      high_80 = High[li_64];
      high_88 = High[li_68];
      low_96 = Low[li_72];
      low_104 = Low[li_76];
      if ((high_80 > high_88 && ld_32 < ld_40) || (high_80 < high_88 && ld_32 > ld_40)) {
         g_ibuf_164[li_16] = g_ibuf_152[li_16] + ld_112;
         if (drawDivergenceLines) {
            PriceDrawLine(Time[li_64], Time[li_68], high_80, high_88, Red);
            IndicatorDrawLine(Time[li_16], Time[li_24], ld_32, ld_40, Red);
         }
      } else {
         if ((low_96 < low_104 && ld_48 > ld_56) || (low_96 > low_104 && ld_48 < ld_56)) {
            g_ibuf_160[li_20] = g_ibuf_156[li_20] - ld_112;
            if (drawDivergenceLines) {
               PriceDrawLine(Time[li_72], Time[li_76], low_96, low_104, Green);
               IndicatorDrawLine(Time[li_20], Time[li_28], ld_48, ld_56, Green);
            }
         }
      }
   }
}

void CalculateOsMA(int ai_0) {
   for (int li_4 = Bars - ai_0; li_4 >= 0; li_4--) g_ibuf_172[li_4] = iMA(NULL, 0, g_period_104, 0, MODE_EMA, PRICE_CLOSE, li_4) - iMA(NULL, 0, g_period_108, 0, MODE_EMA, PRICE_CLOSE, li_4);
   for (li_4 = Bars - ai_0; li_4 >= 0; li_4--) {
      g_ibuf_176[li_4] = iMAOnArray(g_ibuf_172, Bars, g_period_112, 0, MODE_SMA, li_4);
      g_ibuf_168[li_4] = 2.0 * (iRSI(NULL, 0, rsiperiod, PRICE_CLOSE, li_4) - 50.0);
      if (g_ibuf_168[li_4] > 0.0) {
         g_ibuf_152[li_4] = g_ibuf_168[li_4];
         g_ibuf_156[li_4] = 0;
      } else {
         if (g_ibuf_168[li_4] < 0.0) {
            g_ibuf_156[li_4] = g_ibuf_168[li_4];
            g_ibuf_152[li_4] = 0;
         } else {
            g_ibuf_152[li_4] = 0;
            g_ibuf_156[li_4] = 0;
         }
      }
   }
}

int GetPositiveRegionStart(int ai_0) {
   for (int li_ret_4 = ai_0 + 1; li_ret_4 < Bars; li_ret_4++)
      if (g_ibuf_168[li_ret_4] >= g_ibuf_168[li_ret_4 - 1] && g_ibuf_168[li_ret_4] >= g_ibuf_168[li_ret_4 + 1] && g_ibuf_168[li_ret_4] >= g_ibuf_168[li_ret_4 + 2] && g_ibuf_168[li_ret_4] > positiveSensitivity) return (li_ret_4);
   return (-1);
}

int GetNegativeRegionStart(int ai_0) {
   for (int li_ret_4 = ai_0 + 1; li_ret_4 < Bars; li_ret_4++)
      if (g_ibuf_168[li_ret_4] <= g_ibuf_168[li_ret_4 - 1] && g_ibuf_168[li_ret_4] <= g_ibuf_168[li_ret_4 + 1] && g_ibuf_168[li_ret_4] <= g_ibuf_168[li_ret_4 + 2] && g_ibuf_168[li_ret_4] < negativeSensitivity) return (li_ret_4);
   return (-1);
}

int GetFirstPeakOrTrough(int ai_0) {
   for (int li_ret_4 = ai_0 + 1; li_ret_4 < Bars; li_ret_4++) {
      if ((g_ibuf_168[li_ret_4] >= g_ibuf_168[li_ret_4 - 1] && g_ibuf_168[li_ret_4] >= g_ibuf_168[li_ret_4 + 1] && g_ibuf_168[li_ret_4] >= g_ibuf_168[li_ret_4 + 2] && g_ibuf_168[li_ret_4] > positiveSensitivity) ||
         (g_ibuf_168[li_ret_4] <= g_ibuf_168[li_ret_4 - 1] && g_ibuf_168[li_ret_4] <= g_ibuf_168[li_ret_4 + 1] && g_ibuf_168[li_ret_4] <= g_ibuf_168[li_ret_4 + 2] && g_ibuf_168[li_ret_4] < negativeSensitivity)) return (li_ret_4);
   }
   return (-1);
}

int GetIndicatorLastPeak(int ai_0) {
   int li_4 = GetPositiveRegionStart(ai_0);
   if (li_4 == -1) return (-1);
   bool li_ret_8 = FALSE;
   double ld_12 = 0;
   for (int li_20 = li_4; li_20 < Bars; li_20++) {
      if (g_ibuf_168[li_20] > ld_12 && g_ibuf_168[li_20] >= g_ibuf_168[li_20 - 1] && g_ibuf_168[li_20] >= g_ibuf_168[li_20 + 1] && g_ibuf_168[li_20] >= g_ibuf_168[li_20 +
         2] && g_ibuf_168[li_20] > positiveSensitivity) {
         ld_12 = g_ibuf_168[li_20];
         li_ret_8 = li_20;
      }
      if (g_ibuf_168[li_20] < 0.0) break;
   }
   return (li_ret_8);
}

int GetIndicatorLastTrough(int ai_0) {
   int li_4 = GetNegativeRegionStart(ai_0);
   if (li_4 == -1) return (-1);
   bool li_ret_8 = FALSE;
   double ld_12 = 0;
   for (int li_20 = li_4; li_20 < Bars; li_20++) {
      if (g_ibuf_168[li_20] < ld_12 && g_ibuf_168[li_20] <= g_ibuf_168[li_20 - 1] && g_ibuf_168[li_20] <= g_ibuf_168[li_20 + 1] && g_ibuf_168[li_20] <= g_ibuf_168[li_20 +
         2] && g_ibuf_168[li_20] < negativeSensitivity) {
         ld_12 = g_ibuf_168[li_20];
         li_ret_8 = li_20;
      }
      if (g_ibuf_168[li_20] > 0.0) break;
   }
   return (li_ret_8);
}

void PriceDrawLine(int a_datetime_0, int a_datetime_4, double a_price_8, double a_price_16, color a_color_24) {
   string name_28 = "DivergenceLine# " + DoubleToStr(a_datetime_0, 0);
   ObjectDelete(name_28);
   ObjectCreate(name_28, OBJ_TREND, 0, a_datetime_0, a_price_8, a_datetime_4, a_price_16, 0, 0);
   ObjectSet(name_28, OBJPROP_RAY, FALSE);
   ObjectSet(name_28, OBJPROP_COLOR, a_color_24);
}

void IndicatorDrawLine(int a_datetime_0, int a_datetime_4, double a_price_8, double a_price_16, color a_color_24) {
   string name_28;
   int window_36 = WindowFind("FX5_Divergence(" + g_period_104 + "," + g_period_108 + "," + g_period_112 + ")");
   if (window_36 >= 0) {
      name_28 = "DivergenceLine$# " + DoubleToStr(a_datetime_0, 0);
      ObjectDelete(name_28);
      ObjectCreate(name_28, OBJ_TREND, window_36, a_datetime_0, a_price_8, a_datetime_4, a_price_16, 0, 0);
      ObjectSet(name_28, OBJPROP_RAY, FALSE);
      ObjectSet(name_28, OBJPROP_COLOR, a_color_24);
   }
}
//----------------------------------------
开始下一个指标
//--------------------------
ZigZag Pointer.mq4
//----------------------
//+------------------------------------------------------------------+
//|                                               ZigZag Pointer.mq4 |
//|                                    zigzag modified by Dr. Gaines |
//|                                      dr_richard_gaines@yahoo.com |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "dr_richard_gaines"
#property link      "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_width1 1
#property indicator_color2 Black
#property indicator_width2 1
//---- indicator parameters
extern int ExtDepth=95;
extern int ExtDeviation=75;
extern int ExtBackstep=15;
//---- indicator buffers
double ExtMapBuffer[];
double ExtMapBuffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(2);
//---- drawing settings
   SetIndexStyle(0,DRAW_ARROW,0,3);
   SetIndexArrow(0, 233);
   SetIndexStyle(1,DRAW_ARROW,0,3);
   SetIndexArrow(1, 234);
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtMapBuffer);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(0,0.0);
  
//---- indicator short name
   IndicatorShortName("ZigZag("+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int    shift, back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
      if(val==lastlow) val=0.0;
      else
        {
         lastlow=val;
         if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer[shift+back];
               if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
              }
           }
        }
      ExtMapBuffer[shift]=val;
      //--- high
      val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];
      if(val==lasthigh) val=0.0;
      else
        {
         lasthigh=val;
         if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer2[shift+back];
               if((res!=0)&&(res
              }
           }
        }
      ExtMapBuffer2[shift]=val;
     }

   // final cutting
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      curlow=ExtMapBuffer[shift];
      curhigh=ExtMapBuffer2[shift];
      if((curlow==0)&&(curhigh==0)) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0)
           {
            if(lasthigh
            else ExtMapBuffer2[shift]=0;
           }
         //---
         if(lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
            else ExtMapBuffer[shift]=0;
           }
         //---
         if((curlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           }
         lasthigh=-1;
        }
     }
 
   for(shift=Bars-1; shift>=0; shift--)
     {
      if(shift>=Bars-ExtDepth) ExtMapBuffer[shift]=0.0;
      else
        {
         res=ExtMapBuffer2[shift];
         if(res!=0.0) ExtMapBuffer2[shift]=res;
        }
     }
     return(0);
  }
 
  //end//
//-------------------------------------------------------------------------
开始下一个指标
//-----------------------
BBands_Stop_v1_BAR.mq4
//------------------

#property copyright ""
#property link      ""

#property indicator_separate_window
#property indicator_minimum 0.0
#property indicator_buffers 6
#property indicator_color1 Black
#property indicator_color2 Black
#property indicator_color3 Black
#property indicator_color4 Black
#property indicator_color5 RoyalBlue
#property indicator_color6 Red

extern int Length = 20;
extern int Deviation = 2;
extern double MoneyRisk = 1.0;
extern int Signal = 1;
extern int Line = 1;
extern int Nbars = 1000;
double g_ibuf_120[];
double g_ibuf_124[];
double g_ibuf_128[];
double g_ibuf_132[];
double g_ibuf_136[];
double g_ibuf_140[];
extern bool SoundON = TRUE;
bool gi_148 = FALSE;
bool gi_152 = FALSE;

int init() {
   SetIndexBuffer(0, g_ibuf_120);
   SetIndexBuffer(1, g_ibuf_124);
   SetIndexBuffer(2, g_ibuf_128);
   SetIndexBuffer(3, g_ibuf_132);
   SetIndexBuffer(4, g_ibuf_136);
   SetIndexBuffer(5, g_ibuf_140);
   SetIndexStyle(0, DRAW_NONE);
   SetIndexStyle(1, DRAW_NONE);
   SetIndexStyle(2, DRAW_NONE);
   SetIndexStyle(3, DRAW_NONE);
   SetIndexStyle(4, DRAW_HISTOGRAM);
   SetIndexStyle(5, DRAW_HISTOGRAM);
   IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS));
   string ls_0 = "BBands Stop BAR (" + Length + "," + Deviation + ")";
   IndicatorShortName(ls_0);
   SetIndexLabel(0, "UpTrend Stop");
   SetIndexLabel(1, "DownTrend Stop");
   SetIndexLabel(2, "UpTrend Signal");
   SetIndexLabel(3, "DownTrend Signal");
   SetIndexLabel(4, "UpTrend Line");
   SetIndexLabel(5, "DownTrend Line");
   SetIndexDrawBegin(0, Length);
   SetIndexDrawBegin(1, Length);
   SetIndexDrawBegin(2, Length);
   SetIndexDrawBegin(3, Length);
   SetIndexDrawBegin(4, Length);
   SetIndexDrawBegin(5, Length);
   return (0);
}

int start() {
   int li_0;
   double lda_4[25000];
   double lda_8[25000];
   double lda_12[25000];
   double lda_16[25000];
   for (int shift_20 = Nbars; shift_20 >= 0; shift_20--) {
      g_ibuf_120[shift_20] = 0;
      g_ibuf_124[shift_20] = 0;
      g_ibuf_128[shift_20] = 0;
      g_ibuf_132[shift_20] = 0;
      g_ibuf_136[shift_20] = EMPTY_VALUE;
      g_ibuf_140[shift_20] = EMPTY_VALUE;
   }
   for (shift_20 = Nbars - Length - 1; shift_20 >= 0; shift_20--) {
      lda_4[shift_20] = iBands(NULL, 0, Length, Deviation, 0, PRICE_CLOSE, MODE_UPPER, shift_20);
      lda_8[shift_20] = iBands(NULL, 0, Length, Deviation, 0, PRICE_CLOSE, MODE_LOWER, shift_20);
      if (Close[shift_20] > lda_4[shift_20 + 1]) li_0 = 1;
      if (Close[shift_20] < lda_8[shift_20 + 1]) li_0 = -1;
      if (li_0 > 0 && lda_8[shift_20] < lda_8[shift_20 + 1]) lda_8[shift_20] = lda_8[shift_20 + 1];
      if (li_0 < 0 && lda_4[shift_20] > lda_4[shift_20 + 1]) lda_4[shift_20] = lda_4[shift_20 + 1];
      lda_12[shift_20] = lda_4[shift_20] + (MoneyRisk - 1.0) / 2.0 * (lda_4[shift_20] - lda_8[shift_20]);
      lda_16[shift_20] = lda_8[shift_20] - (MoneyRisk - 1.0) / 2.0 * (lda_4[shift_20] - lda_8[shift_20]);
      if (li_0 > 0 && lda_16[shift_20] < lda_16[shift_20 + 1]) lda_16[shift_20] = lda_16[shift_20 + 1];
      if (li_0 < 0 && lda_12[shift_20] > lda_12[shift_20 + 1]) lda_12[shift_20] = lda_12[shift_20 + 1];
      if (li_0 > 0) {
         if (Signal > 0 && g_ibuf_120[shift_20 + 1] == -1.0) {
            g_ibuf_128[shift_20] = lda_16[shift_20];
            g_ibuf_120[shift_20] = lda_16[shift_20];
            if (Line > 0) g_ibuf_136[shift_20] = lda_16[shift_20];
            if (SoundON == TRUE && shift_20 == 0 && (!gi_148)) {
               Alert("BBands going Up on ", Symbol(), "-", Period());
               gi_148 = TRUE;
               gi_152 = FALSE;
            }
         } else {
            g_ibuf_120[shift_20] = lda_16[shift_20];
            if (Line > 0) g_ibuf_136[shift_20] = lda_16[shift_20];
            g_ibuf_128[shift_20] = -1;
         }
         if (Signal == 2) g_ibuf_120[shift_20] = 0;
         g_ibuf_132[shift_20] = -1;
         g_ibuf_124[shift_20] = -1.0;
         g_ibuf_140[shift_20] = EMPTY_VALUE;
      }
      if (li_0 < 0) {
         if (Signal > 0 && g_ibuf_124[shift_20 + 1] == -1.0) {
            g_ibuf_132[shift_20] = lda_12[shift_20];
            g_ibuf_124[shift_20] = lda_12[shift_20];
            if (Line > 0) g_ibuf_140[shift_20] = lda_12[shift_20];
            if (SoundON == TRUE && shift_20 == 0 && (!gi_152)) {
               Alert("BBands going Down on ", Symbol(), "-", Period());
               gi_152 = TRUE;
               gi_148 = FALSE;
            }
         } else {
            g_ibuf_124[shift_20] = lda_12[shift_20];
            if (Line > 0) g_ibuf_140[shift_20] = lda_12[shift_20];
            g_ibuf_132[shift_20] = -1;
         }
         if (Signal == 2) g_ibuf_124[shift_20] = 0;
         g_ibuf_128[shift_20] = -1;
         g_ibuf_120[shift_20] = -1.0;
         g_ibuf_136[shift_20] = EMPTY_VALUE;
      }
   }
   return (0);
}
//-----------------------------------------------------------
开始新一个指标
//----------------------------------
BreakOut_PANCA_EAGLE__indicator.mq4
//------------------------
//+------------------------------------------------------------------+
//|                                          BreakOutPANCA-EAGLE.mq4 |
//|                                                        hapalkos  |
//|                                                       2007.11.20 |
//|   ++ modified so that rectangles do not overlay                  |
//|   ++ this makes color selection more versatile                   |
//|   ++ code consolidated                                           |
//+------------------------------------------------------------------+
#property copyright "hapalkos"
#property link      ""

#property indicator_chart_window
 
extern int    NumberOfDays = 50;       
extern string periodBegin    = "00:00";
extern string periodEnd      = "05:30";  
extern string BoxEnd         = "23:00";
extern int    BoxBreakOut_Offset = 10;
extern color  BoxHLColor         = MidnightBlue;
extern color  BoxBreakOutColor   = LimeGreen;
extern color  BoxPeriodColor     = OrangeRed;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
  DeleteObjects();
}

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit() {
  DeleteObjects();
}

//+------------------------------------------------------------------+
//| Remove all Rectangles                                            |
//+------------------------------------------------------------------+
void DeleteObjects() {
    ObjectsDeleteAll(0,OBJ_RECTANGLE);     
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
  datetime dtTradeDate=TimeCurrent();

  for (int i=0; i
 
    DrawObjects(dtTradeDate, "BoxHL  " + TimeToStr(dtTradeDate,TIME_DATE), periodBegin, periodEnd, BoxEnd, BoxHLColor, 0, 1);
    DrawObjects(dtTradeDate, "BoxBreakOut_High  " + TimeToStr(dtTradeDate,TIME_DATE), periodBegin, periodEnd, BoxEnd, BoxBreakOutColor, BoxBreakOut_Offset,2);
    DrawObjects(dtTradeDate, "BoxBreakOut_Low  " + TimeToStr(dtTradeDate,TIME_DATE), periodBegin, periodEnd, BoxEnd, BoxBreakOutColor, BoxBreakOut_Offset,3);
    DrawObjects(dtTradeDate, "BoxPeriod  " + TimeToStr(dtTradeDate,TIME_DATE), periodBegin, periodEnd, periodEnd, BoxPeriodColor, BoxBreakOut_Offset,4);

    dtTradeDate=decrementTradeDate(dtTradeDate);
    while (TimeDayOfWeek(dtTradeDate) > 5) dtTradeDate = decrementTradeDate(dtTradeDate);
  }
}

//+------------------------------------------------------------------+
//| Create Rectangles                                                |
//+------------------------------------------------------------------+

void DrawObjects(datetime dtTradeDate, string sObjName, string sTimeBegin, string sTimeEnd, string sTimeObjEnd, color cObjColor, int iOffSet, int iForm) {
  datetime dtTimeBegin, dtTimeEnd, dtTimeObjEnd;
  double   dPriceHigh,  dPriceLow;
  int      iBarBegin,   iBarEnd;

  dtTimeBegin = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + sTimeBegin);
  dtTimeEnd = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + sTimeEnd);
  dtTimeObjEnd = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + sTimeObjEnd);
     
  iBarBegin = iBarShift(NULL, 0, dtTimeBegin);
  iBarEnd = iBarShift(NULL, 0, dtTimeEnd);
  dPriceHigh = High[Highest(NULL, 0, MODE_HIGH, iBarBegin-iBarEnd, iBarEnd)];
  dPriceLow = Low [Lowest (NULL, 0, MODE_LOW , iBarBegin-iBarEnd, iBarEnd)];
 
  ObjectCreate(sObjName, OBJ_RECTANGLE, 0, 0, 0, 0, 0);
 
  ObjectSet(sObjName, OBJPROP_TIME1 , dtTimeBegin);
  ObjectSet(sObjName, OBJPROP_TIME2 , dtTimeObjEnd);
 
//---- High-Low Rectangle
   if(iForm==1){ 
      ObjectSet(sObjName, OBJPROP_PRICE1, dPriceHigh); 
      ObjectSet(sObjName, OBJPROP_PRICE2, dPriceLow);
      ObjectSet(sObjName, OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet(sObjName, OBJPROP_COLOR, cObjColor);
      ObjectSet(sObjName, OBJPROP_BACK, True);
   }
  
//---- Upper Rectangle
  if(iForm==2){
      ObjectSet(sObjName, OBJPROP_PRICE1, dPriceHigh);
      ObjectSet(sObjName, OBJPROP_PRICE2, dPriceHigh + iOffSet*Point);
      ObjectSet(sObjName, OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet(sObjName, OBJPROP_COLOR, cObjColor);
      ObjectSet(sObjName, OBJPROP_BACK, True);
   }
 
 //---- Lower Rectangle
  if(iForm==3){
      ObjectSet(sObjName, OBJPROP_PRICE1, dPriceLow - iOffSet*Point);
      ObjectSet(sObjName, OBJPROP_PRICE2, dPriceLow);
      ObjectSet(sObjName, OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet(sObjName, OBJPROP_COLOR, cObjColor);
      ObjectSet(sObjName, OBJPROP_BACK, True);
   }

//---- Period Rectangle
  if(iForm==4){
      ObjectSet(sObjName, OBJPROP_PRICE1, dPriceHigh + iOffSet*Point);
      ObjectSet(sObjName, OBJPROP_PRICE2, dPriceLow - iOffSet*Point);
      ObjectSet(sObjName, OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet(sObjName, OBJPROP_COLOR, cObjColor);
      ObjectSet(sObjName, OBJPROP_WIDTH, 2);
      ObjectSet(sObjName, OBJPROP_BACK, False);
   
      string sObjDesc = StringConcatenate("High: ",dPriceHigh,"  Low: ", dPriceLow, " OffSet: ",iOffSet); 
      ObjectSetText(sObjName, sObjDesc,10,"Times New Roman",Black);
}

//+------------------------------------------------------------------+
//| Decrement Date to draw objects in the past                       |
//+------------------------------------------------------------------+

datetime decrementTradeDate (datetime dtTimeDate) {
   int iTimeYear=TimeYear(dtTimeDate);
   int iTimeMonth=TimeMonth(dtTimeDate);
   int iTimeDay=TimeDay(dtTimeDate);
   int iTimeHour=TimeHour(dtTimeDate);
   int iTimeMinute=TimeMinute(dtTimeDate);

   iTimeDay--;
   if (iTimeDay==0) {
     iTimeMonth--;
     if (iTimeMonth==0) {
       iTimeYear--;
       iTimeMonth=12;
     }
   
     // Thirty days hath September... 
     if (iTimeMonth==4 || iTimeMonth==6 || iTimeMonth==9 || iTimeMonth==11) iTimeDay=30;
     // ...all the rest have thirty-one...
     if (iTimeMonth==1 || iTimeMonth==3 || iTimeMonth==5 || iTimeMonth==7 || iTimeMonth==8 || iTimeMonth==10 || iTimeMonth==12) iTimeDay=31;
     // ...except...
     if (iTimeMonth==2) if (MathMod(iTimeYear, 4)==0) iTimeDay=29; else iTimeDay=28;
   }
  return(StrToTime(iTimeYear + "." + iTimeMonth + "." + iTimeDay + " " + iTimeHour + ":" + iTimeMinute));
}

//+------------------------------------------------------------------+

//----------------------------------------------------------------
开始下一个指标
//-------------------------
EMA Crossover Signal.mq4
//---------------------------

#property copyright ""
#property link      ""

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 SeaGreen
#property indicator_color2 Red


double g_ibuf_92[];
double g_ibuf_96[];
extern int FasterEMA = 4;
extern int SlowerEMA = 8;
extern bool SoundON = TRUE;
double gd_112;
double gd_unused_120 = EMPTY_VALUE;

int init() {
   SetIndexStyle(0, DRAW_ARROW, EMPTY, 3);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, g_ibuf_92);
   SetIndexStyle(1, DRAW_ARROW, EMPTY, 3);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, g_ibuf_96);
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   int li_0;
   double ima_4;
   double ima_12;
   double ima_20;
   double ima_28;
   double ima_36;
   double ima_44;
   double ld_52;
   double ld_60;
   int li_68 = IndicatorCounted();
   if (li_68 < 0) return (-1);
   if (li_68 > 0) li_68--;
   int li_72 = Bars - li_68;
   for (int li_76 = 0; li_76 <= li_72; li_76++) {
      li_0 = li_76;
      ld_52 = 0;
      ld_60 = 0;
      for (li_0 = li_76; li_0 <= li_76 + 9; li_0++) ld_60 += MathAbs(High[li_0] - Low[li_0]);
      ld_52 = ld_60 / 10.0;
      ima_4 = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, li_76);
      ima_20 = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, li_76 + 1);
      ima_36 = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, li_76 - 1);
      ima_12 = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, li_76);
      ima_28 = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, li_76 + 1);
      ima_44 = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, li_76 - 1);
      if (ima_4 > ima_12 && ima_20 < ima_28 && ima_36 > ima_44) g_ibuf_92[li_76] = Low[li_76] - ld_52 / 2.0;
      else
         if (ima_4 < ima_12 && ima_20 > ima_28 && ima_36 < ima_44) g_ibuf_96[li_76] = High[li_76] + ld_52 / 2.0;
      if (SoundON == TRUE && li_76 == 1 && g_ibuf_92[li_76] > g_ibuf_96[li_76] && gd_112 != Time[0]) {
         Alert("EMA Cross Trend going Down on ", Symbol(), " ", Period());
         gd_112 = Time[0];
      }
      if (SoundON == TRUE && li_76 == 1 && g_ibuf_92[li_76] < g_ibuf_96[li_76] && gd_112 != Time[0]) {
         Alert("EMA Cross Trend going Up on ", Symbol(), " ", Period());
         gd_112 = Time[0];
      }
   }
   return (0);
}
//------------------------------------------------------
指标未完,博客字数限制请接同标题2

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有