Скрипты: Конвертирование реальных тиковых данных в FXT-файлы тестера стратегий - страница 6

 
Ihor Herasko :

Пока непонятно, в чем проблема. Опишите последовательность действий, которые совершаете.

Я хочу загрузить историю из файла TKS. Если я скажу 1000 свечей, то это должно создать 1000 свечей истории из файла tks, а затем заполнить остальные как галочки. В настоящее время скрипт использует историю 1000 свечей от МТ4. Что не правильно, если я скажу. Я хочу полностью использовать тики MT5 в тестере стратегий. Даже если свечи должны быть из MT5. Можете ли вы помочь мне сейчас?

 
jaffer wilson:

Я хочу загрузить историю из файла TKS. Если я скажу 1000 свечей, то это должно создать 1000 свечей истории из файла tks, а затем заполнить остальные как галочки. В настоящее время скрипт использует историю 1000 свечей от МТ4. Что не правильно, если я скажу. Я хочу полностью использовать тики MT5 в тестере стратегий. Даже если свечи должны быть из MT5. Можете ли вы помочь мне сейчас?

Тогда Вам нужно изменить под свои нужды функцию IsPreviousHistoryWrite().

Но есть более простой путь: игнорировать те бары, которые создаются по реальной истории символа и начинать обработку данных в тестируемом эксперте/индикаторе с того момента, когда наберется достаточное количество истории, сгенерированной на реальных тиках. Делается это очень просто (вставить в самое начало OnTick() или OnCalculate()):

if (TimeCurrent() < D'waiting date')
   return;
 
Ihor Herasko :

Тогда Вам нужно изменить под свои нужды функцию IsPreviousHistoryWrite().

Но есть более простой путь: игнорировать те бары, которые создаются по реальной истории символа и начинать обработку данных в тестируемом эксперте/индикаторе с того момента, когда наберется достаточное количество истории, сгенерированной на реальных тиках. Делается это очень просто (вставить в самое начало OnTick() или OnCalculate()):

Большое спасибо .. Но я не проверял своего эксперта / индикатора. Но с рынка. Так что я могу видеть, какой из них лучше для меня. Некоторым нужна история, чтобы начать, и, следовательно, подумывал генерировать ее только через MT5. Ваша первая идея - это то, что мне нужно сделать.





 

Привет, Игорь Герасько ,

Я пытался внести изменения. Но это не делает действительный файл. Пожалуйста, вы можете помочь?


bool IsPreviousHistoryWrite(int fxtFileHandle)
  {
   TestHistory testerHistory = {0, 0, 0, 0, 0, 0, 0};
   int handle;
   g_ticksFileName = _Symbol + ".tks";
   if(!IsFileOpen(g_ticksFileName, handle))
      return false;
   ulong filesize = FileSize(handle), offset=0;
   TickStruct tick;
   double previous_bid_history =0, bar_count=0;
   while(!IsStopped() && offset<filesize)
     {
      if(!IsFileRead(handle, tick))
         return false;
      i_startDate = tick.time;
      if(bar_count>=i_minPreviousBars)
         break;
      testerHistory.close = tick.bid;


      // Ôîðìèðîâàíèå íîâîãî áàðà
      if(tick.time >= testerHistory.otm + g_periodSeconds)
        {
         if(bar_count!=0)
           {
            if(FileWriteStruct(fxtFileHandle, testerHistory) == 0)
              {
               Alert(WindowExpertName(), ": Filed to write the candles");
               FileClose(fxtFileHandle);
               return false;
              }
           }
         testerHistory.otm = (tick.time / g_periodSeconds) * g_periodSeconds;
         testerHistory.open = tick.bid;
         testerHistory.high = tick.bid;
         testerHistory.low = tick.bid;
         testerHistory.volume = 1;
         testerHistory.flag = 1;
         testerHistory.ctm = (int)testerHistory.otm;
         bar_count++;
        }
      else
        {
         testerHistory.high = MathMax(testerHistory.high, tick.bid);
         testerHistory.low = MathMin(testerHistory.low, tick.bid);
         testerHistory.volume++;
        }
      previous_bid_history = tick.bid;
      offset = offset + sizeof(tick);
     }
}
 
Вот полный файл, так что вы можете проверить его. Я приложил это с этим комментарием.
Файлы:
NewFXT_TEST.mq4  69 kb
 
jaffer wilson:

Привет, Игорь Герасько ,

Я пытался внести изменения. Но это не делает действительный файл. Пожалуйста, вы можете помочь?


К сожалению, это не так просто, как кажется. Для создания FXT-файла приходится изрядно попотеть, т. к. причин отбраковки файлов тестер не пишет. Приходится строить все на догадках.

К тому же для такой модификации, которую Вы хотите получить, нужно продумать новую структуру скрипта. Так, сначала потребуется проверить, есть ли в тиковом файле тики, достаточные для построения предыдущих баров (назовем их "исторические бары"). Затем найти тик, который будет первым тиком стартового исторического бара. И уже от него создавать исторические бары до даты начала теста. Всего этого я не вижу в приведенном коде. Есть только чтение файла и построение заданного количества баров. А тот факт, что это могут быть бары после даты начала тестирования, нигде не проверяется.

 
Ihor Herasko :

К сожалению, это не так просто, как кажется. Для создания FXT-файла приходится изрядно попотеть, т. к. причин отбраковки файлов тестер не пишет. Приходится строить все на догадках.

К тому же для такой модификации, которую Вы хотите получить, нужно продумать новую структуру скрипта. Так, сначала потребуется проверить, есть ли в тиковом файле тики, достаточные для построения предыдущих баров (назовем их "исторические бары"). Затем найти тик, который будет первым тиком стартового исторического бара. И уже от него создавать исторические бары до даты начала теста. Всего этого я не вижу в приведенном коде. Есть только чтение файла и построение заданного количества баров. А тот факт, что это могут быть бары после даты начала тестирования, нигде не проверяется.

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

 
jaffer wilson:

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

Какой-либо эталонный тиковый файл не нужен. Мы ведь обсуждаем работу с любым тиковым файлом.

В текущей реализации скрипт проверяет дату начала и дату окончания тиковых данных, сравнивая их с датами начала и окончания тестирования, заданных пользователем в параметрах скрипта. Теперь же, когда требуется построить исторические бары на основании тиков, необходимо добавить проверку достаточности тиков ранее даты начала тестирования. Сложность заключается в том, что трудно вычислить время начала первого исторического бара. Ведь где-то нужно раздобыть данные о том, когда котировки должны были быть, но их нет в тиковом файле (дыра в тиковом файле), а когда котировок действительно не было и, следовательно, в тиковом файле такие данные искать не нужно. Вроде бы напрашивается решение о сравнении с теми данными, которые есть в hst-файлах, но тут же возникает две дополнительные сложности:

  1. Источник тиков (МТ5) может иметь отличное от МТ4 время сервера.
  2. МТ4 и МТ5 могут иметь разное расписание торгов. Самое простое и часто встречающееся - это время окончания торгов в пятницу. У одних ДЦ это 23:59, а у других бывает и 23:55, и 23:50, и даже 22:00.
 
Ihor Herasko :

Какой-либо эталонный тиковый файл не нужен. Мы ведь обсуждаем работу с любым тиковым файлом.

В текущей реализации скрипт проверяет дату начала и дату окончания тиковых данных, сравнивая их с датами начала и окончания тестирования, заданных пользователем в параметрах скрипта. Теперь же, когда требуется построить исторические бары на основании тиков, необходимо добавить проверку достаточности тиков ранее даты начала тестирования. Сложность заключается в том, что трудно вычислить время начала первого исторического бара. Ведь где-то нужно раздобыть данные о том, когда котировки должны были быть, но их нет в тиковом файле (дыра в тиковом файле), а когда котировок действительно не было и, следовательно, в тиковом файле такие данные искать не нужно. Вроде бы напрашивается решение о сравнении с теми данными, которые есть в hst-файлах, но тут же возникает две дополнительные сложности:

  1. Источник тиков (МТ5) может иметь отличное от МТ4 время сервера.
  2. МТ4 и МТ5 могут иметь разное расписание торгов. Самое простое и часто встречающееся - это время окончания торгов в пятницу. У одних ДЦ это 23:59, а у других бывает и 23:55, и 23:50, и даже 22:00.

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

 
jaffer wilson:

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

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

Я бы занялся этой проблемой, если бы задача была действительно насущной. Но я ее считаю надуманной. Тем более у нее есть простое решение.

Скрипты: Конвертирование реальных тиковых данных в FXT-файлы тестера стратегий
Скрипты: Конвертирование реальных тиковых данных в FXT-файлы тестера стратегий
  • 2020.07.13
  • www.mql5.com
При проверке работоспособности экспертов в тестере стратегий MetaTrader 4 наиболее дотошные трейдеры сталкиваются с ограниченной точностью процесса тестирования.