при такой реализации он у вас должен на каждом тике штамповать отложки, где условия выставления ордеров? где проверка что ордера уже выставлены?
"И все бы ничего, но когда я это тестирую открывается далеко не 12 ордеров, а на много больше, т.к.(как я понял)ордера открываются каждый раз, когда пробиваются эти уровни "
есть у вас во первых ошибки по выставлению отложенных ордеров, вот описание из справки терминала
- Отложенный ордер
Отложенный ордер — это распоряжение брокерской компании купить или продать финансовый инструмент в будущем по заданной цене. Данный ордер используется для открытия торговой позиции при условии равенства будущих котировок установленному уровню. Существует четыре типа отложенных ордеров:
- Buy Limit — купить при равенстве будущей цены "Ask" установленному значению. При этом текущий уровень цен больше значения установленного ордера. Обычно ордера этого типа выставляются в расчете на то, что цена инструмента, опустившись до определенного уровня, начнет расти;
- Buy Stop — купить при равенстве будущей цены "Ask" установленному значению. При этом текущий уровень цен меньше значения установленного ордера. Обычно ордера этого типа выставляются в расчете на то, что цена инструмента преодолеет некий уровень и продолжит свой рост;
- Sell Limit — продать при равенстве будущей цены "Bid" установленному значению. При этом текущий уровень цен меньше значения установленного ордера. Обычно ордера этого типа выставляются в расчете на то, что цена инструмента, поднявшись до определенного уровня, начнет снижаться;
- Sell Stop — продать при равенстве будущей цены "Bid" установленному значению. При этом текущий уровень цен больше значения установленного ордера. Обычно ордера этого типа выставляются в расчете на то, что цена инструмента достигнет определенного уровня и продолжит снижаться.
есть у вас во первых ошибки по выставлению отложенных ордеров, вот описание из справки терминала
Пойми меня правильно,я не хочу не с кем ссорится,но но то,что ты мне пишешь - это песня ни о чем.Мне правда очень нужна помощь в написании советника, я хочу понять что и как делать,что бы в будущем мог сам писать и помогать другим,но то,что ты сейчас пишешь,это или повторение моего текста или просто текст справки,который без объяснения моей ошибки и как ее исправить абсолютно бессмыслен.
Ну пивом тут не отделаешься:))))))))))
Если ты хочешь понять и в будущем иметь смелость помогать другим, то уж постарайся понимать то, что тебе говорят и пишут в документации.
1. Как вообще работает советник? Что должно произойти чтобы запустился код на исполнение?
Ответ: Поступает очередной тик.
Соответственно при поступлении очередного тика твой код выполняется и открывает очередную партию ордеров согласно алгоритма.
Домашнее задание:
Какое условие можно поставить чтобы при наличии ордеров часть кода не выполнялась?
В общем вот что у меня в итоге вышло:
void OnTick() { if (OrdersTotal() >= 1) { return; } if (Bid < 0.71000 && Bid > 0.70998) { int ticket; ticket = OrderSend("AUDUSD", OP_SELL, 0.1, Bid, 3, 0.71100, 0.70500, "", 123, 0, Red); } //-------------------------------------------------------------------------------------------// if (OrdersTotal() >= 1) { return; } if (Ask > 0.71000 && Ask < 0.71002) { int ticket; ticket = OrderSend("AUDUSD", OP_BUY, 0.1, Ask, 3, 0.70900, 0.71500, "", 123, 0, Blue); } }
Но появилась новая проблема. Когда открывается один ордер,второй,параллельно ему,не открывается. Я понимаю,что вся загвоздка в OrdersTotal. Все,что осталось сделать это каким то образом указать,что это условие относится непосредственно к одному ордеру,а не ко всему коду.Я уже что только не питался сделать,но ничего не вышло.
Те,кто читает это,очень прошу,не проходите мимо,любая помощь - это уже очень хорошо)))
В общем вот что у меня в итоге вышло:
Но появилась новая проблема. Когда открывается один ордер,второй,параллельно ему,не открывается. Я понимаю,что вся загвоздка в OrdersTotal. Все,что осталось сделать это каким то образом указать,что это условие относится непосредственно к одному ордеру,а не ко всему коду.Я уже что только не питался сделать,но ничего не вышло.
Те,кто читает это,очень прошу,не проходите мимо,любая помощь - это уже очень хорошо)))
Если Вы не программист, не мучайте... коды!! Это непростое дело... Лучше закажите советник
Вариантов может быть целая куча - кому как нравится.
Например, постоянно держит и обрабатывает один ордер: или отложку, или рыночный. Как только ордер уходит в историю (экспирация, удаление, срабатывание стопа или тейка) - выставляет новый:
void OnTick() { static int t1=-1; if(OrderSelect(t1,SELECT_BY_TICKET))//Ордер существует { if(OrderCloseTime()!=0) t1=-1;//Но уже в истории - разрешаем открыть следующий else switch(OrderType())//Иначе, если необходимо, можем обрабатывать ордер - модифицировать, тралить и т.п. { case OP_BUY: //например, тралим стоп-лосс break; case OP_SELL: break; case OP_BUYLIMIT: break; case OP_BUYSTOP: //например модифицируем отложку break; case OP_SELLLIMIT: break; case OP_SELLSTOP: break; default: Print("Упс! Сюда попадать не должны никогда!"); } } if(!OrderSelect(t1,SELECT_BY_TICKET))//Ордера нет. Пробуем открыть новый { t1=OrderSend(...); } }
Вариантов может быть целая куча - кому как нравится.
Например, постоянно держит и обрабатывает один ордер: или отложку, или рыночный. Как только ордер уходит в историю (экспирация, удаление, срабатывание стопа или тейка) - выставляет новый:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Ребята, нужна помощь в написании советника. Я смотрел видеоуроки, читал книгу по MQL4, но вот нигде не было хоть какого то примера для очень простого советника, везде идут примеры с использованием каких либо индикаторов.
В общем суть очень простая, на определенном уровне ставится 3 ордера на покупку и 3 ордера на продажу с разными TP и SL. То же самое делается и на другом уровне. И все бы ничего, но когда я это тестирую открывается далеко не 12 ордеров, а на много больше, т.к.(как я понял)ордера открываются каждый раз, когда пробиваются эти уровни . А мне надо, что бы открылось 6 ордеров по пробою одного уровня, и новый ордер на этом уровне опять стал только по достижению TP или SL.
Вот код,который я написал...
А визуально это выглядит как на картинке
( показана эта часть кода
)
Я думал что может после каждого OrderSend писать if ,и там уже указать, что если открыт один ордер, повторно выставлять его только после достижения профита или лося, вот только не могу правильно сформулировать это на языке MQL4...