乐于分享
好东西不私藏

带自动区间+报警,升级版随机指标源码分享

带自动区间+报警,升级版随机指标源码分享
大家好,我是EA侠。

做震荡行情的朋友应该都清楚,普通随机指标只有简单的超买超卖线条,根本没法结合价格盘面判断进场点位,逆势做单、盲目进场是常态。

今天这款工具和普通指标完全不一样,是专门为手动交易者打造的半自动辅助指标,源码我已经放下面,全程无未来函数、信号零漂移,所有数据实时计算,绝对不存在事后改信号的情况,大家可以放心使用。

这里我给大家讲一下它的适用场景,避免大家用错亏损:

这款工具只适合震荡盘整行情,主打M15、M30、H1短线高抛低吸、反转交易,是震荡市的交易神器;

切记!单边暴涨暴跌、大数据非农、利率决议期间不要使用,趋势行情下任何逆势反转指标,都会出现无效杂信号,大家一定要按需使用。

我已经帮大家调试好最优默认参数,直接导入MT4就能直接用。如果大家啊需要别的参数,也可以和侠哥交流。

好了源码我已经放下面了,需要的自取。

extern int              BarsToCheck  =  3456;extern ENUM_TIMEFRAMES    TimeFrame  =  PERIOD_CURRENT;extern int                  Kperiod  =  13,  //5,                            Slowing  =  3;extern ENUM_STO_PRICE    StochPrice  =  STO_LOWHIGH;  //STO_CLOSECLOSE;                        extern int               OverBought  =  80,   //70,                           OverSold  =  20;   //30;extern color             Rectangle1  =  C'150,60,60';   //0x4040a0;extern color             Rectangle2  =  C'60,60,150';   //0x804040;extern bool                 PlusATR  =  false,                             ShowLines  =  false,                           RayRight  =  false;extern int              HowH1forRay  =  96;extern ENUM_LINE_STYLE     RayStyle  =  STYLE_DOT;extern int                 AlertBar  =  1;           extern bool           AlertsMessage  =  true,   //false,                            AlertsSound  =  true,   //false,                        AlertsEmail  =  false,                       AlertsMobile  =  false;extern string             SoundFile  =  "alert2.wav";   //"news.wav";   //"news.wav",   //"stops.wav"   //"expert.wav"//****************************************************************************//***                        Custom indicator buffers                      *** //****************************************************************************double STOCH[]; int TFK, SGB;  string BH2xID, sTFR, cTFR;  datetime TimeBar=0;//****************************************************************************//***             Custom indicator initialization function                 ***//****************************************************************************int init(){   TimeFrame = fmax(TimeFrame,_Period);  TFK = TimeFrame/_Period;  sTFR = StringSubstr(EnumToString(TimeFrame),7);  cTFR = StringSubstr(EnumToString(ENUM_TIMEFRAMES(_Period)),7);  //IndikName = WindowExpertName();                                                             //---   Kperiod = MathMax(Kperiod,1);   Slowing = MathMax(Slowing,1);     SGB = AlertBar*TFK;//---   IndicatorBuffers(1);   IndicatorDigits(0);  //(Digits-Digits%2);   //-----   SetIndexBuffer(0,STOCH);   SetIndexStyle(0,DRAW_NONE);   //-----   BH2xID = "BH'STO'TT["+(string)BarsToCheck+":"+(string)Kperiod+">"+(string)Slowing+">"+StringSubstr(EnumToString(StochPrice),4)+"±"+(string)OverBought+"±"+(string)OverSold+"]";//-----return(0);}//****************************************************************************//***              Custom indicator deinitialization function              ***//****************************************************************************int deinit() { delete_objects_containing(BH2xID);   return(0); }//-----//-----void delete_objects_containing(string bhname){  for (int i=ObjectsTotal()-1; i>=0; i--)     { if (StringFind(ObjectName(i),bhname)>= 0)       ObjectDelete(ObjectName(i)); }}//****************************************************************************//***                   Custom indicator iteration function                ***//****************************************************************************int start(){   int counted_bars=IndicatorCounted();     if (BarsToCheck<(Kperiod+Slowing)) BarsToCheck = Bars-3-(Kperiod+Slowing);      delete_objects_containing(BH2xID);   int hh, ll, sh, sl, eh=0, el=0;   /*double p;*/   int lastHH=0, lastLL=0;   double RangeATR = PlusATR ? iATR(NULL,TimeFrame,Kperiod,iBarShift(NULL,TimeFrame,Time[0])) /*/Kperiod*/ : 0;   //10*Point;  //оригинал....//****************************************************************************   while ( (eh >= 0 && eh < BarsToCheck) || (el >= 0 && el < BarsToCheck) )   //for (e=0; e>=0 && e<BarsToCheck; e++)   //    {     find_last_stoch_high(eh+1, hh, sh, eh);     //p = High[h];  //оригинал....     find_last_stoch_low (el+1, ll, sl, el);     //p = Low[h];  //оригинал....     //-----     if (eh > 0)      {       ObjectCreate(BH2xID+"H"+sh, OBJ_RECTANGLE, 0, Time[sh-1], High[hh]+RangeATR, Time[eh+1], Low[sh]-RangeATR);       ObjectSet(BH2xID+"H"+sh, OBJPROP_HIDDEN,false);       ObjectSet(BH2xID+"H"+sh, OBJPROP_COLOR, Rectangle1);      }     //---     if (el > 0)      {       ObjectCreate(BH2xID+"L"+sl, OBJ_RECTANGLE, 0, Time[sl-1], Low[ll] - RangeATR, Time[el+1], High[sl]+RangeATR);       ObjectSet(BH2xID+"L"+sl, OBJPROP_HIDDEN,false);       ObjectSet(BH2xID+"L"+sl, OBJPROP_COLOR, Rectangle2);      }     //-----     if (lastHH>0 && ShowLines && iBarShift(NULL,PERIOD_H1,Time[hh])<=HowH1forRay) //  && High[last_h] < p )      {  //ObjectCreate(BH2xID+"D"+sh, OBJ_TREND, 0, Time[h], p, Time[last_h], High[last_h]);  //оригинал....       ObjectCreate(BH2xID+"D"+sh, OBJ_TREND, 0, Time[hh], High[hh], Time[lastHH-1], Low[lastHH-1]);       ObjectSet(BH2xID+"D"+sh, OBJPROP_RAY, RayRight);       ObjectSet(BH2xID+"D"+sh, OBJPROP_HIDDEN,false);       ObjectSet(BH2xID+"D"+sh, OBJPROP_COLOR, Rectangle1 -15);   //Red       ObjectSet(BH2xID+"D"+sh, OBJPROP_STYLE, RayStyle);      } else ObjectDelete(BH2xID+"D"+sh);     //-----     if (lastLL>0 && ShowLines && iBarShift(NULL,PERIOD_H1,Time[ll])<=HowH1forRay) // && Low[last_h] > p )      {  //ObjectCreate(BH2xID+"U"+sl, OBJ_TREND, 0, Time[h], p, Time[last_h], Low[last_h]);  //оригинал....       ObjectCreate(BH2xID+"U"+sl, OBJ_TREND, 0, Time[ll], Low[ll], Time[lastLL-1], High[lastLL-1]);       ObjectSet(BH2xID+"U"+sl, OBJPROP_RAY,RayRight);       ObjectSet(BH2xID+"U"+sl, OBJPROP_HIDDEN,false);       ObjectSet(BH2xID+"U"+sl, OBJPROP_COLOR, Rectangle2 -15);   //Lime       ObjectSet(BH2xID+"U"+sl, OBJPROP_STYLE, RayStyle);      } else ObjectDelete(BH2xID+"U"+sl);     //-----     lastHH = hh;     lastLL = ll;    }//****************************************************************************   for (int e=BarsToCheck; e>=0; e--)  { STOCH[e]=0;   STOCH[e] = iStochastic(NULL,TimeFrame,Kperiod,1,Slowing,0,StochPrice,MODE_MAIN,iBarShift(NULL,TimeFrame,Time[e])); }//****************************************************************************//***                         BH Stoch Alerts TT [x3]                      ***//****************************************************************************         if (AlertsMessage || AlertsEmail || AlertsMobile || AlertsSound)          {       string messageDN = "BH Stoch TT << "+_Symbol+", "+cTFR+" << Signal DN << SELL";   //HA CLH 3C TT       string messageUP = "BH Stoch TT >> "+_Symbol+", "+cTFR+" >> Signal UP >> BUY";    //HA CLH 3C TT       //-----       if (TimeBar!=iTime(NULL,TimeFrame,0) && STOCH[SGB] < OverBought && STOCH[1+SGB] >= OverBought)         {         if (AlertsMessage) Alert(messageDN);         if (AlertsEmail)   SendMail(Symbol(),messageDN);         if (AlertsMobile)  SendNotification(messageDN);         if (AlertsSound)   PlaySound(SoundFile);   //"stops.wav"   //"news.wav"         TimeBar=iTime(NULL,TimeFrame,0);   //return(0);        }        //-----       else if (TimeBar!=iTime(NULL,TimeFrame,0) && STOCH[SGB] > OverSold && STOCH[1+SGB] <= OverSold)         {          if (AlertsMessage) Alert(messageUP);         if (AlertsEmail)   SendMail(Symbol(),messageUP);         if (AlertsMobile)  SendNotification(messageUP);         if (AlertsSound)   PlaySound(SoundFile);   //"stops.wav"   //"news.wav"         TimeBar=iTime(NULL,TimeFrame,0);   //return(0);        }      }//------return(0);}//****************************************************************************//***                         BH Stoch Alerts TT [x3]                      ***//****************************************************************************void find_last_stoch_high(int x, int& p, int& s, int& e){   s = -1;   e = -1;   p =  x;          //-----   for (int i=x; i<x+BarsToCheck; i++)    {     if (iStochastic(NULL,TimeFrame,Kperiod,1,Slowing,0,StochPrice,MODE_MAIN,iBarShift(NULL,TimeFrame,Time[i])) > OverBought)      {       p = i;       s = i;       break;      }    }   //-----   if (s>0)   for (i=s+1; i<s+BarsToCheck; i++)    {     if (iStochastic(NULL,TimeFrame,Kperiod,1,Slowing,0,StochPrice,MODE_MAIN,iBarShift(NULL,TimeFrame,Time[i])) < OverBought)      {       e = i-1;       break;      }     else { if (iHigh(NULL,TimeFrame,iBarShift(NULL,TimeFrame,Time[i])) > High[p]) p = i; }    }}//****************************************************************************//***                         BH Stoch Alerts TT [x3]                      ***//****************************************************************************void find_last_stoch_low(int x, int& p, int& s, int& e){   s = -1;   e = -1;   p =  x;   //-----   for (int i=x; i<x+BarsToCheck; i++)    {     if (iStochastic(NULL,TimeFrame,Kperiod,1,Slowing,0,StochPrice,MODE_MAIN,iBarShift(NULL,TimeFrame,Time[i])) < OverSold)      {       p = i;       s = i;       break;      }    }   //-----   if (s>0)   for (i=s+1; i<s+BarsToCheck; i++)   //iRSI(NULL,0,RSIPeriod,RSIPrice,i)    {     if (iStochastic(NULL,TimeFrame,Kperiod,1,Slowing,0,StochPrice,MODE_MAIN,iBarShift(NULL,TimeFrame,Time[i])) > OverSold)      {       e = i-1;       break;      }     else { if (iLow(NULL,TimeFrame,iBarShift(NULL,TimeFrame,Time[i])) < Low[p]) p = i; }    }} 由于时间有限加上对源码的追溯做不到最终解释权,所以我们提供的源码EA仅仅只能用来做模拟测试使用,严格禁止商业使用和跑实盘!

相关学习资料