Неприятное поведение тестера в 207-м билде

 

Установил 207-й билд и обнаружил, что тестер теперь ругается на вызовы OrderModify(), которые раньше молча возвращали ERR_NO_RESULT. Теперь весь лог замусорен такими вот сообщениями:

2007.07.25 10:18:05 2007.01.02 02:30 MLs-3b EURUSD,M30: OrderModify error 1

Во-первых: это очень неудобно; во-вторых: совершенно бессмысленно, т.к. ERR_NO_RESULT не является ошибкой, согласно документации.

 
bstone:

Установил 207-й билд и обнаружил, что тестер теперь ругается на вызовы OrderModify(), которые раньше молча возвращали ERR_NO_RESULT. Теперь весь лог замусорен такими вот сообщениями:

2007.07.25 10:18:05 2007.01.02 02:30 MLs-3b EURUSD,M30: OrderModify error 1

Во-первых: это очень неудобно; во-вторых: совершенно бессмысленно, т.к. ERR_NO_RESULT не является ошибкой, согласно документации.

Вы вызываете OrderModify без изменения параметров (SL, TP) ордера, что является прямой ошибкой в логике (никто не разрешит передавать на сервер бесполезные заявки) и мы специально указываем на это. Контролируйте неизменность параметров ордера самостоятельно.
 
bstone:

Установил 207-й билд и обнаружил, что тестер теперь ругается на вызовы OrderModify(), которые раньше молча возвращали ERR_NO_RESULT. Теперь весь лог замусорен такими вот сообщениями:



2007.07.25 10:18:05 2007.01.02 02:30  MLs-3b EURUSD,M30: OrderModify error 1


 Во-первых: это очень неудобно; во-вторых: совершенно бессмысленно, т.к. ERR_NO_RESULT не является ошибкой, согласно документации.


Посмотри от чего эта ошибка и разбирись в своем коде! Ты ставишь те же значения стопа и профита, которые уже стоят!
 

Это не ошибка в логике. Такая ситуация часто будет возникать даже в случае простейшего трейлинг-стопа. Более того, я не прошу пропускать такие приказы на сервер. Я прошу как и раньше возвращать ERR_NO_RESULT, не пропуская такие ордера, но не выводить ничего в лог, т.к. это не критическая ошибка.

Текущая ситуация такова, что потребуется доработка всех существующих экспертов при переходе на 207-й билд. Т.е. нарушена обратная совместимость.

 
bstone:

Это не ошибка в логике. Такая ситуация часто будет возникать даже в случае простейшего трейлинг-стопа. Более того, я не прошу пропускать такие приказы на сервер. Я прошу как и раньше возвращать ERR_NO_RESULT, не пропуская такие ордера, но не выводить ничего в лог, т.к. это не критическая ошибка.


 Текущая ситуация такова, что потребуется доработка всех существующих экспертов при переходе на 207-й билд. Т.е. нарушена обратная совместимость.


Не паникуй!!! Все в поряде! А такую проверку хотя бы для быстроты кода добавь, чтоб не обрабатывал чего не надо!
 
cloud666:
Не паникуй!!! Все в поряде! А такую проверку хотя бы для быстроты кода добавь, чтоб не обрабатывал чего не надо!

cloud666!!!!! я очень рад!!! я рад, что ты думаешь, что это добавит быстроты моему коду!!!

А если серьезно, молодой человек, не флудите без толку, если не понимаете, о чем идет речь. Такая проверка испокон веков осуществлялась самим терминалом и будет осуществляться им всегда, чтобы по мере возможности не грузить торговый сервер. Зачем мне добавлять в свой код то, что уже делается самим терминалом? Может мне еще что-нибудь нужно добавить из функциональности терминала? Думаете станет в разы быстрее работать?

 
Renat:
Вы вызываете OrderModify без изменения параметров (SL, TP) ордера, что является прямой ошибкой в логике (никто не разрешит передавать на сервер бесполезные заявки) и мы специально указываем на это. Контролируйте неизменность параметров ордера самостоятельно.

Мне кажется, ответ был дан руководителем фирмы-разработчика. Вы собираетесь с этим спорить и, пардон, "качать" права? В чужой монастырь со своим уставом не ходят, тем более, что техническое обоснование такого действия было указано - снятие бесполезной нагрузки с торгового сервера.

Об этом больше спорят, чем сделать:

if (OrderStopLoss() != newStopLoss)
  || (OrderTakeProfit() != newTakeProfit)
{
  // modify order
}
 
bstone:
cloud666:
Не паникуй!!! Все в поряде! А такую проверку хотя бы для быстроты кода добавь, чтоб не обрабатывал чего не надо!

cloud666!!!!! я очень рад!!! я рад, что ты думаешь, что это добавит быстроты моему коду!!!


 А если серьезно, молодой человек, не флудите без толку, если не понимаете, о чем идет речь. Такая проверка испокон веков осуществлялась самим терминалом и будет осуществляться им всегда, чтобы по мере возможности не грузить торговый сервер. Зачем мне добавлять в свой код то, что уже делается самим терминалом? Может мне еще что-нибудь нужно добавить из функциональности терминала? Думаете станет в разы быстрее работать?


Код эксперта можно ускорить повторным входом из-за выхода
Вот такой код ускорит его работу:
   if(OrdersTotal()==1)
   {
      OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
      slu=Bid-OrderOpenPrice();
      b=Bid;
      sld=OrderOpenPrice()-Ask;
      a=Ask;
      if(OrderType()==0)
      {
         if(((slu)>0.001) && (OrderStopLoss()<(b-TrailingStop)) && (OrderOpenPrice()<(b-TrailingStop)) && (OrderProfit()>MathAbs(OrderSwap())))
         {
            OrderModify(OrderTicket(), 0, b-TrailingStop, 0, 0, 0);return(0);
         }
      }
      if(OrderType()==1)
      {
         if(((sld)>0.001) && (OrderStopLoss()>(a+TrailingStop)) && (OrderOpenPrice()>(a+TrailingStop)))
         {
            OrderModify(OrderTicket(), 0, a+TrailingStop, 0, 0, 0);return(0);
         }
      }
   }
 
chv:

Мне кажется, ответ был дан руководителем фирмы-разработчика. Вы собираетесь с этим спорить и, пардон, "качать" права? В чужой монастырь со своим уставом не ходят, тем более, что техническое обоснование такого действия было указано - снятие бесполезной нагрузки с торгового сервера.

Об этом больше спорят, чем сделать:

if (OrderStopLoss() != newStopLoss)
  || (OrderTakeProfit() != newTakeProfit)
{
  // modify order
}


Очень смешно. Особенно если учесть, что даже в таком простом примере вы сделали уже две ошибки. Позволю себе напомнить вам, что сравнение чисел с плавающей точкой так делают только очень далекие от программирования люди. Если ваши эксперты используют такой код, то вам тоже придется их править.

Да, я не буду спорить, что можно добавить корректное сравнение. И я сразу отметил это, просто никто не читает сообщения до конца. Я же не зря сказал, что теперь придется править всех советников из-за такого поведения 207-го билда.

Также еще раз отмечу, что нет бесполезной нагрузки на сервер, т.к. терминал и до 207-го билда всегда отслеживал такие ситуации и не посылал ордера без изменений на сервер. О чем неоднократно упоминалось разработчиками на этом форуме.

Более того, о каком "качании" прав может идти речь? Я заметил изменение в поведении тестера и отметил это на форуме. Получил ответ, выразил свое мнение и все. Или любой ответ на пост представителей разработчика считается "качанием" прав?

 
bstone писал (а):
Особенно если учесть, что даже в таком простом примере вы сделали уже две ошибки.
chv, не обращайте внимания на эти слова. Я, как программист, сразу понял, что Вы хотели сказать и чем помочь. А если bstone этого не понял, так это его проблемы. Я сначала хотел выложить свою универсальную функция модификации ордера со всеми необходимыми проверками, но передумал. Она bstone не нужна.
 
KimIV:

chv
, не обращайте внимания на эти слова. Я, как программист, сразу понял, что Вы хотели сказать и чем помочь. А если bstone этого не понял, так это его проблемы. Я сначала хотел выложить свою универсальную функция модификации ордера со всеми необходимыми проверками, но передумал. Она bstone не нужна.


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

Универсальная функция модификации ордера мне действительно не нужна, спасибо. И если бы вы читали мои посты, то поняли бы это раньше. Я же не спрашивал, как избавиться от этой ошибки - я поставил вопрос в плане обратной совместимости. Почему раньше такое поведение экспертов было нормой, а теперь резко стало ошибкой?

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