Вопросы по коду. - страница 5

 
gnesnyi #:

так там же  !OrderModify.

Получается если ордер не изменен, то команда RefreshRates(); меняет этот ордер?

Производится попытка модификации. Если она неудачная, то обновляются котировки и производится вторая попытка модификации ордера.
 
gnesnyi #:

Вот Вам другая загадка.

Ни как не могу понять в чем смысл этого кода. Люди тут собрались явно знающие, так что помогите, пожалуйста. Но только не вводите в заблуждение ;)

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; 

тогда что бы произошло?

 
gnesnyi #:

До конца всё равно не уяснил какая команда призвана изменить текущий ордер.

А если бы написано было следующее:

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

изменит стоп лосс в данном случае для покупки

а если возникнет ошибка модификации, то во вкладке эксперты появится сообщение об ошибке

и плюсом произойдет что то непонятное с ценой для стоп лосса, это известно тем, кто видит что там написано коде эксперта ниже

 
Renat Akhtyamov #:

OrderModify

изменит стоп лосс в данном случае для покупки

а если возникнет ошибка модификации, то во вкладке эксперты появится сообщение об ошибке

и плюсом произойдет что то непонятное с ценой для стоп лосса, это известно тем, кто видит что там написано коде эксперта ниже

Значит если я пишу if( OrderModify ())

то ордер изменится а если пишу  if(! OrderModify ())

то ордер тоже изменится и еще вдобавок сделает что-то, если не сможет измениться?

 
gnesnyi #:

Значит если я пишу if( OrderModify ())

то ордер изменится а если пишу  if(! OrderModify ())

то ордер тоже изменится и еще вдобавок сделает что-то, если не сможет измениться?

нет, Вы просто узнаете выполнилась ли команда  OrderModify ?

if( OrderModify () == true)  или то же самое if( OrderModify () >=0)  - выполнилась

if( OrderModify () == false) или то же самое if( OrderModify () != true) или то же самое if( OrderModify () <0) - не выполнилась

а если далее дописать что нибудь в фигурных скобках, то если условие правда, то и выполнится то, что в фигурных скобках

например

if( OrderModify ()) { тут выполнится при условии успешной модификации ордера , что означает что модификация ордера фактически произошла  }

if(! OrderModify ())  { тут выполнится при условии модификации ордера, завершившейся с ошибкой, что означает что модификация ордера фактически не произошла }

 
Renat Akhtyamov #:

нет, Вы просто узнаете - произошла модификация или нет, то есть выполнилась ли  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;

Как я понял ни в каком случае ордер не будет изменен, а только идет проверка изменен он или нет и последующие действия. Все правильно?


                        

 
Renat Akhtyamov #:

нет, Вы просто узнаете выполнилась ли команда  OrderModify ?

if( OrderModify () == true)  или то же самое if( OrderModify () >=0)  - выполнилась

if( OrderModify () == false) или то же самое if( OrderModify () != true) или то же самое if( OrderModify () <0) - не выполнилась

а если далее дописать что нибудь в фигурных скобках, то если условие правда, то и выполнится то, что в фигурных скобках

например

if( OrderModify ()) { тут выполнится при условии успешной модификации ордера }

if(! OrderModify (){ тут выполнится при условии модификации ордера, завершившейся с ошибкой }

ОГРОМНОЕ спасибо. разобрался.

 
gnesnyi #:

Извиняюсь, не совсем корректно задал вопрос.   

вот первый вариант:    

               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;

Как я понял ни в каком случае ордер не будет изменен, а только идет проверка изменен он или нет и последующие действия. Все правильно?


                        

раз задана команда на изменение ордера, то она может выполниться в любом из этих вариантов, при условии, что параметры команды заданы верно

Причина обращения: