Назначение |
|
Программа предназначена для облегчения
рутинной работы трейдера |
по тестированию и
оптимизации экспертов, проведения последовательного мультивалютного, |
мультипериодного и др.
типов тестов и оптимизаций. |
Перед началом теста или
оптимизации программа проверяет наличие и состояние доступной истории. |
Для проведения специализированных
оптимизаций в программу заложена возможность |
передачи команд эксперту
и получения от него ответной информации
непосредственно во время проведения оптимизации |
Реализована возможность проведения
автооптимизации в указанное время запуская её из эксперта. |
Доступно для оптимизации
и тестирования одновременно до 10 переменных. |
В программу заложена
возможность добавления собственных макропрограмм тестирования и оптимизации. |
____________________________________________________________________________________________________________ |
|
Состав |
программа
состоит из одного скрипта и 3 библиотек. Общая блок схема на рисунке |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TestCommander - Скрипт ручного
запуска тестера, содержит массивы предустановок |
AutoMacroProg - библиотека макропрограмм |
MacroAutoOptimization - библиотека для запуска программ из советника
(автооптимизатор) , содержит массивы предустановок |
WorkAnalyzer - библиотека основных функций управления оптимизацией и
тестированием |
__________________________________________________________________________________________________________ |
|
Установка |
|
Для установки нужно
распаковать и запустить файл TestCommander. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в следующем окне нажать
кнопку "обзор" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
и выбрать папку с
установленной программой "MetaTrader" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
после выбора нажать
"ОК" потом "Извлечь" |
после распаковки (если
терминал был закрыт) запустится MetaTrader со скриптом |
|
|
|
|
|
|
|
|
|
|
|
|
|
далее нужно
зарегистрировать новый демосчет, иначе постоянно будет выскакивать окно для
ввода логина и пароля |
|
На этом установка
закончена. |
__________________________________________________________________________________________________________ |
|
После выбора советника и
настройки параметров |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
и свойств в окне тестера |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
вместо нажатия кнопки
старт, нужно запустить скрипт TesterCommander и выбрать номер соответствующей программы |
тестирования/оптимизации |
|
1) Макропрограмма "Multy_DATA" -
тестирование по заданным временным интервалам |
2) Макропрограмма "Multy_TF" -
тестирование по заданным тайм фреймам |
3) Макропрограмма "MultySymbol" - тестирование по
заданным символам |
4) Макропрограмма "MultyVariable" - тестирование по
заданным переменным |
5) Макропрограмма "StabilityTest" - проверка
стабильности эксперта, последовательное тестирование "MultySymbol", |
"Multy_DATA", "Multy_TF" |
6) Макропрограмма "OneOptim" - оптимизация
параметров с последующим отбором лучших результатов |
7) Макропрограмма "Complex" - оптимизация,
затем отбор лучших результатов, потом проверка стабильности работы эксперта |
поочередно
со всеми лучшими результатами оптимизации, далее отбор и вывод в отчет
наиболее стабильных результатов. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
___________________________________________________________________________________________________________ |
|
Описание |
|
|
у с т а н о в к и |
//---------------- Общие
настройки-------------------------------------- |
extern int ProgNumber = -1;
//Программы работы оптимизации и тестирования. |
extern int ShowTester = -1;
//Показать окно тестера (0 = скрыть, 1 = показать) |
extern int ShowTablo = -1;
//Показывать табло на графике (0 = скрыть, 1 = показать) |
extern int TabloX = 0; //Горизонтальная координата
табло |
extern int TabloY = 0; //Вертикальная координата
Табло |
extern int DeleteReport = -1;
//Удалить файл отчета тестера (0 = не удалять, 1 = удалять) |
//----------------
Параметры Анализатора--------------------------------------- |
extern double MinTrades = -1; //Минимальное количество сделок
в день |
extern double MaxTrades = -1; //Максимальное количество
сделок в день |
extern int ItogTotal = 0;
//Количество итоговых данных |
//==================
Порядок отсеивания ======================================= |
extern int Gross_Profit = 0; //По
максимальной прибыли |
extern int Profit_Factor = 0; //По
максимальной прибыльности |
extern int Expected_Payoff = 0; //По
максимальному матожиданию |
|
//-------------------------------------------------------------------------------------------------------------- |
|
Установки по умолчанию,
(находятся в библиотеке TestCommander ) |
|
//------------------------Настройки по
умолчанию----------------------------- |
ArraySetup[0] ="ProgNumber=1"; |
ArraySetup[1] ="ShowTester=1"; |
ArraySetup[2] ="ShowTablo=1"; |
ArraySetup[3] ="TabloX=4"; |
ArraySetup[4] ="TabloY=18"; |
ArraySetup[5] ="DeleteReport=1"; |
ArraySetup[6] ="MinTrades=0.5"; |
ArraySetup[7] ="MaxTrades=3"; |
ArraySetup[8] ="ItogTotal=12"; |
ArraySetup[9] ="Gross_Profit=3"; |
ArraySetup[10]="Profit_Factor=1"; |
ArraySetup[11]="Expected_Payoff=2"; |
//-------------------------------------------------------------------------------------------------------------- |
После старта скрипта TesterCommander
открывается окно ввода данных, |
по умолчанию там стоят
0, и -1 это сделано для того что бы можно было |
запомнить введенные
параметры в файле и не вводить их при следующем запуске. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
далее выводится окно
проверки введенных параметров |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
если установленные
параметры не подходят, нужно
отказаться от продолжения и |
запустить скрипт заново,
чтоб выставить необходимые параметры. |
|
После
сохранения вводимых значений запускается инициализация |
которая подготавливает
все необходимое для оптимизации или тестирования, |
а именно - проверяет
наличие тестера, если не установлен запускает установку, |
заполняет переменные
введенными пользователем значениями, копирует настройки, |
запускает функции
подготовки тестирования и подготавливает информационное табло. |
Далее выводится окно с настройками |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
заданными в окне тестера |
|
|
|
|
|
|
|
|
|
|
|
|
а
также дополнительная информация о периоде доступной истории и т.п. |
(после
изменения параметров в окне тестера нужно перезапустить терминал, |
иначе измененные
параметры не будут доступны для определения) |
|
На
следующем этапе, если нет ошибок и сбоев, запускается выбранная пользователем |
макропрограмма
с установками заданными в соответствующих массивах скрипта
TesterCommander. |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
1) Макропрограмма "Multy_DATA" - тестирование по заданным временным интервалам, параметры
задаются в массиве |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Можно
изменить количество временных интервалов в большую или меньшую сторону, при
этом нужно соответственно |
указывать количество
строк в массиве (под галочкой V ) |
|
|
2) Макропрограмма "Multy_TF" -
тестирование по заданным тайм фреймам, параметры задаются в массиве |
|
|
|
|
|
|
|
эти параметры также
можно изменять по своему усмотрению. |
|
|
3) Макропрограмма "MultySymbol" -
тестирование по заданным валютным парам, параметры задаются в массиве |
|
|
|
|
|
|
|
|
|
|
|
|
Символы
для тестирования так же можно изменять, увеличивать или уменьшать их
количество и так же |
соответственно указывать количество строк в
массиве (под галочкой V ) |
|
|
4) Макропрограмма "MultyVariable"
- тестирование по заданным переменным, параметры задаются в массиве |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
необходимо задать как
названия переменных так и значения для теста |
|
|
5) Макропрограмма "StabilityTest"
- проверка стабильности, тестирование производится по трем |
заданным
в соответствующих им массивах, критериям -
MultySymbol (тест по символам), |
Multy_DATA (временным
интервалам) и Multy_TF (периодам). |
|
|
6) Макропрограмма "OneOptim" -
оптимизация параметров с последующей фильтрацией убыточных сделок, |
дубликатов, фильтрация
по количеству минимальных и максимальных сделок в день, сортировкой лучших. |
результатов в заданном
пользователем порядке. |
|
|
7) Макропрограмма "Complex" -
программа оптимизирует, затем фильтрует и сортирует полученные значения, |
после чего 12 лучших
значений проверяет на стабильность программой StabilityTest после чего снова
фильтрует |
и сортирует усредненные
полученные результаты отбирая 3 лучших. |
|
|
После запуска выбранной
программы информация о ее работе выводится в строке комментариев и
информационном табло. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
После
окончания работы макропрограммы результат записывается в файл |
с названием указанным в
информационном табло. |
файл создается в папке
Report |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
так же
в этой папке содержится информация о состоянии истории |
|
_________________________________________________________________________________________________________ |
|
Дополнительная
информация |
|
для немедленного
завершения работы программы достаточно удалить скрипт с графика. |
|
__________________________________________________________________________________________________________ |
|
Автооптимизация |
|
для
настройки автооптимизации нужно скопировать код в оптимизируемый советник и
выставить параметры оптимизации. |
пример кода и его
размещения находится в файле эксперта MACD_Sample.mq4 |
|
блок настроек запуска эксперта |
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
extern int setWeek = 5; //День недели
старта оптимизации |
extern int setHour = 23; //Час старта
оптимизации |
extern int setMinute = 55; //Минута старта
оптимизации |
extern int ProgNumber = 2; //номер
программы оптимизации |
bool OptimStart=false; |
bool report=false; |
#include <MacroAutoOptimization.mqh> |
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
|
|
блок запуска эксперта |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
массивы параметров для
автооптимизации находятся в файле библиотеки MacroAutoOptimization.mqh |
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
Функции для создания собственных макропрограмм |
|
................................ |
int install() -
Устанавливает тестер копирует все необходимые для работы файлы и папки
в папку expert\files |
................................ |
int
initialization(int ProgNumber,bool ShowTester,bool ShowTablo,int TabloX,int TabloY,bool DeleteReport,int MinTrades,int MaxTrades,int ItogTotal,int Gross_Profit,int Profit_Factor,int Expected_Payoff) |
- Проверяет наличие тестера, если не
установлен запускает install(). |
Заполняет
глобальные переменные библиотеки "WorkAnalyzer" значениями, |
копирует файлы
настроек, запускает функции |
ReWriteExperts(), AutoSetRW(), рисует рамку табло. |
|
int ProgNumber -
Номер макропрограммы |
bool ShowTester -
Показать окно тестера |
bool ShowTablo - Показать табло |
int TabloX - Горизонтальная
координата табло |
int TabloY - Вертикальная
координата табло |
bool DeleteReport -
Удалять промежуточный файл отчета
тестера |
int MinTrades - Минимальное
количество сделок в день |
int MaxTrades
- Максимальное количество сделок в день |
int ItogTotal
-
Количество итоговых данных выводимых в отчет |
int Gross_Profit
- Сортировка по прибыли
значение 1, 2, или 3 |
int Profit_Factor
- Сортировка по прибыльность значение 1, 2, или 3 |
int Expected_Payoff - Сортировка по мат. ожиданию значение 1, 2, или 3 |
................................ |
int deinitialization() |
- очищает экран от созданных тестером
объектов, закрывает тестер |
................................ |
string AvailablyHistory(string Symb, int Per) |
- Возвращает дату и время доступной истории в
виде: "ДатаНачала - Дата окончания" |
string Symb - Символ |
int Per - Период |
................................ |
int
TestHistory(int SetHole, string Symb, int Per) |
- Проверяет наличие разрывов в истории по
заданному символу и периоду |
int SetHole - Минимальный размер разрыва |
string Symb - Символ |
int Per - Период |
int
SpeedTstHist(string Symb, int Per,int start, int stop) |
- Проверяет наличие исторических данных за
указанный период по указанному символу и периоду |
string Symb - Символ |
int Per - Период |
int start - Дата начала истории |
int stop - Дата окончания истории |
................................ |
int History(string Symb, int Per) |
- Копирует историю в папку тестера с
одновременной проверкой на наличие дыр |
string Symb - Символ (Если Symb = "" будет скопирована вся имеющаяся история по символу
заданному в окне настроек тестера ) |
int Per - Период |
int ReWriteExperts() - Копирует в папку тестера тестируемый
эксперт и папки include,indicators,libraries,samples,libraries,templates |
................................ |
string AutoSetRW(string FindText,bool Rewrite,string NewVolum) |
- Считывает/Записывает переменные в файлах
terminal.ini, lastparameters.ini, "NameMTS".ini |
string FindText - название переменной
(указаны в списке переменных) |
bool Rewrite false - чтение, true - запись переменной |
string NewVolum - новое значение переменной. |
................................ |
int ParameterTest() -
Выводит на экран информацию о настройках тестирования |
................................ |
int setParameter(string Np1,string Np2,string Np3,string Np4,string Np5,string Np6,string Np7,string Np8,string Np9,string Np10,double P1,double P2,double P3,double P4,double P5,double P6,double P7,double P8,double P9,double P10) |
- Заполняет SET файл и глобальный массив
переменными |
если имена
переменных ="" переменные
берутся из окна настроек тестера |
string Np1 - Np10 - Названия тестируемых переменных |
double P1 - P2 - Значения тестируемых переменных |
................................ |
int
iniParameter(bool TestOptimization,string NameMTS,string Symb,int PeriodTime,int TestModel,bool TestDateEnable,int TestFromDate,int TestToDate) |
- Заполняет INI файл значениями для
тестирования / оптимизации |
если значения не
заданы то берутся из глобальных переменных библиотеки
"WorkAnalyzer" |
bool TestOptimization - false - тестирование true -
оптимизация |
string NameMTS - название файла
эксперта |
string Symb - символ |
int PeriodTime - Период |
int TestModel - режим
моделирования |
bool TestDateEnable - использовать
дату |
int TestFromDate - дата начала
тестирования |
int TestToDate - дата окончания тестирования |
................................ |
string StartTester() - Запускает тестер |
................................ |
bool
TimeOutReport(string FileUser); |
- Функция контроля создания файла отчета |
если имя файла =
"" (не заданно) то проверяет наличие файла отчета тестера если
найден возвращает true |
string FileUser - Имя файла отчета тестера (файл должен
находится в папке expert\files) |
................................ |
string
ExpertMessage(string ExpComm) |
- принимает и отправляет сообщения
тестируемому эксперту |
string ExpComm - команда эксперту |
если ExpComm = "" принимает
информацию от эксперта |
................................ |
int
FileTester(string FileReport,string TstReport[][]){ |
- считывает данные из файла отчета созданного
после тестирования |
string FileReport - имя файла
отчета (если имя файла не задано, используется имя файла из глобальной
переменной библиотеки "WorkAnalyzer" ) |
string TstReport[][] - массив возвращаемых
данных |
................................ |
int
FileOptimization(string FileReport,string OptReport[][]) |
- считывает данные из созданного после
оптимизации файла отчета |
string FileReport - имя файла
отчета (если имя файла не задано, используется имя файла из глобальной
переменной библиотеки "WorkAnalyzer" ) |
string OptReport[][] - массив возвращаемых данных |
................................ |
int Analise(string FileReport,string NamePerem,double Itog[][],string OptReport[][]) |
- Сортирует данные по заданной при старте
последовательности: |
отфильтровывает
дубликаты и убыточные сделки, |
сортирует данные
по заданной при старте последовательности: |
записывает
результат в файл и возвращает в массив Itog[][]; |
string FileReport - имя файла
создаваемого отчета |
string NamePerem - имена
переменных для анализа |
double Itog[][] - массив возвращаемых результатов |
string OptReport[][] - массив данных для
анализа |
string
GlobVariable(string Name) |
- Возвращает по имени значение глобальной
переменной библиотеки "WorkAnalyzer" |
string Name - имя переменной (указаны в списке глобальных переменных) |
int WriteReport(string RepFile,string RepTest,string TecTst,string TstReport[][]) |
- Записывает отчет в файл |
string RepFile - имя файла отчета |
string RepTest - описание |
string TecTst - описание строки |
string TstReport[][] - значения |
( первая строка
значений является названием колонок ) |
int
GetPixelColor(int x,int y) |
- возвращает цвет точки активного графика по
указанным координатам X.Y. |
int x - горизонтальная координата |
int y - вертикальная координата |
................................ |
double iPoint(string Symb) |
- Возвращает Point указанного инструмента |
string Symb - Символ |
................................ |
string PeriodConvertFile(int Per) |
- конвертирует файловое представление периода
в текстовое |
(в файле период
представлен как - 0,1,2,3,4,5,6,7,8) |
int Per - число от 0 до 8 (файловое
представление периода) |
................................ |
string
PeriodConvertTime(int Per) |
- конвертирует временно'е (в минутах)
представление периода в текстовое |
int Per - период |
................................ |
int PerConvFileTime(int Per) |
- конвертирует файловое представление периода
во временное (в минутах) |
int Per - число от 0 до 8 (файловое
представление периода) |
................................ |
int
PerConvTimeFile(int Per) |
- конвертирует временно'е (в минутах)
представление периода в файловое |
int Per - период |
................................ |
string SetWeek(int NameWeek) |
- Возвращает название дня недели; |
int NameWeek - номер дня
недели от 0 до 6 |
................................ |
string
SetMonth(int
NameMonth) |
- Возвращает название месяца |
int NameMonth - номер месяца |
................................ |
int TimeTotal(int TotalSeconds,int type) |
- возвращает количество минут часов дней
недель месяцев лет в переданном числе |
int TotalSeconds - число в
секундах |
int type - 1 - минут 2 - часов
3 - дней, 4 - недель, 5 -
месяцев, 6 - лет. |
|
int Draw(bool Mode,int StartHz,int StopHz,int StepHz,int StartVr,int StopVr,int StepVr,string ObjName,string Sym,int Rzm,int Col) |
- Рисует линии на экране |
bool Mode - режим true - рисует линию false - стирает линию |
int StartHz -
горизонтальная координата начала линии |
int StopHz -
горизонтальная координата окончания линии |
int StepHz - шаг по
горизонтали |
int StartVr -
вертикальная координата начала линии |
int StopVr -
вертикальная координата окончания линии |
int StepVr - шаг по вертикали |
string ObjName - название
объекта |
string Sym - символ
которым будет нарисована линия |
int Rzm -
размер символа |
int Col - цвет линии |
................................ |
int
TextWrite(int
InfoWin,string Text,int Col) |
- Выводит текст на экран |
int InfoWin - Информационное
окно табло 1- верхнее, 2 - среднее, 3
- нижнее |
string Text - текст для вывода |
int Col -
цвет текста |
................................ |
int Tablo(bool Start) |
- рисует/удаляет рамку табло |
bool Start true -
показать табло false - скрыть табло |
................................ |
int
TestError(int err) |
- Возвращает описание ошибки |
int err - Номер ошибки (если = 0 то запускается GetLastError()) |
|
```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` |
список переменных
возвращаемых функцией "AutoSetRW" из файлов terminal.ini, lastparameters.ini, "NameMTS".ini |
"Period=";
"balance="; |
"Expert=";
"profit_enable="; |
"Recalculate="; "profit="; |
"Symbol=";
"marginlevel_enable="; |
"LastScanServer="; "marginlevel="; |
"optimization=";
"maxdrawdown_enable="; |
"genetic=";
"maxdrawdown="; |
"fitnes=";
"consecloss_enable="; |
"method=";
"consecloss="; |
"use_date=";
"maxdrawdown_enable="; |
"from=";
"conseclossdeals_enable="; |
"to=";
"conseclossdeals="; |
"positions=";
"consecwin_enable="; |
"deposit=";
"consecwin="; |
"currency=";
"consecwindeals_enable="; |
"balance_enable=";
"consecwindeals="; |
NameMTS - имя файла настроек эксперта |
`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` |
`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` |
список глобальных
переменных библиотеки "WorkAnalyzer" возвращаемых функцией
"GlobVariable" |
|
"ProgNumber"
номер макропрограммы |
"ShowTester" Показать окно тестера |
"ShowTablo" Показывать табло на
графике |
"TabloX" Горизонтальная
координата табло |
"TabloY" Вертикальная
координата Табло |
"DeleteReport" перезаписать отчет |
"DataTotal" Количество дней для
оптимизации |
"MinTradesr" Минимальное количество
сделок в день |
"MaxTrades" Максимальное количество
сделок в день |
"ItogTotal" Количество итоговых
данных |
"Gross_Profit" По максимальной прибыли |
"Profit_Factor" По максимальной
прибыльности |
"Expected_Payoff"
По максимальному матожиданию |
"StartTime" Стартовое время |
"NameMTS"
Название советника |
"Symb" Название
инструмента |
"Period" Период
тестирования |
"TestModel" Модель тестирования |
"TestOptimization"
Оптимизация |
"TestDateEnable"
Использовать дату |
"TestFromDate"
Дата начала тестирования |
"TestToDate" Дата окончания
тестирования |
"SetNameMTS"
Установленное в окне тестера Название советника |
"SetSymb" Установленное в окне
тестера Название инструмента |
"SetPeriod" Установленное в окне
тестера Период тестирования |
"SetTestModel"
Установленное в окне тестера Модель тестирования |
"SetTestOptimization"
Установленное в окне тестера Оптимизация |
"SetTestDateEnable"
Установленное в окне тестера Использовать дату |
"SetTestFromDate"
Установленное в окне тестера Дата начала тестирования |
"SetTestToDate"
Установленное в окне тестера Дата окончания тестирования |
"Glob_BgColor"
Цвет фона |
"SpK" Коэффициент
скорости работы компьютера |
"FileTST" Имя файла тестера |
"slash" символ
"слеш" |
"PathTerminal"
путь к терминалу |
"Puth" путь к тестеру |
"Srv" Активный сервер |
"FileReport" Имя файла отчета |
"FileAllReport"
Имя файла полного отчета |
|
"============================================================================================= |
|
Примеры создания
макропрограмм можно посмотреть в файле "AutoMacroProg" |
|
|