Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
так там же !OrderModify.
Получается если ордер не изменен, то команда RefreshRates(); меняет этот ордер?
Вот Вам другая загадка.
Ни как не могу понять в чем смысл этого кода. Люди тут собрались явно знающие, так что помогите, пожалуйста. Но только не вводите в заблуждение ;)
if(OrderType()==OP_BUY) {
if(!OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(), OrderExpiration())) {
RefreshRates();
if(!OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(), OrderExpiration())) {
Print("Modify error ", GetLastError()); }
else extr_price=-1; }
else extr_price=-1; }
чтобы правильно и логично написать такое, нужно посмотреть, что возвращает та или иная функция
https://docs.mql4.com/ru/trading/ordermodify
где написано:
Возвращаемое значение
Возвращает true при успешном завершении функции или false в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
---
и ниже там же пример кода
учитывая то, что программа при необходимости вернется к модификации на новом тике
примерно так проще, понятнее и практичнее:
int ticket=OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(),0,clrNONE);
if(ticket<0)
{
Print("Modify error ", GetLastError());
return;
}
До конца всё равно не уяснил какая команда призвана изменить текущий ордер.
А если бы написано было следующее:
if(OrderType()==OP_BUY) {
if(OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(), OrderExpiration()))
RefreshRates();
else extr_price=-1;
тогда что бы произошло?
До конца всё равно не уяснил какая команда призвана изменить текущий ордер.
А если бы написано было следующее:
if(OrderType()==OP_BUY) {
if(OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(), OrderExpiration())) {
RefreshRates();
if(!OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(), OrderExpiration())) {
Print("Modify error ", GetLastError()); }
else extr_price=-1; }
else extr_price=-1; }
тогда что бы произошло?
OrderModify
изменит стоп лосс в данном случае для покупки
а если возникнет ошибка модификации, то во вкладке эксперты появится сообщение об ошибке
и плюсом произойдет что то непонятное с ценой для стоп лосса, это известно тем, кто видит что там написано коде эксперта ниже
OrderModify
изменит стоп лосс в данном случае для покупки
а если возникнет ошибка модификации, то во вкладке эксперты появится сообщение об ошибке
и плюсом произойдет что то непонятное с ценой для стоп лосса, это известно тем, кто видит что там написано коде эксперта ниже
Значит если я пишу if( OrderModify ())
то ордер изменится а если пишу if(! OrderModify ())
то ордер тоже изменится и еще вдобавок сделает что-то, если не сможет измениться?
Значит если я пишу if( OrderModify ())
то ордер изменится а если пишу if(! OrderModify ())
то ордер тоже изменится и еще вдобавок сделает что-то, если не сможет измениться?
нет, Вы просто узнаете выполнилась ли команда OrderModify ?
if( OrderModify () == true) или то же самое if( OrderModify () >=0) - выполнилась
if( OrderModify () == false) или то же самое if( OrderModify () != true) или то же самое if( OrderModify () <0) - не выполнилась
а если далее дописать что нибудь в фигурных скобках, то если условие правда, то и выполнится то, что в фигурных скобках
например
if( OrderModify ()) { тут выполнится при условии успешной модификации ордера , что означает что модификация ордера фактически произошла }
if(! OrderModify ()) { тут выполнится при условии модификации ордера, завершившейся с ошибкой, что означает что модификация ордера фактически не произошла }
нет, Вы просто узнаете - произошла модификация или нет, то есть выполнилась ли OrderModify
Извиняюсь, не совсем корректно задал вопрос.
вот первый вариант:
if(OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(), OrderExpiration()))
RefreshRates();
else extr_price=-1;
вот второй вариант:
if(!OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(), OrderExpiration()))
RefreshRates();
else extr_price=-1;
Как я понял ни в каком случае ордер не будет изменен, а только идет проверка изменен он или нет и последующие действия. Все правильно?
нет, Вы просто узнаете выполнилась ли команда OrderModify ?
if( OrderModify () == true) или то же самое if( OrderModify () >=0) - выполнилась
if( OrderModify () == false) или то же самое if( OrderModify () != true) или то же самое if( OrderModify () <0) - не выполнилась
а если далее дописать что нибудь в фигурных скобках, то если условие правда, то и выполнится то, что в фигурных скобках
например
if( OrderModify ()) { тут выполнится при условии успешной модификации ордера }
if(! OrderModify ()) { тут выполнится при условии модификации ордера, завершившейся с ошибкой }
ОГРОМНОЕ спасибо. разобрался.
Извиняюсь, не совсем корректно задал вопрос.
вот первый вариант:
if(OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(), OrderExpiration()))
RefreshRates();
else extr_price=-1;
вот второй вариант:
if(!OrderModify(OrderTicket(), OrderOpenPrice(), extr_price-5*Point, OrderTakeProfit(), OrderExpiration()))
RefreshRates();
else extr_price=-1;
Как я понял ни в каком случае ордер не будет изменен, а только идет проверка изменен он или нет и последующие действия. Все правильно?
раз задана команда на изменение ордера, то она может выполниться в любом из этих вариантов, при условии, что параметры команды заданы верно