Я написал просто советник к индикатору ADX. если DI+ поднимается выше DI- то он открывает ордер на покупку а закрывает на продажу. И наоборот. Вроде все просто и правильно написано. Однако советник в тестере почему-то запарывается.
Советник прилагается к сообщению.
В тестере почему-то советник каждую секунду совершает две операции - BUY и CLOSE. постоянно buy-close-buy-close-buy-close..... и так пока тестовый счет не скатывается к нулю. Дамы и господа, не могли бы вы помочь мне в этом? Это проблемы с тестером стратегий или я что-то не то написал в коде?
В коде очень много проблем.
Самая главная, что после пустого перебора ордеров вы работаете с последний открытым, а не с каждым по очереди. Видимо это получилось случайным переставлением фигурной скобки.
Итого, за первую итерацию вы по сигналу открываете ордер buy, затем из за ошибки в блоке sell выставляете флаг OB=true на закрытие -> if (OrdersTotal()>0&&Type==0), по идее там должно быть Type == 1, а вообще лучше использовать стандартные константы OP_BUY, OP_SELL. Далее, в этой же итерации вы закрываете ордер.
Видимо за основу был взят очень старый код. Сейчас используются другие события. Код компилируется только потому, что старые еще поддерживаются для совместимости.
Я так понимаю, вы пока просто разбираетесь в написании советников. Рекомендую еще раз прочитать код, подписать закрывающие скобки комментариями, например так:
for (int i=0; i<OrdersTotal(); i++) { // Цикл перебора ордеров if (!OrderSelect(i, SELECT_BY_POS)) continue; // Если ордера нет, пропускаем if (OrderMagicNumber() != Magic) continue; // Если не наш мэджик, пропускаем Total++; // Счетчик рыночн. орд. if (Total>1) { // Не более одного орд. Alert("Many orders. Error."); return(0); // Выход из start() <-!!! после открытия первого ордера робот перестает вообще что либо делать в следующей итерации } //end if Ticket=OrderTicket(); // Номер выбран. орд. Type =OrderType(); // Тип выбран. орд. Lots =OrderLots(); // Количество лотов // Тут по идее должен быть остальной код функции Start (функция Start, достаточно давно заменена на событие OnTick, прочитайте документацию } //end for
Aleskei, спасибо большое за совет, учту ваши заметки и пожалуй буду коптеть над кодом дальше. Я и правда пока только разбираюсь в советниках. Видимо я читал древний материал...

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я написал просто советник к индикатору ADX. если DI+ поднимается выше DI- то он открывает ордер на покупку а закрывает на продажу. И наоборот. Вроде все просто и правильно написано. Однако советник в тестере почему-то запарывается.
Советник прилагается к сообщению.
В тестере почему-то советник каждую секунду совершает две операции - BUY и CLOSE. постоянно buy-close-buy-close-buy-close..... и так пока тестовый счет не скатывается к нулю. Дамы и господа, не могли бы вы помочь мне в этом? Это проблемы с тестером стратегий или я что-то не то написал в коде?