Глубокомысленно)
----------------------------
Из того что смог уловить из первог о поста: это Close[z], где z!=0 А z не больше Bars? Тогда Close может быть 0.
Кроме, если ошибка вылезает в начале тестирования, обратите внимание на инициализацию переменных.
//--------------------------------------------------------------- if (Hour()==12&&Minute()==5) { double Profit=0; double Swap=0; int sh=0;//на этот ноль в дальнейшем и происходило деление, исправил на 1 while(true) { if(OrderSelect(sh,SELECT_BY_POS,MODE_HISTORY )==false) break; if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue; //Swap=Swap+OrderSwap(); Profit=Profit+OrderProfit(); sh++; } //Alert(Swap); Alert("кол-во позиций ",sh," мат.ожид.=",(Profit+MarketInfo(Symbol(),13)*sh)/sh); } //--------------------------------------------------------------- 9 -- return; // Выход из start() }
И еще, возникновение этой ошибки "zero divide" позволяло советнику открывать позиции. После того как ее исправил, советник перестал открывать позы, с чем тоже разобрался)
Больше Ашибок нету!
Спасиб за помощь)
Помогите, пожалуста! Тажи проблема, индикатор неработает :/
for (int i=limit; i>2; i--) { //---- Блок Up-фракталов if (iFractals(NULL,0,MODE_UPPER,i)!=0) { Up++; BufPriceUp[Up]=iFractals(NULL,0,MODE_UPPER,i); BufCandleUp[Up]=i; if (Up>2 && Up-BufUp>1 && BufPriceUp[Up]<BufPriceUp[Up-1] && BufPriceUp[Up-1]<BufPriceUp[Up-2]) { BufUp=Up; int x1=BufCandleUp[Up-1]; int x2=BufCandleUp[Up]; double y1=NormalizeDouble(BufPriceUp[Up-1],4); double y2=NormalizeDouble(BufPriceUp[Up],4); } } //---- Блок Down-фракталов if (iFractals(NULL,0,MODE_LOWER,i)!=0) { Down++; BufPriceDown[Down]=iFractals(NULL,0,MODE_LOWER,i); BufCandleDown[Down]=i; if (Down>2 && Down-BufDown>1 && BufPriceDown[Down]>BufPriceDown[Down-1] && BufPriceDown[Down-1]>BufPriceDown[Down-2]) { BufDown=Down; int x13=BufCandleDown[Down-1]; int x23=BufCandleDown[Down]; double y13=NormalizeDouble(BufPriceDown[Down-1],4); double y23=NormalizeDouble(BufPriceDown[Down],4); } } int x =i; double y =((x-x1)*(y2-y1)/(x2-x1))-x; // Функция описуваещая линию тренда UP double y3 =((x-x13)*(y23-y13)/(x23-x13))-y13;// Функция описуваещая линию тренда DOWN if (y<Bid) BuffDn[i]=High[i] + ArrShift; if (y3<Bid) BuffUp[i]=High[i] + ArrShift; }
Скорее всего, ошибка возникает вот на этих действиях
double y =((x-x1)*(y2-y1)/(x2-x1))-x; // Функция описуваещая линию тренда UP
double y3 =((x-x13)*(y23-y13)/(x23-x13))-y13;
Попробуйте иначе задать эти величины. Чтобы не было деления вообще.
Похоже, MQL4 вообще не любит операцию "/", и даже если деление задается и проводится корректно, то всё равно, зачастую, без причины возвращается ошибка "zero divide"
Неоднократно с этим сталкивался!
Можете и вот сюда глянуть тож - Ошибка "zero divide".......... кто дурак????
Скорее всего, ошибка возникает вот на этих действиях
double y =((x-x1)*(y2-y1)/(x2-x1))-x; // Функция описуваещая линию тренда UP
double y3 =((x-x13)*(y23-y13)/(x23-x13))-y13;
Попробуйте иначе задать эти величины. Чтобы не было деления вообще.
Похоже, MQL4 вообще не любит операцию "/", и даже если деление задается и проводится корректно, то всё равно, зачастую, без причины возвращается ошибка "zero divide"
Неоднократно с этим сталкивался!
Можете и вот сюда глянуть тож - Ошибка "zero divide".......... кто дурак????
Да похожи вы правы, в етом мести ошибка, беда в том что без зтой функции, все бесполезно... :/

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вчера впервые сталкнулся с этой ошибкой, при оптимизации, в "Результаты оптимизации" некоторые варианты параметров ничем неотличаясь от других показывали прибыль, но установив их, получаю полный лог ошибки "...EURUSD,M5: zero divide" и как следствие ни одной открытой сделки.., причину этой ошибки удалось устранить, суть: переменной extern double x1 =...; в стандартной функции int start() присваивал другое значение(константа), зависящее от первоначального, за что и получал "zero divide", для решения проблемы добавил еще одну переменную, на которую уже присваивалось вычисляемое значение... Здесь все ок)
НО сегодня столкнулся с ошибкой еще более странной из той же серии "zero divide":
данный код часть вызываемой функции, так вот ошибка возникала изза переменной типа double Fmax, которая используется только в этом участке кода, как видно она может только принимать значения, и быть сравниваемой, пробовал и нормализовывать и приводить обе переменные Fmax и maX[1] к целым, многое что еще, ничего непомогало, а если ее "затереть" то эксперт работает без ошибок, но если затереть то будет другой результат торговли, да и не выход.
Причину нашел, эта функция у меня за один "проход" функции start() вызывалась несколько раз(с одним и тем же ответом либо 1 либо -1), что не запрещено(:, так вот при втором вызове и вылетала эта ошибка, недавая добраться до открытия позиции. Решение: добавил переменную, которой и стал присваивать результат функции, а уже потом, эту переменную тыкал там где нать))
Впринципе интересные головоломки выскакивают иногда, но больно уж много времени уходит на их решение ;)
p.s. осталась еще парочка "zero divide", так к примеру при тестировании на м5 за 1 год, в первый день (в не зависимости от какой даты начинается тестирование) в течение первых суток периодически выскакивают энти сюрпризы, а на протежении оставшейся даты больше невстречаются..
Советник тестовый, и операции деления в нем неиспользуются