В поисках священной "граали"...

 

Всем день...или ночь добрые. Я тут работаю над одним советникм маньячным. Пока выкладывать не буду, просто еще не доработан, а так выложу обязательно...БЕСПЛАТНО. Тока нужна помоСЧь. Вопрос намба ван - как сделать авто оптимизацию...скажем 8-16 напаметров? Статья про автооптимизацию которая маячит светлым пятном на сайте...не то что не работает...там тока 4 параметра можно на оптиму поставить, да и как то коряво все работает.Вобщем может кто подскажет чаго из своих наработок? УВАЖАЕМЫЙ КИМ, К ВАМ ОСОБЕННО ОБРАТИТСЯ СТОИЛО БЫ. Вопрос второй - массу индюков выкладывают всякого рода маньяки, а вот стоящего что то не наблюдается. То перерисовывается, то тормозит, то вообще лажу какую то показывает. Нет, я не говорю - "дайте мне субомега индикатор и я переверну мир". Смысл моей стратегии в советнике заключается в процентном соотношении группового сигнала от 8 индикаторов и немного фильтранутого. ТАк вот, у меня представленны индикаторы стандартной коллекции, хотелось бы поэксперементировать с индивидумами... Вобщем может коллективный разум и победит.

 
Давайте конкретику. Что как говорится товарищь cherchez la (или le, ну на крайняк les) ? Индикаторы? какие - их валом. Тем более что характер их ну таки очень разношёрстный.
 
Ну давайте конкретикой. Для начала я взял Стохастик - он самый шустрый, потом разбавил фильтром из ОсМы...ну а потом понеслось - ХайЛоу, Алигатор, Машки, ССI. Вот из них и получилось...Но при переводе в проценты всех сигналов кое кто игнорируется. Понятное дело, что надо выставлять приоритеры на основе оптимизации. Но можно и другим путем пойти - более менее адекватный индюк (иди пару индюков) до кучи запихать к имеющимся с выходом сигнала 0 и 1 ВОТ тогда будет толк. На данном этапе у меня получается просадка в пару процентов с матожиданием в 1.85 и 50 позициями за сутки. Весьма не плохо на мой взгляд. Но вот в чем косяк - бывает момент, а если точна, то как правило это 2 момента за день (причем любой день из истории) когда эксперт жестоко ошибается. Вот и хотел максимально отфильтровать такие моменты. Зиг-Заг может какой, тока что бы не перерисовывал и работал пошустрее. По моему я кое что такое где то когда то видел...но увы не предал этому значения тогда, а сейчас не могу найти. Или вот еще - Экстраполятор...ВАЩЕ зашибись будет...но эта скотина перерисовывается...Вот как быть?
 
     StH11v=iStochastic(NULL,TF1,stK,stP,stD,MODE_SMA,0,MODE_MAIN,0);   StH1pr1v=iStochastic(NULL,TF1,stK,stP,stD,MODE_SMA,0,MODE_SIGNAL,0);
     StH41v=iStochastic(NULL,TF2,stK,stP,stD,MODE_SMA,0,MODE_MAIN,0);   StH4pr1v=iStochastic(NULL,TF2,stK,stP,stD,MODE_SMA,0,MODE_SIGNAL,0);
     StD11v=iStochastic(NULL,TF3,stK,stP,stD,MODE_SMA,0,MODE_MAIN,0);   StD1pr1v=iStochastic(NULL,TF3,stK,stP,stD,MODE_SMA,0,MODE_SIGNAL,0);
     
     if (StH11v<25 && StH1pr1v<25 && StH11v>StH1pr1v){Stx1TF1x=S;Stx1TF1y=0;}
     if (StH11v>75 && StH1pr1v>75 && StH11v<StH1pr1v){Stx1TF1y=S;Stx1TF1x=0;}
     if (StH41v<25 && StH4pr1v<25 && StH41v>StH4pr1v){Stx1TF2x=S;Stx1TF2y=0;}
     if (StH41v>75 && StH4pr1v>75 && StH41v<StH4pr1v){Stx1TF2y=S;Stx1TF2x=0;}
     if (StD11v<25 && StD1pr1v<25 && StD11v>StD1pr1v){Stx1TF3x=S;Stx1TF3y=0;}
     if (StD11v>75 && StD1pr1v>75 && StD11v<StD1pr1v){Stx1TF3y=S;Stx1TF3x=0;}
                                                                             
     if (StH11v>25 && StH1pr1v>25 && StH11v>StH1pr1v){Stx1TF1x=0;Stx1TF1y=0;}
     if (StH11v<75 && StH1pr1v<75 && StH11v<StH1pr1v){Stx1TF1y=0;Stx1TF1x=0;}
     if (StH41v>25 && StH4pr1v>25 && StH41v>StH4pr1v){Stx1TF2x=0;Stx1TF2y=0;}
     if (StH41v<75 && StH4pr1v<75 && StH41v<StH4pr1v){Stx1TF2y=0;Stx1TF2x=0;}
     if (StD11v>25 && StD1pr1v>25 && StD11v>StD1pr1v){Stx1TF3x=0;Stx1TF3y=0;}
     if (StD11v<75 && StD1pr1v<75 && StD11v<StD1pr1v){Stx1TF3y=0;Stx1TF3x=0;}
 
     OSH1=iOsMA(NULL,TF1,W,H,C,PRICE_CLOSE,0);
     OSH4=iOsMA(NULL,TF2,W,H,C,PRICE_CLOSE,0);
     OSD1=iOsMA(NULL,TF3,W,H,C,PRICE_CLOSE,0);
          
     if (OSH1<-OS){OSTF1x=O;OSTF1y=0;}
     if (OSH1>OS) {OSTF1x=0;OSTF1y=O;}
     if (OSH4<-OS){OSTF2x=O;OSTF2y=0;}
     if (OSH4>OS) {OSTF2x=0;OSTF2y=O;}
     if (OSD1<-OS){OSTF3x=O;OSTF3y=0;}
     if (OSD1>OS) {OSTF3x=0;OSTF3y=O;}
 
   double sigyH1=iLowest (NULL,TF1,MODE_CLOSE,3,0);
   double sigyH4=iLowest (NULL,TF2,MODE_CLOSE,3,0);
   double sigyD1=iLowest (NULL,TF2,MODE_CLOSE,3,0);
   double sigxH1=iHighest(NULL,TF1,MODE_CLOSE,3,0);
   double sigxH4=iHighest(NULL,TF2,MODE_CLOSE,3,0);
   double sigxD1=iHighest(NULL,TF3,MODE_CLOSE,3,0);

   if (sigyH1==1){SigYTF1=I;SigXTF1=0;}
   if (sigyH4==1){SigYTF2=I;SigXTF2=0;}
   if (sigyD1==1){SigYTF3=I;SigXTF3=0;}
   if (sigxH1==1){SigYTF1=0;SigXTF1=I;}
   if (sigxH4==1){SigYTF2=0;SigXTF2=I;}
   if (sigxD1==1){SigYTF3=0;SigXTF3=I;}
 
   double Gator1H1=iAlligator(NULL,TF1,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED,MODE_GATORJAW,0);
   double Gator1H4=iAlligator(NULL,TF2,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED,MODE_GATORJAW,0);
   double Gator1D1=iAlligator(NULL,TF3,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED,MODE_GATORJAW,0);
   
   double Gator2H1=iAlligator(NULL,TF1,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED,MODE_GATORTEETH,0);
   double Gator2H4=iAlligator(NULL,TF2,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED,MODE_GATORTEETH,0);
   double Gator2D1=iAlligator(NULL,TF3,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED,MODE_GATORTEETH,0);
   
   double Gator3H1=iAlligator(NULL,TF1,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED,MODE_GATORLIPS,0);
   double Gator3H4=iAlligator(NULL,TF2,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED,MODE_GATORLIPS,0);
   double Gator3D1=iAlligator(NULL,TF3,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED,MODE_GATORLIPS,0);
    
     if (Gator3H1>Gator1H1+shirina){GatorX1=G;GatorY1=0;}                
     if (Gator3H4>Gator1H4+shirina){GatorX2=G;GatorY2=0;}
     if (Gator3D1>Gator1D1+shirina){GatorX3=G;GatorY3=0;}
         
     if (Gator1H1>Gator3H1+shirina){GatorX1=0;GatorY1=G;} 
     if (Gator1H4>Gator3H4+shirina){GatorX2=0;GatorY2=G;}
     if (Gator1D1>Gator3D1+shirina){GatorX3=0;GatorY3=G;} 
 
   double MACD1H1=iMACD(NULL,TF1,F_EMA,S_EMA,SMA,PRICE_WEIGHTED,MODE_MAIN,0);
   double MACD1H4=iMACD(NULL,TF2,F_EMA,S_EMA,SMA,PRICE_WEIGHTED,MODE_MAIN,0);
   double MACD1D1=iMACD(NULL,TF3,F_EMA,S_EMA,SMA,PRICE_WEIGHTED,MODE_MAIN,0);
  
   double MACD2H1=iMACD(NULL,TF1,F_EMA,S_EMA,SMA,PRICE_WEIGHTED,MODE_SIGNAL,0);
   double MACD2H4=iMACD(NULL,TF2,F_EMA,S_EMA,SMA,PRICE_WEIGHTED,MODE_SIGNAL,0);
   double MACD2D1=iMACD(NULL,TF3,F_EMA,S_EMA,SMA,PRICE_WEIGHTED,MODE_SIGNAL,0);
  
   double MACD3H1=iMACD(NULL,TF1,S_EMA*2,F_EMA*2,SMA*2,PRICE_WEIGHTED,MODE_MAIN,0);
   double MACD3H4=iMACD(NULL,TF2,S_EMA*2,F_EMA*2,SMA*2,PRICE_WEIGHTED,MODE_MAIN,0);
   double MACD3D1=iMACD(NULL,TF3,S_EMA*2,F_EMA*2,SMA*2,PRICE_WEIGHTED,MODE_MAIN,0);
   
   double MACD4H1=iMACD(NULL,TF1,S_EMA*2,F_EMA*2,SMA*2,PRICE_WEIGHTED,MODE_SIGNAL,0);
   double MACD4H4=iMACD(NULL,TF2,S_EMA*2,F_EMA*2,SMA*2,PRICE_WEIGHTED,MODE_SIGNAL,0);
   double MACD4D1=iMACD(NULL,TF3,S_EMA*2,F_EMA*2,SMA*2,PRICE_WEIGHTED,MODE_SIGNAL,0);
   
     if((MACD1H1<MACD2H1)&&(MACD2H1>0)&&(MACD3H1<MACD4H1)&&(MACD4H1>0)){MACDy1=M;MACDx1=0;}
     if((MACD1H4<MACD2H4)&&(MACD2H4>0)&&(MACD3H4<MACD4H4)&&(MACD4H4>0)){MACDy2=M;MACDx2=0;}
     if((MACD1D1<MACD2D1)&&(MACD2D1>0)&&(MACD3D1<MACD4D1)&&(MACD4D1>0)){MACDy3=M;MACDx3=0;}
      
     if((MACD1H1>MACD2H1)&&(MACD2H1<0)&&(MACD3H1>MACD4H1)&&(MACD4H1<0)){MACDy1=0;MACDx1=M;}
     if((MACD1H4>MACD2H4)&&(MACD2H4<0)&&(MACD3H4>MACD4H4)&&(MACD4H4<0)){MACDy2=0;MACDx2=M;}
     if((MACD1D1>MACD2D1)&&(MACD2D1<0)&&(MACD3D1>MACD4D1)&&(MACD4D1<0)){MACDy3=0;MACDx3=M;}
 
   double CCIH1=iCCI(NULL,TF1,CCI,PRICE_CLOSE,0);
   double CCIH4=iCCI(NULL,TF1,CCI,PRICE_CLOSE,0);
   double CCID1=iCCI(NULL,TF1,CCI,PRICE_CLOSE,0);
     
     if(CCIH1>120){CCIx1=CC;CCIy1=0;}
     if(CCIH4>120){CCIx2=CC;CCIy2=0;}
     if(CCID1>120){CCIx3=CC;CCIy3=0;}
     
     if(CCIH1<-120){CCIx1=0;CCIy1=CC;}
     if(CCIH4<-120){CCIx2=0;CCIy2=CC;}
     if(CCID1<-120){CCIx3=0;CCIy3=CC;}

И вычисляем-

   double resultz1 = (Stx1TF1x + Stx1TF2x + Stx1TF3x + OSTF1x + OSTF2x + OSTF3x + SigXTF1 + SigXTF2 + SigXTF3 + GatorX1 + GatorX2 + GatorX3 + MACDx1 + MACDx2 + MACDx3 + CCIx1 + CCIx2 + CCIx3) * 5.5555555555555555555555555555556;

   double resultz2 = (Stx1TF1y + Stx1TF2y + Stx1TF3y + OSTF1y + OSTF2y + OSTF3y + SigYTF1 + SigYTF2 + SigYTF3 + GatorY1 + GatorY2 + GatorY3 + MACDy1 + MACDy2 + MACDy3 + CCIy1 + CCIy2 + CCIy3) * 5.5555555555555555555555555555556;

     if (resultz1<Skill && resultz2<Skill) {Signal=0; Comment("КУРИМ");}

     if (resultz1>Skill)  {Signal=1; Comment("Неплохо бы BUY");}
     if (resultz2>Skill)  {Signal=-1;Comment("Неплохо бы SELL");}
     
     if (resultz1>SkillMAX)  {Signal=2; Comment("АФИГЕННО BUY");}
     if (resultz1>SkillMAX)  {Signal=-2; Comment("ФАИГЕННО SELL");}
 
Вот в таком формате нужен индикатор... Да, не забываем про автооптимизацию десятка параметров...Тоже проблема...
 

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

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

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