Назначение
 Программа предназначена для облегчения рутинной работы трейдера
по тестированию и оптимизации экспертов, проведения последовательного мультивалютного,
мультипериодного и др. типов тестов и оптимизаций.
Перед началом теста или оптимизации программа проверяет наличие и состояние доступной истории.
 Для проведения специализированных оптимизаций в программу заложена возможность
передачи команд эксперту и получения от него ответной информации  непосредственно во время проведения оптимизации
 Реализована возможность проведения автооптимизации в указанное время запуская её из эксперта.
Доступно для оптимизации и тестирования одновременно до 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"