English 中文 Español Deutsch 日本語 Português
Тестирование экспертов на нестандартных таймфреймах

Тестирование экспертов на нестандартных таймфреймах

MetaTrader 4Тестер | 18 мая 2009, 09:11
7 555 13
Dmitry Fedoseev
Dmitry Fedoseev

Введение

Цена на рынке меняется с достаточно большой частотой, чтобы для технического анализа было удобно пользоваться графиком непосредственного изменения цены, так называемого тикового графика. Для упрощения восприятия изменений цены и обеспечения возможности использования в анализе большие интервалы времени используется отображение графиков в виде баров или свечей. Каждый бар показывает значение цены на начало определенного периода времени, его окончание, максимальную и минимальную цены за этот промежуток времени. Традиционно принято использовать следующие периоды или таймфреймы: 1 минута, 5 минут, 15 минут, 30 минут, час, 4-ре часа, сутки, неделя, месяц, что можно видеть на панели инструментов терминала MetaTrader4.

Несмотря на существование общепринятых и ставших уже стандартными периодов, теоретически ничто не мешает использовать любые другие периоды для отображения изменений цены. Так же и практически - в комплекте с терминалом имеется скрипт period_converter, позволяющий пользователю терминала создавать графики нестандартных периодов, например 2 минуты, 7 минут, 45 минут, 2 часа, практические любые и прикреплять и ним индикаторы. Однако в тестере терминала имеется возможность выбрать для тестирования только стандартный период.

Как говорится - "око видит, да зуб неймет", создать график нестандартного периода имеется возможность, а "попробовать" его, протестировать на нем экспертов - никак. На самом деле ситуация намного лучше, чем кажется, - возможность тестирования экспертов на нестандартных таймфреймах существует! Для этого всего лишь достаточно заменить данные стандартного таймфрейма данными нестандартного таймфрейма. Более того, возможно даже тестировать экспертов, пользующихся данными нескольких нестандартных периодов.


Основная часть

План действий такой:

  1. Подготовка дополнительного терминала для работы в off-line режиме, чтобы новые данные стандартных таймфреймов не добавлялись к графикам нестандартных периодов.
  2. Подготовка данных нестандартных таймфреймов при помощи скрипта period_converter в терминале, имеющем достаточных архив минутных данных.
  3. Импорт подготовленных данных в терминал, подготовленный для тестирования.

Теперь более подробно:

1. Подготавливаем терминал для тестирования на нестандартных таймфреймах.

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

Отключаем сохранение личной информации: щелкаем левой кнопкой на индикаторе "Состояние соединения" расположенном в правом нижнем углу терминала и выбираем команду "Логин", в открывшемся окне снимаем галку "Хранить личную информацию", нажимаем кнопку "Логин" и ждем, когда терминал подключится к счету.

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

В каталоге history открываем каталог с именем, соответствующим названию дилингового центра, в котором открывался демо-счет, и удаляем из него все файлы *.hst.

2. Подготавливаем данные нестандартных таймфреймов.

В каком-нибудь другом терминале, в котором имеются достаточное количество данных М1 нужного символа, например EURUSD, при помощи скрипта period_converter (входит в комплект терминала MetaTrader 4) создаем нестандартные таймфреймы, например М2 и М7. Для этого открываем график EURUSD M1, запускаем на нем скрипт period_converter, на запуске скрипта, в его окне свойств ставим значение ExtPeriodMultiplier равным 2. После того, как скрипт конвертирует данные, во вкладке "Эксперты" окна Терминал" должно появиться сообщение о количестве записей сделанных в файл, например:

"2009.03.19 18:28:09 period_converter EURUSD,M1: 25378 record(s) written"

После этого скрипт можно удалить с графика (кликнуть на графике, на котором был запущен скрипт, правой кнопкой, выбрать команду "Удалить скрипт"). Открываем полученный график: Главное меню - Файл - Открыть автономно (в колонке "Исторические данные" ищем запись EURUSD,M2). Аналогично создаем таймфрейм М7 (при запуске скрипта period_converter ставим значение ExtPeriodMultiplier равным 7).

Пишем скрипт для сохранения данных с графика в файл *.csv (файл s_ExportChartToCSV_v1.mq4 приложения):

int start(){
   int h=FileOpen(Symbol()+Period()+".csv",FILE_WRITE|FILE_CSV,",");
      for(int i=Bars-1;i>=0;i--){
         FileWrite(h,TimeToStr(Time[i],TIME_DATE),TimeToStr(Time[i],TIME_MINUTES),Open[i],High[i],Low[i],Close[i],Volume[i]);
      }
   FileClose(i);
   return(0);
}

Исполняем скрипт на графиках нестандартных таймфреймов. В результате работы скрипта в каталоге experts/filies получаем стандартные файлы *.csv с данными нестандартных таймфреймов.

3. Импортируем данные.

Открываем терминал, подготовленный в п.1, открываем Архив котировок (Главное меню - Сервис - Архив котировок или клавиша F2), разворачиваем в списке слева список таймфреймов импортируемого символа, выделяем строку М1 (двойное нажатие кнопкой мышки на ней, чтобы в строке заголовка окна появился соответствующий текст):

В открытом окне архива котировок жмем кнопку "Импорт", выбираем созданный в п. 2 файл EURUSD2.csv, жмем "ОК" и также в таймфрейм М5 импортируем данные из файла EURUSD7.csv, закрываем окно "Архив котировок". Все готово!

Открываем график EURUSD M1 и видим данные M2:

Аналогично с графиком EURUSD M5 - вместо данных М5 можно увидеть данные М7.

Для тестирования советника по данным М2 в тестере надо будет выбрать таймфрейм М1, и, соответственно, для тестирования на М7 - в тестере выбрать М5. Для доступа к данным таймфрейма М7 в индикаторах, вызываемых из тестируемого советника, необходимо указывать таймфрейм М5.

4. Проверяем.

Используем простой эксперт, открывающий и закрывающий ордера по пересечению двух МА (файл 2МА.mq4 приложения). Внимание! Эксперт предназначен только для работы в тестере.

extern int TimeFrame=0;
extern double Lots=0.1;
extern int FastMAPeriod=13;
extern int FastMAMethod=0;
extern int FastMAPrice=0;
extern int SlowMAPeriod=21;
extern int SlowMAMethod=0;
extern int SlowMAPrice=0;

int start(){
      double fast_ma_1=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
      double slow_ma_1=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
      double fast_ma_2=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,2);
      double slow_ma_2=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);
      static int bt=0;
      static int st=0;
         if(fast_ma_1>slow_ma_1){
            if(fast_ma_2<=slow_ma_2){
               if(st>0)OrderClose(st,Lots,Ask,0,CLR_NONE);
               st=0;
               if(OrdersTotal()==0)bt=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,"",0,0,CLR_NONE);
            }
         }
         if(fast_ma_1<slow_ma_1){
            if(fast_ma_2>=slow_ma_2){
               if(bt>0)OrderClose(bt,Lots,Bid,0,CLR_NONE);
               bt=0;            
               if(OrdersTotal()==0)st=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,"",0,0,CLR_NONE);
            }
         }         
   return(0);
}

4.1. Эксперт на одном нестандартном тайфмрейме.

Открываем тестер (Главное меню - Вид - Тестер стратегий, или клавиши Ctrl+R). Выбираем эксперта 2МА, символ - EURUSD, период М1, открываем окно свойств эксперта (кнопкой "Свойства эксперта" в тестере), в окне свойств ставим значение переменной TimeFrame 1 или 0. Запускаем тестирование, после тестирования открываем график (кнопка "Открыт график" в тестере) и убеждаемся, что тестирование проведено правильно.

4.2. Эксперт на одном таймфрейме, отличающемся от таймфрейма тестера.

В окне свойств эксперта ставим переменной TimeFrame значение 5, выполняем тестирование, открываем график, переключаем таймфрейм графика на М5, устанавливаем на график две простых МА с периодами 13 и 21, по ценам закрытия и убеждаемся, что тестирование выполнено верно.

4.3. Двухтаймфреймовый эксперт.

Используется эксперт, открывающий ордера по пересечению двух МА на одном таймфрейме с подтверждением по положению двух МА на большем таймфрейме (файл 2МА2TF.mq4 приложения). Внимание! Эксперт предназначен только для работы в тестере.

int start(){
      double fast_ma_1=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
      double slow_ma_1=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
      double fast_ma_2=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,2);
      double slow_ma_2=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);
      
      double _fast_ma_1=iMA(NULL,MA2TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
      double _slow_ma_1=iMA(NULL,MA2TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
      
      static int bt=0;
      static int st=0;
         if(fast_ma_1>slow_ma_1){
            if(fast_ma_2<=slow_ma_2){
               if(_fast_ma_1>_slow_ma_1){
                  if(st>0)OrderClose(st,Lots,Ask,0,CLR_NONE);
                  st=0;
                  if(OrdersTotal()==0)bt=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,"",0,0,CLR_NONE);
               }
            }
         }
         if(fast_ma_1<slow_ma_1){
            if(fast_ma_2>=slow_ma_2){
               if(_fast_ma_1<_slow_ma_1){
                  if(bt>0)OrderClose(bt,Lots,Bid,0,CLR_NONE);
                  bt=0;            
                  if(OrdersTotal()==0)st=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,"",0,0,CLR_NONE);
               }
            }
         }         
   return(0);
}

По умолчанию стоят значения TimeFrame - 1, MA2TimeFrame - 5. В тестере выбираем таймфрейм М1, выполняем тестирование, открываем график, далее при помощи расстановки вертикальных линий в местах открытия ордеров и пересечения МА без открытия ордеров и переключения таймфрейма с М1 на М5 убеждаемся, что тестирование выполнено правильно.


Заключение

Несложные манипуляции, и громадное расширение возможностей по тестированию экспертов! Единственный недостаток - отсутствие автоматического обновления данных. Периодическое, например, раз в неделю, повторение пунктов 1-3: удаление всех данных из терминала для тестирования, экспорт нестандартных таймфреймов и их импорт в терминал для тестирования не составит большого труда ради такого огромного расширения возможностей тестера.

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/1368

Прикрепленные файлы |
2MA.mq4 (1.29 KB)
2MA2TF.mq4 (1.64 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (13)
uskov34
uskov34 | 17 авг. 2011 в 17:03
Подскажите пожалуйста можно ли протестировать график рендж баров или ренко.
Vitaliy
Vitaliy | 17 авг. 2011 в 22:10
uskov34:
Подскажите пожалуйста можно ли протестировать график рендж баров или ренко.

В статье ведь сказано про тестирование. Что Вас смущает?
Andrey Egorov
Andrey Egorov | 22 февр. 2013 в 14:07

Какой смысл делать такие тесты если в реале эти таймфреймы работать не будут ? разве что для других терминалов, но какждый терминал торгует по своему, где тестишь там и торгуешь ...


Как подменить инструмент в онлайне ?

32361988
32361988 | 19 февр. 2019 в 01:14

Здравствуйте. В одном терменале я создал ренко график и применил на нем ваш скрипт, в папке MQL4/Files получился файл EURUSD4.csv .

Дальше я зашел в другой терминал и через каталог данных удалил все файлы .hst. Затем через архив котировок кликнув на EURUSD таймфрем м1

импортировал файл EURUSD4.csv и получилось всё отлично. Ренко график созданный в первом терминале ( котировки 5 знаков после запятой)

на втором терминале (где тоже 5 знаков) отображался как м1

график

Но когда я запускаю график в тестере стратегий он отображается не корректно.

в тестере стратегийв то же время

 кто нибудь знает как это исправить?

Андрей Белый
Андрей Белый | 27 окт. 2023 в 17:40
Можно ли сделать индикатор, скрипт, шаблон, чтобы уменьшить часть  действий для выставления нестандартного таймфрейма или совсем свести к нулю? Ведь всё это нужно будет делать КАЖДЫЙ РАЗ, когда трейдер садится за торговлю.
А у меня на мт4  стоят 21 пара.

Моя задача, которую я пробую начал пробовать воплотить состоит в том, чтобы минимальными действиями сделать нестандартные таймфреймы, Очень интересует 3 минутный таймфрейм, на в МТ4. 
В МТ4 есть конвертер периодов и он имеет открытый код. Можете ли вы создать скрипт или индикатор и шаблон на основании его или иное, чтобы можно накинуть его одну пару - это будет шаблон например и с помощью его дозавершить уже накинув его на остальные нужные пары  и чтобы на них проявились трёхминутные таймфреймы? Ну и понятное с приставкой оффлайн. 
Если и неполное это действие сделать, то хотя бы насколько можно это сделать.

Спасибо.
Графическое управление внешними параметрами индикаторов Графическое управление внешними параметрами индикаторов
Управление внешними переменными индикаторов вызывается специальным окном, в котором мы меняем параметры и вновь запускаем индикатор. Неудобство таких манипуляций очевидно, поэтому возникла потребность вынести на экран нужные параметры и сделать графическое управление индикатором.
К вопросу об управлении капиталом К вопросу об управлении капиталом
В статье рассмотрены некоторые аспекты, возникающие при использовании различных систем управления капиталом, применительно к ФОРЕКС. Приведены данные экспериментов с моделью процесса торговли, в которой при совершении торговых сделок используются разные методы управления капиталом (Money Management - ММ).
Файл Lite_EXPERT2.mqh - функциональный конструктор экспертописателя Файл Lite_EXPERT2.mqh - функциональный конструктор экспертописателя
Эта статья является продолжением цикла статей "Эксперты на основе популярных торговых систем и алхимия оптимизации торгового робота". В ней автор знакомит читателей с более универсальной библиотекой функций файла Lite_EXPERT2.mqh
Принцип суперпозиции и интерференции финансовых инструментов Принцип суперпозиции и интерференции финансовых инструментов
Чем больше факторов влияют на поведение валютной пары, тем сложнее оценить ее поведение и сделать прогнозы на будущее. И, следовательно, если бы нам удалось из валютной пары выделить ее составляющие, меняющиеся во времени значения национальной валюты, то тем самым, мы существенно сократили степень свободы движения национальной валюты по сравнению с валютной парой, в которую она входит, и количество факторов влияющих на ее поведение. А как результат, повысили точность оценки ее поведения и прогнозирования будущих значений. Как же нам это сделать?