任何MQL4程序员?这段代码有什么问题?

时间:2017-07-08 16:09:05

标签: mql4

当我尝试将两个双打在缓冲区中时,我的指示器变黑,并且值在第二个窗口中变为极端--90000000和90000000

    #property indicator_separate_window // Îòîáðàæåíèå â îòäåëüíîì îêíå
    #property indicator_buffers 3       // Êîëè÷åñòâî áóôåðîâ
    #property indicator_color1 Red     // Öâåò ïåðâîé ëèíèè
    #property indicator_color2 Blue     // Öâåò âòîðîé ëèíèè
    #property indicator_color3 Green

    double FillBuffer[];
    double DBuffer[];
    double AverageBuffer[];

    double H,L;
    double point=Point();

   int init()                          // Ñïåöèàëüíàÿ ôóíêöèÿ init()
   {  
      int period =  _Period;  
      string symbol =  Symbol();
      int digits =  _Digits ;   
      point =  _Point ;

     if(digits == 5 || digits == 3) { digits = digits - 1 ; point = point * 10 ; } 


     SetIndexBuffer(0,DBuffer);   
     SetIndexBuffer(1,FillBuffer);
     SetIndexBuffer(2,AverageBuffer);    
     SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1);
     SetIndexLabel(0, "ADR");


     return(INIT_SUCCEEDED);                       
     }

     int start()
     {


     int i, limit, counted_bars;

     counted_bars = IndicatorCounted();
     //---- check for possible errors
     if (counted_bars<0) return(-1);
     //---- last counted bar will be recounted
     if (counted_bars>0) counted_bars--;
     limit = Bars - counted_bars;

     for (i = limit; i >= 0; i--)
     {
     double dbuff= iHigh(NULL,0,i)- iLow(NULL,0,i);
     double D0  = iHigh(NULL,0,i+1)- iLow(NULL,0,i+1);
     double D1  = iHigh(NULL,0,i+2)- iLow(NULL,0,i+2);
     double D2  = iHigh(NULL,0,i+3)- iLow(NULL,0,i+3);
     double D3  = iHigh(NULL,0,i+4)- iLow(NULL,0,i+4);
     double D4  = iHigh(NULL,0,i+5)- iLow(NULL,0,i+5);
     double Average = ((D0+D1+D2+D3+D4)/5)/point;
     FillBuffer[i]=dbuff/Average;

     }

     return(0);

当我尝试将 FillBuffer[] 中的两个值分开时,我的指标会消失。但是,如果我在缓冲区中只有 dbuff Average ,它会显示行但我想要的百分比是另一个的打印。

1 个答案:

答案 0 :(得分:0)

代码没有太大问题,但它没有画线:

一些抛光可能会有所帮助,但MQL4自定义指示器的核心逻辑在代码中被遗忘了。如果没有指定方法,如何在屏幕上绘制(绘制)线条,即使可能已经计算出值,GUI仍将保持“黑屏”状态。

绩效警告:

自定义指标(所有自定义指标)共享一个常见的独奏线程( !! ),因此强烈建议在此类型的MQL4代码中进行适当的性能调整 - 执行块。

通过滑动窗口实现替换来减少/避免所有重复的重新平均,可以实现一些进一步的加速。虽然在5-BAR深度重新处理时没有那么大的风险,但对于更深层次的TimeSeries卷积,在Strategy Tester加速模式的计算运行时间(下降到几分钟而不是几小时)中效果显着且令人印象深刻。值得一个人的时间和努力。

Release