//Найти первое adblArray_Short х adblArray_Long ПОСЛЕ (позже) intShift_PastSearch (поиск от intShift_PastSearch до нулевого бара) void FindCrossArrays_PastThisShift(structS & structSled) { datetime adtmDTM[]; int intShift=0;
▼ - вот здесь ошибка- array out of range in '_indMyAO_from_SetPeriod.mq5' (390,37) while(structSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}
95%的零星错误都与初始化错误有关,或缺乏初始化。 所以,一个 代码片段不会有帮助,整个代码也不会,因为它是偏执的;-)
应该在离表现的地方很远的地方寻找原因,对于阿法尔来说,这很无聊--要求对开发商进行行刑更容易。这肯定会有帮助。
// 这确实有帮助,不是吗 ,法尔科夫?)
很好!看来它应该有帮助!:)
我直截了当地在所有地方都做了初始化,而且始终如此!"。即使我在几行之后给一个变量赋值。我刚刚制定了一条铁律--当你声明一个变量 时,用null或空字符串初始化它 :)
关于偏执狂绝对是对的!
Metadriver,你是一个萨满!
很好!似乎应该有帮助!:)
初始化在任何地方都是愚蠢的!
我不相信!这次我一定是错过了。 :)
//真的再检查一下,从这个角度看一下整个代码。
// 是对你的 "永远和永远 "的信念,可能会过滤你自己打哈欠的感知,因为 "我永远......!" :) )
:)
我不相信!这次我肯定错过了。 :)
//真的再检查一下,从这个角度看一下整个代码。
// 正是对你的 "无处不在,无时不在 "的信念,可以过滤你自己打哈欠的感知,因为 "我总是......!" :) )
我告诉你--萨满!在周末,我检查了所有的EA文件(几千行)。而且是真的,我在旧库中发现了两三个未初始化的变量。
我的规则是在函数体 的开头声明所有的变量(这一直是事实),并立即初始化它们(去年,可能)。
我不认为自己是个傻瓜--我已经写了一百多个不同的指数/脚本/顾问 :)
而我在这里就像一条冰上的鱼一样挣扎着--我无法定位!我可以向自己开枪!
顺便说一下,这是代码。
//Найти первое adblArray_Short х adblArray_Long ПОСЛЕ (позже) intShift_PastSearch (поиск от intShift_PastSearch до нулевого бара)
void FindCrossArrays_PastThisShift(structS & structSled) {
datetime adtmDTM[];
int intShift=0;
if(structSled.intShift_PastSearch>_cintBarsAmountForCalc) {return;}
else if(structSled.intShift_PastSearch<=0) {return;}
ArrayResize(adtmDTM,structSled.intBarsAmountForCalc);
ArrayInitialize(adtmDTM,0);
ArraySetAsSeries(adtmDTM,true);
CopyTime(structSled.strSymbol,structSled.enumTF,0,structSled.intShift_PastSearch+1,adtmDTM);
intShift=structSled.intShift_PastSearch;
▼ - вот здесь ошибка - array out of range in '_indMyAO_from_SetPeriod.mq5' (390,37)
while(structSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}
if(structSled.adblArray_Short[intShift]>structSled.adblArray_Long[intShift]) {
while(structSled.adblArray_Short[intShift]>structSled.adblArray_Long[intShift] && intShift>0) {intShift--;}
if(intShift>0) {
structSled.intRet_FindingDirection=-1;
structSled.intRet_FindingShift=intShift;
}
else {
structSled.intRet_FindingDirection=0;
structSled.intRet_FindingShift=intShift;
}
}
else if(structSled.adblArray_Short[intShift]<structSled.adblArray_Long[intShift]) {
while(structSled.adblArray_Short[intShift]<structSled.adblArray_Long[intShift] && intShift>0) {intShift--;}
if(intShift>0) {
structSled.intRet_FindingDirection=1;
structSled.intRet_FindingShift=intShift;
}
else {
structSled.intRet_FindingDirection=0;
structSled.intRet_FindingShift=intShift;
}
}
structSled.dtmRet_FindingDTM=adtmDTM[structSled.intRet_FindingShift];
return;
}
//-------------------------------------------------------------------------------------------------
hmm,你为什么不检查数组 超限 intShift=structSled.intShift_PastSearch。
如果intShift超出了数组的限制, while(structSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}。
将立即导致错误,因为代码将从左到右执行,对structSled.adblArray_Short[intShift]的引用将发生在&&intShift>1之前。
设置检查后intShift=structSled.intShift_PastSearch;然后输出如果退出阵列外则Print(Hurray! It worked!)
像这样
你知道,我试着用这种形式来编译,它让我感到害怕。
'PositionGetInteger' - 常数预期.mq5 65 44 我看到常数这个词。但它需要什么呢?它在该函数的第一行。
所有其他的变量声明都是这样的,但我已经按照帮助声明了函数,不是吗?
'price' - 缺少参数order.mq5的默认值 65 92