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

 

для каждого тика в файле FXT создается такая запись:

struct TestHistory
{
   datetime          otm;                // время бара
   double            open;               // значения OHLCV
   double            high;
   double            low;
   double            close;
   long              volume;
   int               ctm;                // текущее рабочее время внутри бара
   int               flag;               // флаг запуска эксперта (0-бар модифицируем, а эксперта не запускаем)
};
//+------------------------------------------------------------------+ 

это вот поле 

   int               ctm;                // текущее рабочее время внутри бара

собственно является временем тика, не каким-то там "текущим рабочим временем внутри бара",

а реальным временем тика, это поле так и формируется в скрипте.

но почему это поле имеет тип int, то есть занимает 4 байта ? само-собой 4 байта достаточно для записи времени тика,

но вот тут  https://www.metatrader4.com/ru/trading-platform/help/autotrading/tester/tester_fxt

это поле имеет тип time_t, такой же тип имеет поле otm, но в скрипте поле otm имеет тип datetime - а это 8 байтов.

то есть мы должны бы иметь:

   datetime          ctm;                // текущее рабочее время внутри бара

что тут не так ?

Файлы истории FXT - Тестирование стратегий - Автотрейдинг - Справка по MetaTrader 4
Файлы истории FXT - Тестирование стратегий - Автотрейдинг - Справка по MetaTrader 4
  • www.metatrader4.com
В своей работе тестер использует файл *.FXT со сгенерированной последовательностью баров. Каждая запись сгенерированной последовательности представляет собой состояние бара на тот или иной...
 
Denis Sartakov:

что тут не так ?

В старых версиях MT4 поля otm и ctm занимали одинаковое количество байт - 4, хотя и имели разные типы (тогда тип datetime был 4-хбайтным). На это никто не обращал внимания. Потом случилась модернизация МТ4, в результате которой тип datetime стал 8-ибайтным. В итоге получили коллизию, т. к. на int для ctm никто не обратил внимания.

 
Ihor Herasko:

В старых версиях MT4 поля otm и ctm занимали одинаковое количество байт - 4, хотя и имели разные типы (тогда тип datetime был 4-хбайтным). На это никто не обращал внимания. Потом случилась модернизация МТ4, в результате которой тип datetime стал 8-ибайтным. В итоге получили коллизию, т. к. на int для ctm никто не обратил внимания.

вот так история !

а ваш скрипт я немного модифицировал и теперь, при тестирование получаю  в ЕА реальные Bid и Ask,

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

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

благодаоность материализуется....

 
Denis Sartakov:

вот так история !

а ваш скрипт я немного модифицировал и теперь, при тестирование получаю  в ЕА реальные Bid и Ask,

Читаете их напрямую из tks-файла? В принципе тоже вариант. Плохо, что этот вариант только для советников собственной разработки подходит.

 
Denis Sartakov:

а ваш скрипт я немного модифицировал и теперь, при тестирование получаю  в ЕА реальные Bid и Ask

Вы точно получаете реальный Ask в Тестере?

 
fxsaber:

Вы точно получаете реальный Ask в Тестере?

вот что игорь говорит:

"Читаете их напрямую из tks-файла? В принципе тоже вариант. Плохо, что этот вариант только для советников собственной разработки подходит"

так и есть.

Вы точно получаете реальный Ask в Тестере?

Ask в тестере не реальный, а вот Bid реальный, зато в ЕА - и Ask и Bid реальные,

то есть, ЕА собственной разработки можно напрямую тестировать на реальных тиках,

само-собой с некоторыми незначительными добавлениями...

 
Denis Sartakov:

Ask в тестере не реальный, а вот Bid реальный, зато в ЕА - и Ask и Bid реальные.

Какой в этом толк, если исполнение в Тестере не по реальным Ask?

 
fxsaber:

Какой в этом толк, если исполнение в Тестере не по реальным Ask?

в том-то и дело, что по реальным Ask и Bid !

 
Denis Sartakov:

в том-то и дело, что по реальным Ask и Bid !

Запишите тики Тестера и сравните с их источником.

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

MT4-Tester VS MT5-Tester

fxsaber, 2017.05.07 22:46

Запускаем на обоих тестерах такой кроссплатформенный советник

// MQL4&5-code

#property strict

class FILE
{
private:
  const int handle;
  
  static string TickToString( const MqlTick &Tick, const string Delimeter = " " )
  {
    return(::DoubleToString(Tick.ask, _Digits) + Delimeter + ::DoubleToString(Tick.bid, _Digits));
  }
public:  
  FILE( const string FileName ) : handle(::FileOpen(FileName, FILE_WRITE | FILE_TXT | FILE_ANSI))
  {
  }
  
  ~FILE( void )
  {
    if (this.handle != INVALID_HANDLE)
      ::FileClose(handle);       
  }
  
  bool Write( const MqlTick &Tick ) const
  {
    return((this.handle != INVALID_HANDLE) && ::FileWriteString(this.handle, FILE::TickToString(Tick) + "\n"));
  }
};

const FILE File(::MQLInfoString(MQL_PROGRAM_NAME) + ".txt");

void OnTick()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    File.Write(Tick);
}


Лог MT4-тестера

2017.05.07 23:25:36.155 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:02.528 (total time 0:00:03.292)


Лог MT5-тестера

2017.05.07 23:26:01.016 Core 1  EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:01.918 (including ticks preprocessing 0:00:00.203).

Убеждаемся, что файлы, полученные из каждого тестера идентичны - тики тестеров совпадают.

Нужно только сравнить файлы.

 
fxsaber:

Запишите тики Тестера и сравните с их источником.

тут все дело в некоторых модификациях самой ЕА, что-то в таком духе:

1. штатнай переменная Ask заменяется на собственную Ask

2. штатные  функции RefrashRate() и некоторые другие заменяются на свои.

эти функции отрабатывают либо штатно, если ! IsTesting(), либо специальным образом

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