Скачать MetaTrader 5

Сервисдеск не отвечает которую неделю. Тестер стратегий не работает. - Что делать!?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Vasiliy Sokolov
22599
Vasiliy Sokolov 2014.04.28 15:33 
Моя заявка №#989241 без малого месяц лежит в сервисдеске. - В ответ тишина. Глюк странный и непонятный. Но это же не значит что на него можно забить и сделать вид что его как бы и нет?
Цитирую заявку в сервис. Может хоть здесь быстрей ответят:

 

Версия и битность терминала

64x, build 910, Официальный (не брокерский) MetaTrader5 (Admiral Markets).

Описание проблемы

В режиме тестера стратегий свойства сделок и ордеров недоступны, если историю выбирать с помощью HistorySelect. Т.е. после вызова HistorySelect, свойства получаемые от HistoryOrderGetInteger будут нулевыми. В тоже время, аналогичный код, использующий HistorySelect прекрасно работает в реал-тайме, чего не могло бы быть в случае логической ошибки самого кода.

Дополнительно. Другая функция HistoryOrderSelect работает в тестере в целом корректно. Однако после ее вызова, свойство ORDER_TIME_SETUP_MSC недоступно.

Последовательность действий

Эту ошибку реализует следующий код:

#include <Trade\Trade.mqh>

///
/// Закомментировать, если выбирать ордер через HistoryOrderSelect
/// Ошибка проявляться не будет.
///
#define ERROR_HISTORY_SELECT

CTrade trade;

int OnInit()
{
   trade.LogLevel(LOG_LEVEL_NO);
   return INIT_SUCCEEDED;
}
void OnTick()
{
   if(!DetectNewBar())return;
   trade.Sell(0.1);
   HistorySelect(0, TimeCurrent());
   for(; dealsCount < HistoryDealsTotal(); dealsCount++)
   {
      ulong ticket = HistoryDealGetTicket(dealsCount);
      RecalcDeal(ticket);
   }
}

bool DetectNewBar(void)
{
   MqlRates bars[1];
   CopyRates(Symbol(), PERIOD_M1, 0, 1, bars);
   if(bars[0].time != timeLastBar)
   {
      timeLastBar = bars[0].time;
      return true;
   }
   return false;
}

void RecalcDeal(ulong ticketDeal)
{
   
   //History was selected in OnTick()!!!!!
   ulong ticketOrder = HistoryDealGetInteger(ticketDeal, DEAL_ORDER);
   //HistoryOrderSelect в отличии от HistorySelect ордер выбирает,
   //однако его свойство ORDER_TIME_SETUP_MSC по-прежнему недоступно.
   #ifndef ERROR_HISTORY_SELECT
      if(!HistoryOrderSelect(ticketOrder))
         printf("order not select.");
   #endif
   //HistorySelect(0, TimeCurrent());
   ENUM_ORDER_TYPE type = (ENUM_ORDER_TYPE)HistoryOrderGetInteger(ticketOrder, ORDER_TYPE);
   datetime time = HistoryOrderGetInteger(ticketOrder, ORDER_TIME_SETUP); 
   ulong time_msc = HistoryOrderGetInteger(ticketOrder, ORDER_TIME_SETUP_MSC); 
   printf("Order: " + (string)ticketOrder + " Type: " + EnumToString(type) + " Time: " + (string)time +
          " Time msc: " + (string)time_msc + " Total Orders: " + HistoryOrdersTotal());
}

int dealsCount;

datetime timeLastBar;

Полученный результат

На скриншоте тестера стратегий видно что свойства недоступны.



Ожидаемый результат

Этот же код запущенный в реал-тайм на демо прекрасно выбирает все свойства:

Sergey Chalyshev
4587
Sergey Chalyshev 2014.05.08 22:31  
C-4:
Моя заявка №#989241 без малого месяц лежит в сервисдеске. - В ответ тишина. Глюк странный и непонятный. Но это же не значит что на него можно забить и сделать вид что его как бы и нет?
Цитирую заявку в сервис. Может хоть здесь быстрей ответят:

 

Версия и битность терминала

64x, build 910, Официальный (не брокерский) MetaTrader5 (Admiral Markets).

Описание проблемы

В режиме тестера стратегий свойства сделок и ордеров недоступны, если историю выбирать с помощью HistorySelect. Т.е. после вызова HistorySelect, свойства получаемые от HistoryOrderGetInteger будут нулевыми. В тоже время, аналогичный код, использующий HistorySelect прекрасно работает в реал-тайме, чего не могло бы быть в случае логической ошибки самого кода.

Дополнительно. Другая функция HistoryOrderSelect работает в тестере в целом корректно. Однако после ее вызова, свойство ORDER_TIME_SETUP_MSC недоступно.

Последовательность действий

Эту ошибку реализует следующий код:

Полученный результат

На скриншоте тестера стратегий видно что свойства недоступны.



Ожидаемый результат

Этот же код запущенный в реал-тайм на демо прекрасно выбирает все свойства:

Если еще актуально, попробуйте вставить TimeTradeServer() вместо TimeCurrent().
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий