Автооптимизация MA

 

Написал код автооптимизации MA.

Возможно у кого-то есть более продвинутый вариант,чтобы не изобретать велосипед

//+---------------------Автооптимизация------------------------------+
int OPT()
  {
   ma_mem=0;
   sh_mem=0;
   win_mem=0;
   loss_mem=0;
   profit_mem=0;
   sdelok_mem=0;
   for(s=ma_opt_start,sh=sh_opt_start;s<=ma_opt_end;s=s+ma_opt_step)
     {
      ZERO();
      TP=int(s*k_TP*10);
      SL=int(TP*k_SL);
      if(TP<min_TP || SL<min_SL){continue;}
      //-------------------------------------------------------------------------------------------------      
      for(bar=bar_Opt;bar!=1;bar--)
        {
         if(pos_opt!=0)//Если есть открытые позиции
           {
            if(pos_opt==1)//Работаем с ордером BUY
              {
               if(Open[bar]>=open_opt+TP*Point)
                 {
                  win++;
                  profit=profit+TP;
                  pos_opt=0;
                 }
               if(Open[bar]<=open_opt-SL*Point)
                 {
                  loss--;
                  profit=profit-SL;
                  pos_opt=0;
                 }
              }
            if(pos_opt==2)//Работаем с ордером SELL
              {
               if(Open[bar]<=open_opt-TP*Point)
                 {
                  win++;
                  profit=profit+TP;
                  pos_opt=0;
                 }
               if(Open[bar]>=open_opt+SL*Point)
                 {
                  loss--;
                  profit=profit-SL;
                  pos_opt=0;
                 }
              }
           }
         if(pos_opt==0)//Если нет открытых позиций
           {
            if(SIGNAL(s,bar+sv+1,sh)==1)//Покупка
              {
               sdelok++;
               pos_opt=1;//Открыта позиция BUY
               open_opt=Close[bar];//Цена открытия
               continue;
              }
            if(SIGNAL(s,bar+sv+1,sh)==2)//Продажа
              {
               sdelok++;
               pos_opt=2;//Открыта позиция SELL
               open_opt=Close[bar];//Цена открытия
               continue;
              }
           }
         if(bar==2)
           {
            MEM();
            if(s==ma_opt_end){sh++;s=ma_opt_start;}
            break;
           }
         if(sh==sh_opt_end){break;}
        }
      //-------------------------------------------------------------------------------------------------
     }
   Print(
         "   ma: ",ma_mem,
         "   sh: ",sh_mem,
         "   win: ",win_mem,
         "   loss: ",loss_mem*-1,
         "   profit: ",profit_mem,
         "   sdelok: ",sdelok_mem
         );
   return(ma_mem);
  }
//+------------------------------------------------------------------+
void ZERO()
  {
   sdelok=0;
   loss=0;
   win=0;
   profit=0;
   pos_opt=0;
   open_opt=0;
  }
//+------------------------------------------------------------------+
int SIGNAL(int ma_sig,int bar_sig,int shift)
  {
   sig=0;
   MA1=iMA(Symbol(),Period(),ma_sig,shift,MODE_LWMA,PRICE_WEIGHTED,bar_sig);
   MA2=iMA(Symbol(),Period(),ma_sig,shift,MODE_LWMA,PRICE_WEIGHTED,bar_sig+1);
   MA3=iMA(Symbol(),Period(),ma_sig*2,shift,MODE_LWMA,PRICE_WEIGHTED,bar_sig);
   MA4=iMA(Symbol(),Period(),ma_sig*2,shift,MODE_LWMA,PRICE_WEIGHTED,bar_sig+1);
   MA5=iMA(Symbol(),Period(),ma_sig*3,shift,MODE_LWMA,PRICE_WEIGHTED,bar_sig);
   MA6=iMA(Symbol(),Period(),ma_sig*3,shift,MODE_LWMA,PRICE_WEIGHTED,bar_sig+1);
   if(MA6>MA5&&MA4>MA3&&MA2>MA1&&MA5>MA3&&MA3>MA1){sig=2;}
   if(MA6<MA5&&MA4<MA3&&MA2<MA1&&MA5<MA3&&MA3<MA1){sig=1;}
   return (sig);
  }
//+------------------------------------------------------------------+
void MEM()
  {
   if((win_mem_opt==true && loss_mem_opt==false && profit_mem_opt==false && sdelok_mem_opt==false && win_mem<win) ||

      (win_mem_opt==false && loss_mem_opt==true && profit_mem_opt==false && sdelok_mem_opt==false && loss_mem>loss) ||

      (win_mem_opt==false && loss_mem_opt==false && profit_mem_opt==true && sdelok_mem_opt==false && profit_mem<profit) ||

      (win_mem_opt==false && loss_mem_opt==false && profit_mem_opt==false && sdelok_mem_opt==true && sdelok_mem<sdelok) ||

      (win_mem_opt==true && loss_mem_opt==true && profit_mem_opt==true && sdelok_mem_opt==true && win_mem<win && loss_mem>loss && profit_mem<profit && sdelok_mem<sdelok) ||

      (win_mem_opt==false && loss_mem_opt==true && profit_mem_opt==true && sdelok_mem_opt==true && loss_mem>loss && profit_mem<profit && sdelok_mem<sdelok) ||

      (win_mem_opt==true && loss_mem_opt==false && profit_mem_opt==true && sdelok_mem_opt==true && win_mem<win && profit_mem<profit && sdelok_mem<sdelok) ||

      (win_mem_opt==true && loss_mem_opt==true && profit_mem_opt==false && sdelok_mem_opt==true && win_mem<win && loss_mem>loss && sdelok_mem<sdelok) ||

      (win_mem_opt==true && loss_mem_opt==true && profit_mem_opt==true && sdelok_mem_opt==false && win_mem<win && loss_mem>loss && profit_mem<profit) ||

      (win_mem_opt==true && loss_mem_opt==false && profit_mem_opt==false && sdelok_mem_opt==true && win_mem<win && sdelok_mem<sdelok) ||

      (win_mem_opt==false && loss_mem_opt==true && profit_mem_opt==true && sdelok_mem_opt==false && loss_mem>loss && profit_mem<profit) ||

      (win_mem_opt==true && loss_mem_opt==false && profit_mem_opt==true && sdelok_mem_opt==false && win_mem<win && profit_mem<profit) ||

      (win_mem_opt==false && loss_mem_opt==true && profit_mem_opt==false && sdelok_mem_opt==true && win_mem<win && sdelok_mem<sdelok) ||

      (win_mem_opt==true && loss_mem_opt==true && profit_mem_opt==false && sdelok_mem_opt==false && win_mem<win && loss_mem>loss) ||

      (win_mem_opt==false && loss_mem_opt==false && profit_mem_opt==true && sdelok_mem_opt==true && profit_mem<profit && sdelok_mem<sdelok))
     {
      ma_mem=s;
      sh_mem=sh;
      win_mem=win;
      loss_mem=loss;
      profit_mem=profit;
      sdelok_mem=sdelok;
      ZERO();
     }
  }


 

 

Прекрасно!

Покажите пжста результат торговли советника в тестере по авто оптимизированной МА?

 
Renat Akhtyamov:

Прекрасно!

Покажите пжста результат торговли советника в тестере по авто оптимизированной МА?

пожалуйста..за 10 лет H4

Файлы:
 
Nikolay Gaylis:

пожалуйста..за 10 лет H4

Ок.

Теперь тест в течении 10 лет на демо или хотя бы месяц. (у Вас на скрине 8 сделок)

Подтвердится?

Потом рассмотрим необходимость в дальнейшей оптимизации

 
Nikolay Gaylis:

пожалуйста..за 10 лет H4

Подобными примерами невозможно доказать эффективность оптимизации МА. Дело в том, что с мартином можно получить такие же результаты и лучше вообще без всякого индикатора. Сделайте советник без мартина с оптимизированной МА  с одним ордером в рынке и как положено со стопами(с ограничением убытков), тогда можно будет делать какие-то выводы.
 
Renat Akhtyamov:

Ок.

Теперь тест в течении 10 лет на демо или хотя бы месяц. (у Вас на скрине 8 сделок)

Подтвердится?

Потом рассмотрим необходимость в дальнейшей оптимизации

на скрине 418 сделок

 
Nikolay Gaylis:

на скрине 418 сделок

Я сделал вывод по 8-ми о том, что торговля на демо уже может дать представление о состоятельности идеи.

После этого можно реал на центиках в течении месяца, но уже сравнить с демо,

 а лучше параллельно и демо и реал прогнать.

Честно - идея нравится.

 
khorosh:
Подобными примерами невозможно доказать эффективность оптимизации МА. Дело в том, что с мартином можно получить такие же результаты и лучше вообще без всякого индикатора. Сделайте советник без мартина с оптимизированной МА  с одним ордером в рынке и как положено со стопами(с ограничением убытков), тогда можно будет делать какие-то выводы.

Безусловно без мартина картинка не такая приятная,но по крайней мере нет слива-и это не может не радовать)))

Файлы:
 
Nikolay Gaylis:

Безусловно без мартина картинка не такая приятная,но по крайней мере нет слива-и это не может не радовать)))

Ну так похожую картинку можно получить и на обычной МА с оптимальным периодом.
 
khorosh:
Ну так похожую картинку можно получить и на обычной МА с оптимальным периодом.
у меня не получалось...-поэтому и страдаю)))
 
Nikolay Gaylis:
у меня не получалось...-поэтому и страдаю)))
Это из-за того, что мало искали. Существует, я думаю, не меньше сотни возможных вариантов использования МА.
Причина обращения: