![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
95% спорадических ошибок связаны с ошибками инициализации, либо отсутствием таковой. Так что фрагмент кода не поможет, а весь он не даст, ибо паранойя. ;-)
Причину следует искать очень далеко от места проявления, а афтару влом - проще потребовать расстрела для разработчиков. Это ведь наверняка поможет.
// Ведь правда поможет, falkov ? :)
Супер! Кажется, это должно помочь! :)
Инициализацию делаю тупо ВЕЗДЕ И ВСЕГДА! Даже, если через пару строк присваиваю значение переменной. Просто установил для себя железное правило - при объявлении переменной тупо ее инициализировать нулем или пустой строкой :)
Про паранойю абсолютно точно!
Метадрайвер, ты Шаман!
Супер! Кажется, это должно помочь! :)
Инициализацию делаю тупо ВЕЗДЕ И ВСЕГДА!
А не верю! Вот на этот раз пропустил, наверняка. :)
// Реально проверь ещё раз, просмотри весь код под этим углом.
// Именно вера в своё "ВЕЗДЕ И ВСЕГДА", может фильтровать восприятие собственного зевка, ибо "я же ВСЕГДА...!!" :))
:)
А не верю! Вот на этот раз пропустил, наверняка. :)
// Реально проверь ещё раз, просмотри весь код под этим углом.
// Именно вера в своё "ВЕЗДЕ И ВСЕГДА", может фильтровать восприятие собственного зевка, ибо "я же ВСЕГДА...!!" :))
Я же говорю - Шаман! В выходные проверил все файлы советника (несколько тысяч строк). И правда, нашел две или три неинициалированных переменных в старых библиотеках.
У меня правило - объявлять ВСЕ переменные в начале тела функции (это было всегда) и сразу же их инициализировать (последний год, наверное)
Сам себя чайником не считаю - написано больше сотни всяких разных индиков/скриптов/советников :)
А тут бьюсь как рыба об лед - не могу локализовать! Вот хоть застрелись!
Вот код, кстати:
//Найти первое 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;
}
//-------------------------------------------------------------------------------------------------
хм, а почему не проверяете на выход за пределы массива 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(Ура!Заработало!);
кактотак
Вы знаете, попробовал компиллировать имено в таком виде, страшно ругается.
'PositionGetInteger' - constant expected ордерній.mq5 65 44 Вижу слово константа. Но что ему надо?? Это на функцию в первой строке.
А вот так на все остальные обьявления переменных, но я же обьявлял функцию согласно справке?
'price' - missing default value for parameter ордерній.mq5 65 92