Вопрос к разработчикам тестера стратегий...

 

...да и ко всем, кто может подсказать по этому поводу

при разработке советника столкнулся с ошибкой в отчете тестера

иногда, очень редко, не выставлялся ордер BuyStop

в учебнике Сергея Ковалева есть раздел "Требования и ограничения при проведении торговых операций" https://book.mql4.com/ru/appendix/limits

во второй таблице описаны требования к данной операции

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

написал примитивного эксперта, имитирующего данную ситуацию

вот его код:

  static datetime CountedBar_1  = 0;
  int yes = 0;
  int no  = 0;
  
void deinit()
{
  Print( "выставлено ордеров ", yes );
  Print( "возвращено ошибок ", no );
}                            
void start()
{
  // ф-ция ожидания нового бара
  if( iTime( NULL, PERIOD_M30, 0 ) <= CountedBar_1 ) return;
  CountedBar_1 = iTime( NULL, PERIOD_M30, 0 );
  
  int stoplevel = MarketInfo( Symbol(), MODE_STOPLEVEL ); // обновим информацию об этом параметре
  
  double price_OP_BUYSTOP = NormalizeDouble( Ask + stoplevel*Point, Digits );
  double sl = NormalizeDouble( price_OP_BUYSTOP - 3*stoplevel*Point, Digits );
    
  if( NormalizeDouble( price_OP_BUYSTOP - Ask - stoplevel*Point, Digits )  < 0.0 ) return; // проверка выполнения условий торговли
  if( NormalizeDouble( price_OP_BUYSTOP - sl  - stoplevel*Point, Digits )  < 0.0 ) return; // проверка выполнения условий торговли
  
  Print( "Ask = ", Ask );
  Print( "stoplevel = ", stoplevel );
  Print( "price_OP_BUYSTOP = ", price_OP_BUYSTOP );
  Print( "sl = ", sl );
   
  if ( OrderSend( Symbol(), OP_BUYSTOP, 1, price_OP_BUYSTOP, 3, sl, 0, NULL, 0, 0, Blue) > 0 )
    yes ++;
  else
    no  ++;    
}

вот что получил в журнале:

2008.01.31 23:59 test 2 GBPUSD,M1: выставлено ордеров 8268
2008.01.31 23:59 test 2 GBPUSD,M1: возвращено ошибок 5025

результаты на другом инструменте:

2008.01.31 23:59 test 2 EURUSD,M1: выставлено ордеров 13288
2008.01.31 23:59 test 2 EURUSD,M1: возвращено ошибок 0

т.о. ордер выставляется не всегда, а только когда этого пожелает тестер

хотелось бы узнать, чем он руководствуется в данной ситуации?

тестил на терминале от Альпари, ошибок рассогласования - 0

при тестах в терминале от MQ ситуация иная, но абсолютно схожая по своей сути

я понимаю, что в реале все происходит несколько иначе, чем в данном советнике

но это же тестер...

 
vasek писал (а) >>

...да и ко всем, кто может подсказать по этому поводу

при разработке советника столкнулся с ошибкой в отчете тестера

иногда, очень редко, не выставлялся ордер BuyStop

в учебнике Сергея Ковалева есть раздел "Требования и ограничения при проведении торговых операций" https://book.mql4.com/ru/appendix/limits

во второй таблице описаны требования к данной операции

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

написал примитивного эксперта, имитирующего данную ситуацию

вот его код:

вот что получил в журнале:

2008.01.31 23:59 test 2 GBPUSD,M1: выставлено ордеров 8268
2008.01.31 23:59 test 2 GBPUSD,M1: возвращено ошибок 5025

результаты на другом инструменте:

2008.01.31 23:59 test 2 EURUSD,M1: выставлено ордеров 13288
2008.01.31 23:59 test 2 EURUSD,M1: возвращено ошибок 0

т.о. ордер выставляется не всегда, а только когда этого пожелает тестер

хотелось бы узнать, чем он руководствуется в данной ситуации?

тестил на терминале от Альпари, ошибок рассогласования - 0

при тестах в терминале от MQ ситуация иная, но абсолютно схожая по своей сути

я понимаю, что в реале все происходит несколько иначе, чем в данном советнике

но это же тестер...

А логи тестера не смотрел?

Может и вопросы бы исчезли.

Ошибка ошибке рознь.

 
Vinin писал (а) >>

А логи тестера не смотрел?

Может и вопросы бы исчезли.

Ошибка ошибке рознь.

 да, логи изучал
 хотя, изучать там особо нечего
 задача вышеприведенного кода - просто выставлять ордер байстоп, в соответствии с торговыми требованиями
 с чем он справляется не систематически
 вот я и пытаюсь выяснить в чем тут причина
 - я не прав в своих рассуждениях;
 - ошибка в учебнике Сергея Ковалева, торговые требования не верны;
 - ошибка в работе тестера; 

 
vasek писал (а) >>

да, логи изучал
хотя, изучать там особо нечего
задача вышеприведенного кода - просто выставлять ордер байстоп, в соответствии с торговыми требованиями
с чем он справляется не систематически
вот я и пытаюсь выяснить в чем тут причина
- я не прав в своих рассуждениях;
- ошибка в учебнике Сергея Ковалева, торговые требования не верны;
- ошибка в работе тестера;

Для начало неплохо было бы получить представление, а какаие ошибки формируются.

Надо добавить обработку ошибок

  int Err;

  if ( OrderSend( Symbol(), OP_BUYSTOP, 1, price_OP_BUYSTOP, 3, sl, 0, NULL, 0, 0, Blue) > 0 )
    yes ++;
  else {
    Err=GetLastError();
    Print("Ошибка № ",Err);
    no  ++;  
  }
 
Vinin писал (а) >>

Для начало неплохо было бы получить представление, а какаие ошибки формируются.

Надо добавить обработку ошибок

если добавить обработку ошибки, то лишь раздуется отчет

было так:

GBPUSD,M5: Ask = 2.049
GBPUSD,M5: stoplevel = 3
GBPUSD,M5: price_OP_BUYSTOP = 2.0493
GBPUSD,M5: sl = 2.0484
GBPUSD,M5: OrderSend error 130

а стало так:

GBPUSD,M5: Ask = 2.049
GBPUSD,M5: stoplevel = 3
GBPUSD,M5: price_OP_BUYSTOP = 2.0493
GBPUSD,M5: sl = 2.0484
GBPUSD,M5: OrderSend error 130
GBPUSD,M5: Ошибка № 130


а что Вы, уважаемый, скажете по сути проблемы?

почему тут возникает эта ошибка?

в чем я ошибся, при написании этого кода?


 

интересная у вас цена ордера, не нормированная к количеству пойнтов.

 

Пока видна ошибка 130 - Неправильные стопы. Пост выше. Предложение как исправить ситуацию.

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