Тестер: Автоматическая оптимизация торгового робота в процессе реальной торговли - страница 5

 
Уважаемый Хeon и господа, Здравствуйте.
Хeon, если еще не начал дороботку того Масd, о котором мы говорили раннее, очень прошу начни с AI. Заставлять ждать столько людей. ... Я буду рад если Вы поможете стольким хорошим людям. По отношению ко мне, прошу, не чувствуйте ни каких обязательств.
С уважением! И Спасибо.
Павел.
 
xeon:
Спасибо за оценку. Да, развитие предполагается, а так же расширение функциональности.

Здравствуйте всем!
На прошлой неделе занялся оптимизацией AI и мне дали ссылку на эту ветку. Смотрю СDR, Paha занимаются тем-же. Я прогнал на 12 инструментах с 2го по 19 апреля на всех ТФ. Оптимизировал х1, х2, х3, х4, tp, sl. Лучшие результаты на 5м и 1h. С 23.04 с начала сесси поставил их соответственно на два разных демо-счета. Если еще и с автооптимизацией на м5 запустить один счет было бы здорово. XEON, если можно, мне бы то-же сразу встроить в AI автооптимизатор. И подправить AI нужно на тип исполнения ордеров Execution by Market (в моем ДЦ такое). А еще первые ордера выставляются 0,01 лота, как я изменил в самом b-lots, а следующие по 0,1 лоту. Хотя в настройках по выбору лота выставлено вот так extern int LotsWayChoice = 0; // Способ выбора рабочего лота: // 0-фиксированный. (хотелось бы чтобы по 0,01 лоту, чтобы сразу настраивать под небольшой реал). Естественно какие нужно отчеты буду давать. Могу просто ивест-пароль от этих счетов дать.

С уважением. Дмитрий

 
xeon:
Dmitriy2:

Здравствуйте всем!
На прошлой неделе занялся оптимизацией AI и мне дали ссылку на эту ветку. Смотрю СDR, Paha занимаются тем-же. Я прогнал на 12 инструментах с 2го по 19 апреля на всех ТФ. Оптимизировал х1, х2, х3, х4, tp, sl. Лучшие результаты на 5м и 1h. Сегодня с начала сесси поставил их соответственно на два разных демо-счета. Если еще и с автооптимизацией на h1 запустить один счет было бы здорово. XEON, если можно мне бы то-же сразу встроить в AI автооптимизатор. И еще, первые ордера выставляются 0,01 лота, как я изменил в самом b-lots, а следующие по 0,1 лоту. Хотя в настройках по выбору лота выставлено вот так extern int LotsWayChoice = 0; // Способ выбора рабочего лота: // 0-фиксированный. Хотелось бы чтобы сразу под небольшой реал тестировалось. И тип исполнения ордеров в моем ДЦ Execution by Market у меня есть переделанный AI, но если не трудно сразу-бы сделать под это исполнение. Какие заинтересуют отчеты, результаты буду выкладывать. С уважением. Дмитрий

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

Ну вот здесь http://i-root.narod.ru/ai.zip Советник AI уже под Execution by Market. b-lots - непойму почему все время ордера не выставляются по 0,01 лота. Хорошо бы трейлинг-стоп добавить, если не сложно, типа ukts (вложен). Начало и конец торговли в течение суток можно добавить(а лучше два периода). И тем кто оптимизировал AI - xls файл как я это начал делать(может я что-то не так делаю - хорошо бы совет).
 
CDR:
Я Ai гоняю уже с декабря и я туда добавил изменения лота. а размер лота какой ниже указан 0. 01? но пока не понял что у тебя там происходит. А результаты хорошие дает на тестах на всех фреймах. Я счас на минуты подсел . Там убытки могут быть меньше.
Здравствуйте. Я для xeon написал пожелания про AI и выложил что есть здесь http://i-root.narod.ru/ai.zip. Может посмотрите xls файл. Мне интересно Ваше мнение, может я не в том направлении иду и т. п. С уважением
 
Dmitriy2:
CDR:
Я Ai гоняю уже с декабря и я туда добавил изменения лота. а размер лота какой ниже указан  0. 01? но пока не понял что у тебя там происходит.  А результаты хорошие дает на тестах на всех фреймах.  Я счас на минуты подсел . Там убытки могут быть меньше.
Здравствуйте. Я для xeon написал пожелания про AI и выложил что есть здесь http://i-root.narod.ru/ai.zip. Может посмотрите xls файл. Мне интересно Ваше мнение, может я не в том направлении иду и т. п. С уважением

Посмтрел. Скажу сразу переменные  х1 х2 х3 х4 оптимизирутся от 0 до 200 а не от 100 до 200 как у тебя.
Ну а в стальном ты уже волен сам все делать.
Будет хорошо если автор возьмется за дело. Но встроить в код и у меня нормально получилось. е выходит оптимизация. Даже сделанного автором MACD
1 выбирате параметры после оптимизации не смаые лучшие
2 Не добавляет их в советник
Определнно я делаю что-то не так.
 

Очень достойный инструмент, давно его использую, но реальную прибыль начал получать недавно, а потому спешу сказать СПАСИБО.

 

Ну вот, появилось немного свободного времени, можно и поработать на благо трейдеров :-)

И так, вот код который нужно вставить в AI:

//+------------------------------------------------------------------+
//|                                       ArtificialIntelligence.mq4 |
//|                               Copyright © 2006, Yury V. Reshetov |
//|                                         http://reshetov.xnet.uz/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Yury V. Reshetov ICQ:282715499  http://reshetov.xnet.uz/"
#property link      "http://reshetov.xnet.uz/"
//---- input parameters
extern int    x1 = 135;
extern int    x2 = 127;
extern int    x3 = 16;
extern int    x4 = 93;
// StopLoss level
extern double sl = 85;
extern int MagicNumber = 888;
static int prevtime = 0;
 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
extern int SetHour    = 0;                      //Час старта оптимизации 
extern int SetMinute  = 1;                      //Минута старта оптимизации 
int    TestDay        = 10;                     //Количество дней для оптимизации 
int    TimeOut        = 10;                      //Время ожидания окончания оптимизации в минутах
string NameMTS        = "AI";                   //Имя советника
string NameFileSet    = "AI.set";               //Имя Set файла с установками
string PuthTester     = "D:\Program Files\Forex Best Trade Station_1"; //Путь к тестеру
//--- Последовательность фильтрации
int    Gross_Profit   = 1;                     //Сортировка по Максимальной прибыли
int    Profit_Factor  = 2;                     //Сортировка по Максимальной прибыльности
int    Expected_Payoff= 3;                     //Сортировка по Максимальному матожиданию
//--имена переменных для оптимизации
string Per1 = "x1";
string Per2 = "x2";
string Per3 = "x4";
string Per4 = "sl";
bool StartTest=false;
datetime TimeStart;
//--- Подключение библиотеки автооптимизатора
#include <auto_optimization_204.mqh>
 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
#include <b-Lots.mqh>
 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init(){
    // Tester(TestDay,NameMTS,NameFileSet,PuthTester,TimeOut,Gross_Profit,Profit_Factor,Expected_Payoff,Per1,Per2,Per3,Per4);
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   if(!IsTesting() && !IsOptimization()){                //При тестировании и оптимизации не запускать
      if(TimeHour(TimeLocal())==SetHour){                //Сравнение текущего часа с установленным для запуска
         if(!StartTest){                                 //Защита от повторного запуска
            if(TimeMinute(TimeLocal())>SetMinute-1){     //Сравнение диапазона минут с установленной для запуска минутой
               if(TimeMinute(TimeLocal())<SetMinute+1){  //диапазон нужен в случае если по каким-то причинам долго нет нового тика
                  TimeStart   =TimeLocal();
                  StartTest   =true;                     //Флаг запуска тестера
                  Tester(TestDay,NameMTS,NameFileSet,PuthTester,TimeOut,Gross_Profit,Profit_Factor,Expected_Payoff,Per1,Per2,Per3,Per4);
      }}}}
      x1     =GlobalVariableGet(Per1);
      x2     =GlobalVariableGet(Per2);
      x4     =GlobalVariableGet(Per3);
      sl     =GlobalVariableGet(Per4);
   }
   if(StartTest){                                        //Если флаг запуска тестера установлен
       if(TimeLocal()-TimeStart > TimeOut*60){            //Если с момента запуска прошло больше установленного времени ожидания тестирования
       StartTest = false;                                //Обнулим флаг
   }}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Соответственно необходимо внести изменения которые будут действительны для вашего компьютера
1) изменить путь к папке с терминал-тестером
"D:\Program Files\Forex Best Trade Station_1"

вам нужно указать тот который у вас на компьютере
2) Подготовить set файл с параметрами настроек (как описано в статье) AI. set


Теперь что касательно переменных для оптимизации

"x1"; "x2"; "x4"; "sl";

так как в автооптимизатором можно оптимизировать только 4 переменных, а изменения в эту версию вносить не планируется, я выбрал переменные которые на мой взгляд наиболее сильно влияют на результаты (вы можете изменить их по своему усмотрению)


 

Попытаюсь ответить на ваши вопросы -

>Если говорить о советнике с которым я работаю и автооптимизация которого меня интересует, то оптимизируя он
>выбирает очень плохой результат из тех что есть. В чем может быть ошибка?


Возможно лучшие (по вашему мнению) значения отфильтровываются

   double MinTr           = TestDay-2;              //Ограничение на минимальное количество сделок в день
   double MaxTr           = (60/Period()*TestDay)+2;//Ограничение на максимальное количество сделок в день

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

   double MinTr           = 0;                      //Ограничение на минимальное количество сделок в день
   double MaxTr           = 1000;                    //Ограничение на максимальное количество сделок в день


>оптимизация идет, файл с отчетом оптимизатора создается, и создаются файлы сортированные, но в них в строке GrossProfit - всегда 0, а размер >профита отображается в строке TotalTrades. Н иже приведу копию сторк из файла. И на экран результаты теста выдаются а вот в советник не заносятся.
>привожу данные из файла .csv
>GrossProfit TotalTrades ProfitFactor ExpectedPayoff FastEMA SlowEMA SignalSMA
>0 8 1000.00000000 0.00000000 17 27 13 0
>0 10 1000.00000000 0.00000000 17 27 12 0

>...да... Метатрейдер 203 билд

Судя по файлу промежуточного отчета, есть ошибки оптимизации, например неверно выбраны переменные для оптимизации.
Проверить это можно посмотрев результаты работы оптимизатора в файле "FileReport_EURUSD_2007.04.28.htm" который создается тестером.


 
>И еще по поводу библиотеки. думаю Вам уже приходила такая мысль добавить возможномть тестировать раз в неделю и раз в месяц.

В этот код добавлена возможность запускать автооптимизатор 1 раз в неделю

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
extern int SetWeek   = 0;                       //Установка дня недели (0-Воскресенье,1,2,3,4,5,6)
extern int SetHour    = 0;                      //Час старта оптимизации 
extern int SetMinute  = 1;                      //Минута старта оптимизации 
int    TestDay        = 10;                     //Количество дней для оптимизации 
int    TimeOut        = 10;                      //Время ожидания окончания оптимизации в минутах
string NameMTS        = "AI";                   //Имя советника
string NameFileSet    = "AI.set";               //Имя Set файла с установками
string PuthTester     = "D:\Program Files\Forex Best Trade Station_1"; //Путь к тестеру
//--- Последовательность фильтрации
int    Gross_Profit   = 1;                     //Сортировка по Максимальной прибыли
int    Profit_Factor  = 2;                     //Сортировка по Максимальной прибыльности
int    Expected_Payoff= 3;                     //Сортировка по Максимальному матожиданию
//--имена переменных для оптимизации
string Per1 = "x1";
string Per2 = "x2";
string Per3 = "x4";
string Per4 = "sl";
bool StartTest=false;
datetime TimeStart;
//--- Подключение библиотеки автооптимизатора
#include <auto_optimization_204.mqh>
 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
в функцию start()


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   if(!IsTesting() && !IsOptimization()){                //При тестировании и оптимизации не запускать
      if(TimeDayOfWeek(TimeLocal())==SetWeek){           //сравнение дня недели с текущим 
         if(TimeHour(TimeLocal())==SetHour){                //Сравнение текущего часа с установленным для запуска
            if(!StartTest){                                 //Защита от повторного запуска
               if(TimeMinute(TimeLocal())>SetMinute-1){     //Сравнение диапазона минут с установленной для запуска минутой
                  if(TimeMinute(TimeLocal())<SetMinute+1){  //диапазон нужен в случае если по каким-то причинам долго нет нового тика
                     TimeStart   =TimeLocal();
                     StartTest   =true;                     //Флаг запуска тестера
                     Tester(TestDay,NameMTS,NameFileSet,PuthTester,TimeOut,Gross_Profit,Profit_Factor,Expected_Payoff,Per1,Per2,Per3,Per4);
      }}}}}
      x1     =GlobalVariableGet(Per1);
      x2     =GlobalVariableGet(Per2);
      x4     =GlobalVariableGet(Per3);
      sl     =GlobalVariableGet(Per4);
   }
   if(StartTest){                                        //Если флаг запуска тестера установлен
       if(TimeLocal()-TimeStart > TimeOut*60){            //Если с момента запуска прошло больше установленного времени ожидания тестирования
       StartTest = false;                                //Обнулим флаг
   }}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


>ну и меня интересует фильр по минимальным убыткам.

вероятно будет в следующей версии, на всякий случай попробуйте "поигратся " с очередностью фильтрации

        // Сортировка по Максимальной прибыли
        int Gross_Profit = 1;                      
        // Сортировка по Максимальной прибыльности        
        int Profit_Factor = 2;     
        // Сортировка по Максимальному матожиданию
        int Expected_Payoff = 3;
Возможно фильр по минимальным убыткам и не потребуется.
 
Paha:
Уважаемый Хeon и господа, Здравствуйте.
Хeon, если еще не начал дороботку того Масd, о котором мы говорили раннее, очень прошу начни с AI. Заставлять ждать столько людей. ... Я буду рад если Вы поможете стольким хорошим людям. По отношению ко мне, прошу, не чувствуйте ни каких обязательств.
С уважением! И Спасибо.
Павел.
По поводу доработки вашего советника MACD - вы указали для оптимизации слишком много переменных:

Таке profit 10-5-100;
Stoploss 50-10-200;
TreylingStop 5-5-80;
MakdOpen 1-1-10
MakdClose 1-1-10;
MATrendPeriod 10-2-40;
Lot size variant 0-1-2;
StartLot 0.1-0.1-3;
ADD lot 0.1-0.1-0.6;
True profit points 10-100-600;

Пажайлуста выберите из них любых - 4
автооптимизатор ограничен 4 переменными для оптимизации