当我尝试将两个双打在缓冲区中时,我的指示器变黑,并且值在第二个窗口中变为极端--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
,它会显示行但我想要的百分比是另一个的打印。
答案 0 :(得分:0)
一些抛光可能会有所帮助,但MQL4自定义指示器的核心逻辑在代码中被遗忘了。如果没有指定方法,如何在屏幕上绘制(绘制)线条,即使可能已经计算出值,GUI仍将保持“黑屏”状态。
自定义指标(所有自定义指标)共享一个常见的独奏线程( !! ),因此强烈建议在此类型的MQL4代码中进行适当的性能调整 - 执行块。
通过滑动窗口实现替换来减少/避免所有重复的重新平均,可以实现一些进一步的加速。虽然在5-BAR深度重新处理时没有那么大的风险,但对于更深层次的TimeSeries卷积,在Strategy Tester加速模式的计算运行时间(下降到几分钟而不是几小时)中效果显着且令人印象深刻。值得一个人的时间和努力。
Release