Новая версия платформы MetaTrader 5 build 1640: создание и тестирование собственных финансовых инструментов - страница 8

 
HistoryOrderSelect в тестере всегда возвращает false
#define PRINT(A) Print(#A + " = " + (string)(A));

void OnTick()
{
  MqlTradeRequest Request = {0};

  Request.action = TRADE_ACTION_DEAL;

  Request.symbol = _Symbol;
  Request.type = ORDER_TYPE_BUY;;

  Request.volume = 1;
  Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
  
//  Request.type_filling = GetFilling(Request.symbol);
  
  MqlTradeResult Result;

  if (OrderSend(Request, Result)) // Открыли BUY-позу
  {
    PRINT(Request.price)
    PRINT(Result.order)
    Print("--------");

    PRINT(HistoryOrderSelect(Result.order)) // false       
    PRINT(HistoryOrderGetInteger(Result.order, ORDER_TICKET))
    PRINT(HistoryOrderGetDouble(Result.order, ORDER_PRICE_OPEN))    

    Print("--------");
    PRINT(HistorySelectByPosition(Result.order))      
    PRINT(HistoryOrderGetInteger(Result.order, ORDER_TICKET))  
    PRINT(HistoryOrderGetDouble(Result.order, ORDER_PRICE_OPEN))                  
  }

  ExpertRemove();
}


Результат

2017.08.04 13:16:18.878 EURUSD,M1 (MetaQuotes-Demo): OHLC bar states generating. OnTick executed on the bar begin only
2017.08.04 13:16:18.878 EURUSD,M1: testing of Experts\Test.ex5 from 2017.08.03 00:00 to 2017.08.05 00:00 started
2017.08.04 13:16:18.913 2017.08.03 00:02:00   instant buy 1.00 EURUSD at 1.18564 (1.18548 / 1.18564 / 1.18548)
2017.08.04 13:16:18.913 2017.08.03 00:02:00   deal #2 buy 1.00 EURUSD at 1.18564 done (based on order #2)
2017.08.04 13:16:18.913 2017.08.03 00:02:00   deal performed [#2 buy 1.00 EURUSD at 1.18564]
2017.08.04 13:16:18.913 2017.08.03 00:02:00   order performed buy 1.00 at 1.18564 [#2 buy 1.00 EURUSD at 1.18564]
2017.08.04 13:16:18.915 2017.08.03 00:02:00   Request.price = 1.18564
2017.08.04 13:16:18.915 2017.08.03 00:02:00   Result.order = 2
2017.08.04 13:16:18.915 2017.08.03 00:02:00   --------
2017.08.04 13:16:18.915 2017.08.03 00:02:00   HistoryOrderSelect(Result.order) = false
2017.08.04 13:16:18.915 2017.08.03 00:02:00   HistoryOrderGetInteger(Result.order,ORDER_TICKET) = 0
2017.08.04 13:16:18.915 2017.08.03 00:02:00   HistoryOrderGetDouble(Result.order,ORDER_PRICE_OPEN) = 0.0
2017.08.04 13:16:18.915 2017.08.03 00:02:00   --------
2017.08.04 13:16:18.915 2017.08.03 00:02:00   HistorySelectByPosition(Result.order) = true
2017.08.04 13:16:18.915 2017.08.03 00:02:00   HistoryOrderGetInteger(Result.order,ORDER_TICKET) = 2
2017.08.04 13:16:18.915 2017.08.03 00:02:00   HistoryOrderGetDouble(Result.order,ORDER_PRICE_OPEN) = 1.18564
 
Anatoli Kazharski:

А с такими ситуациями, как перечислено ниже, кроме того, что уже отметили, не сталкивались?

  • После компиляции эксперта, если он был выбран в тестере, то заменяется другим.
Лечится, если один раз запустить в режиме отладки на истории - CTRL+F5. Тогда перекомпиляция не сбрасывает советник в тестере.
 
Anatoli Kazharski:
  • После оптимизации и запуска теста прохода не отключается режим оптимизации. Часто забываешь об этом и вместо теста прохода нажатием на кнопке "Старт" случайно запускаешь оптимизацию снова.

Боюсь, что это фича, а не баг..

 
Andrey Khatimlianskii:

Боюсь, что это фича, а не баг..

Да, это фича, введённая недавно.

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

 
Slava:

Да, это фича, введённая недавно.

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

... и запустить одиночный прогон. В MT4 как-то с этим не было трудностей.

ЗЫ Честно говоря, фича неплохая. Надо только дизайнерам найти какое-то решение, чтобы по кнопке "Старт" Оптимизация случайно не запускалась. Возможно, переименовать Старт в "Старт Оптимизации", и чтобы цвет кнопки менялся, в зависимости от режима. И кнопка срабатывала не по пробелу, а, например, CTRL+SPACE.

 
Slava:

Да, это фича, введённая недавно.

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

Пусть лучше запускается одиночный прогон. При такой "ошибке" в действии не теряются результаты оптимизации.

Планируется ли реализация с сохранением результатов оптимизации с возможностью загрузки в тестер?

 
Slava:

Да, это фича, введённая недавно.

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


Одиночный прогон лучше.

И очень не хватает возможности установить понравившийся проход в настройки за пару кликов, как это есть в MT4.

 

Когда делаешь отладку советника через CTRL+F5 в окне визуализации нет никакой информации о значениях входных параметров и какой советник запущен. Возможно ли дополнить окно визуализации данной инфой?

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

 

При просмотре результатов Оптимизации в терминале сильно не хватает сортировки результатов не по одному параметру, а по нескольким.

Возможно ли сделать такую сортировку?

 

Во время Оптимизации возможно ли сделать какую-то защиту (хотя бы в виде предупреждения со звуковым сигналом) от увода компа в Сон?

Совсем забыл, что идет Оптимизация, и закрыл крышку ноута... соединение разорвалось, после просыпания восстановилось, и Оптимизация пошла дальше. Но я бы не закрывал крышку, если бы мне напомнили, что Оптимизация в процессе. Что уж говорить, когда пользуешься Облаком...

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