PlotIndexSetInteger(0,PLOT_ARROW,code);
//--- установим пустое значение PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
SetIndexBuffer(0,Buf1,INDICATOR_DATA);
PlotIndexSetString(0, PLOT_LABEL, "Break");
//----PlotIndexSetInteger(1,PLOT_ARROW,code);
//--- установим пустое значение PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
SetIndexBuffer(1,Buf2,INDICATOR_CALCULATIONS);
PlotIndexSetString(1, PLOT_LABEL, "Break");
在OnCalculate()中,代码定义了一个条件--up变量。
如果是真的,那么将执行以下代码
i=nPoint1; BreakUp=false; BreakDn=false;
while(i>=0 && BreakUp==false && BreakDn==false)
{
Print("i ",i);
tmp=iHigh(NULL,0,nPoint1)-Speed*(nPoint1-i);
tmp1=iHigh(NULL,0,nPoint1)-Speed*(nPoint1-i)-resultL;
if(NormalizeDouble(iLow(NULL,0,i),Digits())<NormalizeDouble(tmp1,Digits())
&& NormalizeDouble(iHigh(NULL,0,i),Digits())>NormalizeDouble(tmp,Digits()))
{ size=ArraySize(Buf1);
Print("size ",size);
BreakUp=true;
if(channelbreak) Buf1[i]=tmp;
Comm="\nПробой вверх на уровне " + DoubleToString(tmp,Digits());
} elseif(NormalizeDouble(iLow(NULL,0,i),Digits())<NormalizeDouble(tmp1,Digits()))
{ size=ArraySize(Buf1);
Print("size ",size);
BreakDn=true;
if(channelbreak) Buf1[i]=tmp1;
Comm="\nПробой вниз на уровне "+DoubleToString(tmp1,Digits());
} elseif(NormalizeDouble(iHigh(NULL,0,i),Digits())>NormalizeDouble(tmp,Digits()))
{ size=ArraySize(Buf1);
Print("size ",size);
BreakUp=true;
if(channelbreak) Buf1[i]=tmp;
Comm="\nПробой вверх на уровне "+DoubleToString(tmp,Digits());
} else
Comm="\nПробоя канала нет"; //i--;
} } Ошибка происходит при входе в цикл while при присвоении значения переменной значению буфера. Проверка на
размер массива буфера выдает ноль. Т.е. буфер не инициализируется. Всю голову сломал, не могу понять почему. В чем затык?
谢谢你。
我发现这个其他的东西,也许1)是一个封锁的经纪人。
https://www.mql5.com/ru/forum/38456/page127
https://www.mql5.com/ru/forum/304679
2)不知何故,百分比跳动得很厉害,我以前一直得到110%和70%的跳动,而且很多,我自己还没算过。也许这与负载有关,但我不这么认为。我打开小东西,规格中的杠杆是一样的,余额也几乎一样。
关于信号的一个共同点是这样的
https://www.mql5.com/ru/forum/10603/page394
供参考。
Bug MT5(build 2390)在类结构 描述中错误地计算了大括号。
谢谢你的帖子,已修复
这就是它的作用。
所以没有(总是0)。
方向-1;+1;0
这就是它的作用。
所以没有(总是0)。
方向-1;+1;0
就这样
还有这种方式。
也可以,第二个选项不起作用
我自己最近也面临这样的问题。我以前没有任何问题。但我被要求纠正代码,它不想正常工作,直到我把它投到双倍。
你所拥有的方向被声明为int。这就是你得到的东西。最近,许多函数对值变得相当挑剔。最好是处理好转换的问题。
我自己最近也面临这样的问题。我以前没有任何问题。但我被要求纠正代码,直到我把它带到双倍的时候,它才想正常工作。
是的,int,但它是乘法--在整数中也是30*1=30。我百分之百确定,在几个构建之前,它在第二个变体中也工作得很好,因为这30个是通过挑选...
似乎是MT5的另一个 "功能"...至少这块是装饰性的,但如果在某个地方像autolot或stoploss - 悲伤可能会发生 - 我经常通过乘以-1来扭转...
谢谢,我将使用另一个拐杖...
也可以,第二个选项不起作用。
啊,我无意中复制了错误的代码。
Konstantin是对的,为什么要把int放在应该是double的地方......这不是mql5的特点,这只是一些尝试,以适应秩序。
请帮助。
该指标出现了数组超出范围的错误。
在代码中,我已经定义了缓冲区
宣告的全局变量
在Init()中,我定义了属性
在OnCalculate()中,代码定义了一个条件--up变量。
如果是真的,那么将执行以下代码
请澄清,在指标调试期间,该指标的数值在打开的图表 上不可见,这是否正常?即,例如,我们在调试器中打开MACD。我们在向缓冲区写值的周期中设置一个断点。写完ChartRedraw()的值后。我期望在写完值后能在图表上马上看到这个值,但我只看到一个空窗口。
Build 2380 x64。