Для начала попробуйте не кинуть, а аккуратно положить
Мне нужна помощь, а не сарказм.
for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { WriteError(i); Print("Ошибка вызвана из блока модификации Buy-ордеров"); } if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {//начало работы с выбранным ордером if(OrderSymbol()!=SMB) continue; // Если не наш - смотрим следующий if(OrderType()==OP_BUY) { if(OrderStopLoss()==0) { if(TakeProfit==0) TP=Ask+1000*Point; else TP=Ask+TakeProfit*Point; TP=NormalizeDouble(TP,digits); SL=FractalDOWN()-Zazor*Point; SL=NormalizeDouble(SL,digits); Prise=OrderOpenPrice(); Prise=NormalizeDouble(Prise,digits); Ticket=OrderTicket(); fm2=OrderModify(Ticket,Prise,SL,0,0,CLR_NONE); if(fm2==0 || fm2==-1) ModifError(i); } } } }
Изначально код выглядел нормально. Потом я стал редактировать сообщение и после сохранения код вообще встал в одну строку. Пришлось редактировать заново. Скобки конечные не стал уже расставлять - думал жители форума поймут почему они так раставлены.
Код выложить не могу - идея в него вложенная не является моей собственностью. Человек не хочет афишировать свою идею. Ладно, Бог с ним, администратор, закройте пожалуйста тему - буду копаться сам. Просто я думал, что кто-то уже с подобным сталкивался и может, расскажет в чём тут дело.
Прежде, чем разбираться в коде, хотелось бы уточнить, где возникает ошибка, на real (demo) счёте или в тестере. Из сообщения неясно, судя фразе: "Кидаю скрипт " - в реале или демо, там Orders Total() врать не может, неважно, валюты, CFD или Futures. А отложники учитываете ?
Счёт Демо. Отложенных ордеров нет. Было открыто три ордера - один по золоту, один по DAX-у и один по нефти. Вот с ними-то и произошли чудеса. На валютных парах всё нормально.
Из кода не видно, где Вы видите 10, вместо 3. Замечания по коду, будем ориентироваться на вариант klerka, где он убрал лишние скобки. Дважды анализируете OrderSelect() с одими тем же параметром, причём в первом случае, вызывате функцию WriteError(i), может она и не причём, что делает, неизвестно. Я бы использовал конструкцию if ..... else .... Надеюсь, в digits у Вас содержится Digits для Вашего SMB. Вызывает сомнение конструкция
fm2=OrderModify(Ticket,Prise,SL,0,0,CLR_NONE); if(fm2==0 || fm2==-1) ModifError(i);
У Вас как определена fm2 , как int или как bool ? Компилятор здесь должен
выдавать предупреждение о несоответствии типов при сравнении.
У Вас какой Bild, 208 ?
Выражение в скобках может быть справедливо при любом результате
вызова функции OrderModify() .
Переменная fm2 объявлена булевой переменной, как и положено для функции модификации. Билд терминала = 208. В предыдущих билдах такой ошибки не возникало.
Далее, на функцию WriteError() внимания не обращайте - она лишь говорит о том, что ошибка возникла такая-то и даёт русское описание ошибки. Функция проверена - ошибок в ней нет.
Результат работы этой функции мы как раз и видим в журнале.
Насчёт digits не сомневайтесь - я не мальчик и таких грубых промахов не делаю.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Самое интересное, что изменение ДЦ дает те же самые результаты. Может я чего не знаю и при работе с CFD и Futures нужно что н-ть прописывать в коде?