int buy() { // проверяем, есть ли от других экспертов нам "зеленый свет" для торговли... если есть пытаемся заблокировать торговлю для других if(Lock() == -1) return(0); // если не удалось заблокировать... выходим OrderSend(Symbol(),OP_BUY,Mylot,Ask,0,0,0,"BO exp:60",MagicNumber,0,Blue); UnLock(); // разблокируем... разрешаем торговлю для других buycycle = TRUE; mbars = Bars; } int sell() { // проверяем, есть ли от других экспертов нам "зеленый свет" для торговли... если есть пытаемся заблокировать торговлю для других if(Lock() == -1) return(0); // если не удалось заблокировать... выходим OrderSend(Symbol(),OP_SELL,Mylot,Bid,0,0,0,"BO exp:60",MagicNumber,0,Blue); UnLock(); // разблокируем... разрешаем торговлю для других mbars = Bars; sellcycle = TRUE; }
Доброго времени суток! Пишу советник торгующий по мартингейлу, цикл в 7 ступеней. Если вешать на 1 пару, то все работает идеально. Если вешаю на несколько, то происходят странные вещи, например перескакиваются ступени мартингейла, ордера открываются некорректно и не открываются в нужный момент.
Советник для бинарных опционов. В голову сразу приходит, что некорректно реализовано считывание ордеров из истории, в момент когда советник проверяет был ли последний ордер (WIN, LOSS или DRAW). Но он сверяет Мэджик намбер и и Валютную пару. Мэджики выставляю разные. почему так? Благодарю
Если на одной паре работает идеально, то проблема может быть только в тех местах где советник работает с ордерами. Таких части в советнике всего две. Выкладываю.
1. Проверяет был ли последний ордер закрыт в прибыль, убыток или ничью
2. Проверяет в профите ли открытый ордер
Так же пробовал добавлять "светофор" через глобальные переменные. Но не помогло.
Светофор реализовывался следующим образом:
В orderprofit условие if (OrderMagicNumber()==MagicNumber) не проверяет символ, если Вы укажете для всех инстанций робота один и тот же MagicNumber то будут коллизии.
Без описания логики эксперта и мартингейла, трудно что-то дельное советовать, непонятно зачем нужно разрешение от других инстанций робота, OrderSend будет работать в каждом потоке отдельно...
Благодарю за ответы! Насчет символа я в курсе, но сейчас не об этом. Я устанавливаю разные мээджики. А по поводу документации спасибо. Сейчас погляжу.
Я еще ошибку увидел, чего же все ее делают? Почему вы решили, что терминал непременно вернет вам true на вызов OrderSelect? Даже значение в result сохраняете, но не проверяете. И насчет Symbol() совсем нелогично.
for(int i=(OrdersHistoryTotal()-1);i>=0;i--) { result=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if(result && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //*************** или проще сразу так for(int i=(OrdersHistoryTotal()-1);i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(result && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) // все остальное }
Я еще ошибку увидел, чего же все ее делают? Почему вы решили, что терминал непременно вернет вам true на вызов OrderSelect? Даже значение в result сохраняете, но не проверяете. И насчет Symbol() совсем нелогично.
Благодарю, Alexey! Еще вопрос, в случае если OrderSelect вернет FALSE, я должен зациклить OrderSelect до тех пор пока он не вернет TRUE? (через while) Или же просто выйти из функции? Заранее спасибо
Прочитайте в справочнике про Symbol() и Ask, Bid
Andrey Rakhlin:
Доброго времени суток! Пишу советник торгующий по мартингейлу, цикл в 7 ступеней. Если вешать на 1 пару, то все работает идеально. Если вешаю на несколько, то происходят странные вещи, например перескакиваются ступени мартингейла, ордера открываются некорректно и не открываются в нужный момент.
Прочитал справочник, но так и не понял, на что вы намекаете
Так как не сказано что вы используете несколько графиков, но используйте несколько инструментов:
Symbol
Возвращает имя символа текущего графика.
double Ask
Последняя известная цена продажи (запрашиваемая цена) текущего инструмента.
Так как не сказано что вы используете несколько графиков, но используйте несколько инструментов:
Symbol
Возвращает имя символа текущего графика.
double Ask
Последняя известная цена продажи (запрашиваемая цена) текущего инструмента.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток! Пишу советник торгующий по мартингейлу, цикл в 7 ступеней. Если вешать на 1 пару, то все работает идеально. Если вешаю на несколько, то происходят странные вещи, например перескакиваются ступени мартингейла, ордера открываются некорректно и не открываются в нужный момент.
Советник для бинарных опционов. В голову сразу приходит, что некорректно реализовано считывание ордеров из истории, в момент когда советник проверяет был ли последний ордер (WIN, LOSS или DRAW). Но он сверяет Мэджик намбер и и Валютную пару. Мэджики выставляю разные. почему так? Благодарю
Если на одной паре работает идеально, то проблема может быть только в тех местах где советник работает с ордерами. Таких части в советнике всего две. Выкладываю.
1. Проверяет был ли последний ордер закрыт в прибыль, убыток или ничью
2. Проверяет в профите ли открытый ордер
Так же пробовал добавлять "светофор" через глобальные переменные. Но не помогло.
Светофор реализовывался следующим образом: