Мультифреймовый тестер

 
Вот попытка проапгрейдить тестер до режима мультифреймности.
При тестировании нужно указывать период M15, все тики.
//+-------------------------------------------------------------------------------+
//|                                                          MultiframeTester.mqh |
//|                                                        Мультифреймовый тестер |
//| Предназначен для тестирования экспертов, работающих на нескольких таймфреймах |
//+-------------------------------------------------------------------------------+

int MultiframeTester()
  { 
  double arr_M15[][6];
  double arr_M30[][6];
  double arr_H1[][6];
  double arr_H4[][6];
  double arr_D1[][6];
  ArrayCopyRates(arr_M15,Symbol(), PERIOD_M15);
  ArrayCopyRates(arr_M30,Symbol(), PERIOD_M30);
  ArrayCopyRates(arr_H1,Symbol(), PERIOD_H1);
  ArrayCopyRates(arr_H4,Symbol(), PERIOD_H4);
  ArrayCopyRates(arr_D1,Symbol(), PERIOD_D1);

  //время нулевого бара на разных таймфреймах
  datetime zbt_M15=arr_M15[0][0];
  datetime zbt_M30=arr_M30[0][0];
  datetime zbt_H1=arr_H1[0][0];
  datetime zbt_H4=arr_H4[0][0];
  datetime zbt_D1=arr_D1[0][0];
  //начальные значения open, low, high, close
  double open=arr_M15[0][1];
  double low=arr_M15[0][2];
  double high=arr_M15[0][3];
  double close=arr_M15[0][4];
  //обновление значений нулевых баров больших таймфреймов
  int i=0;
  while (zbt_M15>=zbt_D1)
    {
    zbt_M15=arr_M15[i][0];
    open=arr_M15[i][1];
    if (low>arr_M15[i][2]) low=arr_M15[i][2];
    if (high<arr_M15[i][3]) high=arr_M15[i][3];
    //обновление 30-минуток
    if (zbt_M30==zbt_M15) {arr_M30[0][1]=open; arr_M30[0][2]=low; arr_M30[0][3]=high;}
    //обновление 60-минуток
    if (zbt_H1==zbt_M15) {arr_H1[0][1]=open; arr_H1[0][2]=low; arr_H1[0][3]=high;}
    //обновление 4-х-часовок
    if (zbt_H4==zbt_M15) {arr_H4[0][1]=open; arr_H4[0][2]=low; arr_H4[0][3]=high;}
    //обновление дневок
    if (zbt_D1==zbt_M15) {arr_D1[0][1]=open; arr_D1[0][2]=low; arr_D1[0][3]=high;}
    i++;
    }
  //обновление цен закрытия на всех таймфреймах
  arr_M30[0][4]=close;
  arr_H1[0][4]=close;
  arr_H4[0][4]=close;
  arr_D1[0][4]=close;
  return(0);
  }



1. Создаем в каталоге Include файл filename.mqh
2. Копируем код в файл
3. Вставляем в тексте эксперта команду #include <filename.mqh>
4. В начале процедуры int Start() эксперта вызываем функцию MultiframeTester()

Enjoy.
Вот так некоторые пользователи извращаются если нет нормального тестера :)

 
Может кому пригодится :)
 
Может кому пригодится :)

Не поможет :) Тики изначально кривые генерятся :(
 
Тики изначально кривые генерятся :(

Нормально генерятся 1 минута ~ 2.3 тика
Причина обращения: