Помогите разрулить парадокс.

 

Такой вот несложный код:

   

      b_Ticket=OrderTicket();

            b_Price=OrderOpenPrice();

            b_TP=0;

            b_SL=0; 

            Ans_B=false; 

            while(Ans_B==false)

              {

               Ans_B=OrderModify(b_Ticket,b_Price,b_SL,b_TP,0);

               if(Ans_B==true)

                 {

                  Alert("Ордер ", b_Ticket, " модифицирован");

                  return(0);

                 }

               else

                 {

                  Alert("Модификация ордера ", b_Ticket, " не удалась. Ошибка Locking ", GetLastError());

               }

 Банальная модификация ордера. Парадокс заключается в том, что терминал модифицирует ордер, вместе с тем возвращает Ans_B = false и ругается OrderModify error 1 - ошибки нет, но результат неизвестен.

 
nys2000:

Такой вот несложный код:

   

      b_Ticket=OrderTicket();

            b_Price=OrderOpenPrice();

            b_TP=0;

            b_SL=0; 

            Ans_B=false; 

            while(Ans_B==false)

              {

               Ans_B=OrderModify(b_Ticket,b_Price,b_SL,b_TP,0);

               if(Ans_B==true)

                 {

                  Alert("Ордер ", b_Ticket, " модифицирован");

                  return(0);

                 }

               else

                 {

                  Alert("Модификация ордера ", b_Ticket, " не удалась. Ошибка Locking ", GetLastError());

               }

 Банальная модификация ордера. Парадокс заключается в том, что терминал модифицирует ордер, вместе с тем возвращает Ans_B = false и ругается OrderModify error 1 - ошибки нет, но результат неизвестен.

И какой параметр пытаетесь изменить?
 

Ans_B=false;

Может на глобальном уровне объявить надо? или сделать его static?

 
Vinin:
И какой параметр пытаетесь изменить?
 
Пытаюсь сделать стоп-лосс и тейк-профит равными 0.
 
eevviill:

Ans_B=false;

Может на глобальном уровне объявить надо? или сделать его static?

Объявлен на глобальном уровне.
 
nys2000:
Пытаюсь сделать стоп-лосс и тейк-профит равными 0.
nys2000:
Объявлен на глобальном уровне.

А какая разница где объявлена переменная если она (обнуляется) в данном случае выставляется в false перед её применением???

Почитай что получается:

Ans_B = false;

Дальше -> пока (Ans_B = false)

... Попытка модифицировать ордер со старыми параметрами... стоп-лосс и тейк-профит равными 0. Функция возвращает false и цикл переходит в бесконечный...

Надо добавить условие, как минимум

while(Ans_B == false && OrderStopLoss() != 0)
 
AlexeyVik:

А какая разница где объявлена переменная если она (обнуляется) в данном случае выставляется в false перед её применением???

Почитай что получается:

Ans_B = false;

Дальше -> пока (Ans_B = false)

... Попытка модифицировать ордер со старыми параметрами... стоп-лосс и тейк-профит равными 0. Функция возвращает false и цикл переходит в бесконечный...

Надо добавить условие, как минимум


Все было бы правильно, но:

1. Старые параметры ордера предусматривают стоп-лосс = 0 и тейк-профит не равный 0. Пытаемся сделать стоп-лосс равный 0. 

2. При успешной модификации ордера Ans_B становится true  и мы выходим из цикла успешно. 

3. Изменил код и пытаюсь выполнить бесполезное действие - модифицировать ордер со старыми параметрами. Все работает великолепно, Ans_B возвращает true и выходим из цикла.

Проблемка в чем-то другом... 

 

Ещё раз

 Ans_B=false; 

 while(Ans_B==false) 

ты постоянно модифицируешь. 

 
nys2000:

Все было бы правильно, но:

1. Старые параметры ордера предусматривают стоп-лосс = 0 и тейк-профит не равный 0. Пытаемся сделать стоп-лосс равный 0. 

2. При успешной модификации ордера Ans_B становится true  и мы выходим из цикла успешно. 

3. Изменил код и пытаюсь выполнить бесполезное действие - модифицировать ордер со старыми параметрами. Все работает великолепно, Ans_B возвращает true и выходим из цикла.

Проблемка в чем-то другом... 

1. Догадайся сам надо-ли ставить в условие для модификации ордера проверку значения тейка.

2. Если при модификации ордера сервер вернул ошибку #1 то Ans_B никак не может стать true

3. Что на что менял? Если всё работает то в чём вопрос и какая проблемка осталась?

 
eevviill:

Ещё раз

 Ans_B=false; 

 while(Ans_B==false) 

ты постоянно модифицируешь. 

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