![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
учитывая то, что программа при необходимости вернется к модификации на новом тике
примерно так проще, понятнее и практичнее:
int ticket=OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(),0,clrNONE);
if(ticket<0)
{
Print("Modify error ", GetLastError());
return;
}
int a = OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(), 0) ;
while (!a) {
OrderModify(); }
Так будет работать? Хочу чтобы советник пытался изменить ордер до тех пор пока не получится.
int a = OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(), 0) ;
while (!a) {
OrderModify(); }
Так будет работать? Хочу чтобы советник пытался изменить ордер до тех пор пока не получится.
не желательно зацикливать торговые приказы, торговый сервер может забанить Вашего эксперта как атакующего
сделайте так, чтобы торговый приказ на модификацию отработался в любом случае
ознакомьтесь с документацией, разберитесь в каких случаях торговый сервер отклонит Ваш приказ и напишите верный код, который учтет все нюансы
int a = OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(), 0) ;
while (!a) {
OrderModify(); }
Так будет работать? Хочу чтобы советник пытался изменить ордер до тех пор пока не получится.
Можно сделать примерно так.
нет, Вы просто узнаете выполнилась ли команда OrderModify ?
if( OrderModify () == true) или то же самое if( OrderModify () >=0) - выполнилась
if( OrderModify () == false) или то же самое if( OrderModify () != true) или то же самое if( OrderModify () <0) - не выполнилась
а если далее дописать что нибудь в фигурных скобках, то если условие правда, то и выполнится то, что в фигурных скобках
например
if( OrderModify ()) { тут выполнится при условии успешной модификации ордера , что означает что модификация ордера фактически произошла }
if(! OrderModify ()) { тут выполнится при условии модификации ордера, завершившейся с ошибкой, что означает что модификация ордера фактически не произошла }
Доброе утро, Ренат! В коде, выделенном жёлтым цветом, точно нужен знак равенства? В коде, выделенном зелёным цветом, точно должен быть знак < ? Справочник с Вами не согласен.
С уважением, Владимир.
Доброе утро, Ренат! В коде, выделенном жёлтым цветом, точно нужен знак равенства? Справочник с Вами не согласен
С уважением, Владимир.
В его коде даже индус ногу сломает.
...
Только от великого ума наверно пишут так if( OrderModify () == true) Интересно какой машинный код генерирует при этом компилятор. Или в нем защита от таких шедевров встроена. OrderModify () возвращает или true или false.
Получается если он возвращает true то код будет выглядеть так if (true==true) если возвращает false то код получится if ( false==true) . В итоге такая конструкция заставляет процессор дважды производить логические вычисления из за наличия оператора сравнения. Тогда как если написано просто if( OrderModify () ) вычисление происходит только один раз.
Ну и начудили вы тут… Одному OrderModify() возвращает тикет, другому ещё чудней…
Но я ввязываться в ваши разборки уже не буду, чуди́те дальше, я буду просто заходить сюда повеселиться.
Товарищи, почему перебирая все ордера нужно писать i=OrdersTotal()-1, а что последний ордер не ордер?
for(int i=OrdersTotal()-1; i>=0; i--)
или у меня код написан не правильно? Хотя ... все работает.
Товарищи, почему перебирая все ордера нужно писать i=OrdersTotal()-1, а что последний ордер не ордер?
for(int i=OrdersTotal()-1; i>=0; i--)
или у меня код написан не правильно? Хотя ... все работает.
В его коде даже индус ногу сломает.
...
Только от великого ума наверно пишут так if( OrderModify () == true) Интересно какой машинный код генерирует при этом компилятор. Или в нем защита от таких шедевров встроена. OrderModify () возвращает или true или false.
Получается если он возвращает true то код будет выглядеть так if (true==true) если возвращает false то код получится if ( false==true) . В итоге такая конструкция заставляет процессор дважды производить логические вычисления из за наличия оператора сравнения. Тогда как если написано просто if( OrderModify () ) вычисление происходит только один раз.
схематично писали