Новая версия платформы MetaTrader 5 build 2340: Управление настройками счета в тестере и расширение интеграции с Python - страница 14

 
Vladimir Karputov:

Билд 2345.

При использовании таймера, при оптимизации OnTimer  не срабатывает. Ошибку описывают на en форуме: 

Проверяется легко: в OnTimer ставится ExpertRemove - но оптимизация отрабатывает. Если бы сработал OnTimer, тогда сработал бы и ExpertRemove и все тесты при оптимизации дали бы нулевой баланс.

Возможно и от таймера. У меня на билде 2340 тоже получаются нули, поскольку обработка происходит в OnTimer.

Но есть один момент, когда во входных параметрах делаем небольшое изменение, то оптимизация проходит нормально. Такая же картина при режиме "All symbols . . . ."

Добавлю что эксперт нормально проходит автовалидацию. 

 
Slava:

Профилировщик работает не со всеми индикаторами. Исходный код "проблемного" индикатора прислал в ЛС.

После нажатие кнопки стоп ничего не происходит.
Профилирование кода - Разработка программ - Справка по MetaEditor
Профилирование кода - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Профилирование — это сбор характеристик программы во время ее выполнения. При профилировании замеряется время выполнения и количество вызовов отдельных функций и строк в коде программы. При помощи этого инструмента программист может найти наиболее медленные участки кода и провести их оптимизацию. Профилирование можно проводить на обычном...
 
Slava :

At what price is the tool based on video, bid or last?

There is no Market Watch on your video. Why?

You have the opportunity to get ticks for this period. Did you get them to analyze what you saw in the terminal?

Have you asked your broker a question? What did he reply?

Форум по трейдингу, автоматизированным торговым системам и тестированию торговых стратегий

Новая платформа MetaTrader 5 Build 2340: управление настройками аккаунта в тестере и расширенная интеграция с Python

Юрген Ротштейн , 2020.03.04 11:16

Уважаемый MetaQuotes Software Corp.,

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

Я использовал следующий код:

Сервер: AMPGlobalUSA-Демо

 void OnStart ()
  {
//---
   MqlTick ticks_array[];

//---
   long start_time= D'2020.03.03 15:00:14' ,end_time= D'2020.03.03 15:07:15' ;

//---
   long start_time_msc=start_time* 1000 ,end_time_msc=end_time* 1000 ;

//---
   CopyTicksRange ( _Symbol ,ticks_array, COPY_TICKS_TRADE ,start_time_msc,end_time_msc);

//---
   ArrayPrint (ticks_array);

//---
  }
Из-за длинного списка тиков, я поместил вывод в два файла. Первый показывает, где он начал зависать, а второй показывает, где запрашиваемая цена начинает обновляться снова, как это видно из видео, которое я опубликовал ранее ( ссылка ).

С уважением
Юрген Ротштейн

  • Это произошло на WTI Crude Oil Futures, поэтому график должен основываться на последней цене.
  • Обзор рынка также был заморожен, видео не показывает его, но я видел его на другом компьютере.
  • Логи доказывают, что ошибка была на стороне сервера.
  • Загруженные галочки можно увидеть в логах.
  • Я связался с форумом брокеров, и служба поддержки сказала мне, что они, вероятно, попытаются связаться с MetaQuotes ...

С уважением
Юрген Ротштейн
Файлы:
 
Miguel Angel Vico Alba:

EN: Everything points to the provision of data by the broker. Try another broker or open a demo account from MetaQuotes.

-----------------

DE: Alles deutet auf die Bereitstellung von Daten durch den Broker hin. Versuchen Sie es mit einem anderen Broker oder eröffnen Sie ein Demo-Konto von MetaQuotes.

-----------------

RU: Everything indicates the provision of data by the broker. Try another broker or open a demo account from MetaQuotes.

Это рынок фьючерсов, данные должны быть одинаковыми везде из-за централизованного рынка и его регулирования (NYMEX / CME Group). Демо-сервер Metaquotes-Demo не обеспечивает такой рынок, фактически <deleted> является одним из немногих брокеров, который предоставляет доступ к фьючерсному рынку.



 
Jürgen Rothstein:

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

В демо-счетах у вас есть CFD перед вами. Фактические котировки акций стоят денег ... Доступ к DMA и т. Д.

 
Miguel Angel Vico Alba:

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

В демо-счетах у вас есть CFD перед вами. Фактические котировки акций стоят денег ... Доступ к DMA и т. Д.

Извините, но я полагаю, что у вас крошечный недостаток информации о регулируемых рынках (фьючерсах). Брокер не может добавить свой собственный спред поверх регулируемого рыночного спреда, как это делают другие брокеры с Forex и CFD. Кроме того, я хочу торговать фьючерсами, а не CFD или Forex (спот). Я согласен с вами, что это может исходить от брокера, но я не знаю, поэтому я пытаюсь связаться с обоими (платформа и брокер). Я также согласен с вами, что кавычки проходят через несколько мест, прежде чем попасть на мой компьютер, поскольку <deleted> заявляет, что поток данных поступает из CQG API, поэтому на этом этапе может возникнуть ошибка, кто знает.

С уважением
Юрген Ротштейн

 
Jürgen Rothstein:

В любом случае я желаю вам быстрого решения. Все работает правильно с моего терминала (я работаю с более чем 15 брокерами и со всеми типами контрактов). Обычно, когда у меня были эти проблемы, они всегда исходили от брокера и его поставщика данных.

Во всяком случае ... удачи и хорошего дня. ;)

 
Miguel Angel Vico Alba:

В любом случае я желаю вам быстрого решения. Все работает правильно с моего терминала (я работаю с более чем 15 брокерами и со всеми типами контрактов). Обычно, когда у меня были эти проблемы, они всегда исходили от брокера и его поставщика данных.

Во всяком случае ... удачи и хорошего дня. ;)

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

Я желаю вам также всего наилучшего. 😎👍

С уважением,
Юрген Ротштейн

 
Vladimir Karputov:

Билд 2345.

При использовании таймера, при оптимизации OnTimer  не срабатывает. Ошибку описывают на en форуме: 

Проверяется легко: в OnTimer ставится ExpertRemove - но оптимизация отрабатывает. Если бы сработал OnTimer, тогда сработал бы и ExpertRemove и все тесты при оптимизации дали бы нулевой баланс.

Может дело не в таймере, а в ExpertRemove? Проверим

Вот такой простой эксперт показывает, что таймер работает в оптимизации

//+------------------------------------------------------------------+
//|                                              TestSimpleTimer.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- input parameters
input uint     InpTimerSeconds=0;

ulong ExtTimerCounter;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ExtTimerCounter=0;
//--- create timer
   EventSetTimer(InpTimerSeconds);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtTimerCounter++;
  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
   return((double)ExtTimerCounter);
  }
//+------------------------------------------------------------------+
 
Slava:

Может дело не в таймере, а в ExpertRemove? Проверим

Вот такой простой эксперт показывает, что таймер работает в оптимизации

ExpertRemote специально вставлен для демонстрации проблемы таймера. Например код (в котором ExpertRemote закомментрирован)

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2018, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
//---
CTrade         m_trade;                      // object of CTrade class
//--- input parameters
input int TimeSet = 15;
//---
bool     m_first  = true;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//ExpertRemove();
   if(!EventSetTimer(TimeSet))
     {
      Print("Timer ERROR: ",GetLastError());
      return(INIT_FAILED);
     }
   m_first=true;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int d=0;
   ExpertRemove();

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//ExpertRemove();
//---
   if(m_first)
      if(m_trade.Buy(1.0,Symbol()))
         m_first=false;
  }
//+------------------------------------------------------------------+

при одиночном тесте (в визуальном или не в визуальном режиме) открывает позицию, а если после одиночного теста поставить оптимизацию (или генетическую или полную)

Setting

Inputs

получаем, что советник не совершает ни одной сделки:

Optimization Results

и чтобы проверить - а был ли вообще заход в OnTimer был поставлен ExpertRemote - если бы ExpertRemote сработал, то в журнале тестера были бы записи о выгрузке эксперта на каждом тесте.

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