Кто-то предлагал помощь в тестировании, если идея понравится? (кажется Michel_S ?)

 
Акселератор "под АС". Построен на моем Snake'е, к-рый правит историю, уже обсуждалось и все заметили :). Но почему-то не заметили, что индикаторы (любые, начиная с МА), построенные на Червяке, историю не правят. Зато получаются плавными и "приятными глазу" :). Может это их единственное достоинство?

//+------------+-----------------------------------------------------+
//| v.30.10.06 |                                             ACs.mq4 |
//+------------+                                    "ФИЛЬТРУЙ БАЗАР" |
//|  эскизно                  Bookkeeper, 2006, yuzefovich@gmail.com |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
//----
#property indicator_separate_window
//#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1  Silver
#property indicator_color2  Silver
#property indicator_color3  Silver
#property indicator_color4  Gray
#property indicator_color5  Green
#property indicator_color6  Red
#property indicator_color7  Green
#property indicator_color8  Red
 
//----
extern int    SnakeRange   =4; 
extern int    FilterPeriod =24; 
extern double MartFiltr    =2;
extern int    FastMAPeriod =9; 
extern int    SlowMAPeriod =600; 
//----
double        Axis[];
double        Mart[];
double        Delta1[];
double        Delta2[];
double        Green1[];
double        Red1[];
double        Green2[];
double        Red2[];
//----
string        ThisName;
double        FastMA=0;
//---------------------------------------------------------------------
void deinit()
{
   if(GlobalVariableCheck(ThisName)==true)
      GlobalVariableDel(ThisName);
   Comment("");
   return;
}
//---------------------------------------------------------------------
int init()
{
int    draw_begin=233;
   IndicatorBuffers  (8);
   SetIndexBuffer    (0,Axis);
   SetIndexStyle     (0,DRAW_NONE);
   SetIndexBuffer    (1,Mart);
   SetIndexStyle     (1,DRAW_NONE);
   SetIndexBuffer    (2,Delta1); 
   SetIndexStyle     (2,DRAW_NONE); 
   SetIndexBuffer    (3,Delta2); 
   SetIndexStyle     (3,DRAW_HISTOGRAM);
   SetIndexBuffer    (4,Green1); 
   SetIndexStyle     (4,DRAW_HISTOGRAM);
   SetIndexBuffer    (5,Red1);
   SetIndexStyle     (5,DRAW_HISTOGRAM);
   SetIndexBuffer    (6,Green2);
   SetIndexStyle     (6,DRAW_HISTOGRAM, EMPTY, 2);
   SetIndexBuffer    (7,Red2);
   SetIndexStyle     (7,DRAW_HISTOGRAM, EMPTY, 2);
//----
   SetIndexEmptyValue(4,0.0);
   SetIndexEmptyValue(5,0.0);
   SetIndexEmptyValue(6,0.0);
   SetIndexEmptyValue(7,0.0);
//----
   SetIndexLabel     (0,NULL);
   SetIndexLabel     (1,NULL);
   SetIndexLabel     (2,NULL);
//   SetIndexLabel     (3,NULL);
   SetIndexLabel     (4,NULL);
   SetIndexLabel     (5,NULL);
   SetIndexLabel     (6,NULL);
   SetIndexLabel     (7,NULL);
//----
   SetIndexDrawBegin (0,SnakeRange+1);
   SetIndexDrawBegin (1,SnakeRange+FilterPeriod+1);
   SetIndexDrawBegin (2,draw_begin);
   SetIndexDrawBegin (3,draw_begin);
   SetIndexDrawBegin (4,draw_begin);
   SetIndexDrawBegin (5,draw_begin);
   SetIndexDrawBegin (6,draw_begin);
   SetIndexDrawBegin (7,draw_begin);
   ThisName=Symbol()+"_M"+Period()+"_ACs";
   return(0);
}
//---------------------------------------------------------------------
int start()
{
int counted_bars=IndicatorCounted();
int limit,i,j;
double v, vp;
   if(counted_bars<0)  return(-1);
   if(SnakeRange<4) SnakeRange=4;
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   for(i=limit;i>=0;i--) 
   {
      if((Bars-i)>(SnakeRange+1)) MartAxis(i);
      else Axis[i]=0;
      if((Bars-i)>(FilterPeriod+SnakeRange+2))
         SmoothOverMart(i);
      else Mart[i]=0;
      if((Bars-i)>(SlowMAPeriod+FilterPeriod+SnakeRange+3))
         CalcDelta1(i);
      else Delta1[i]=0;
      if((Bars-i)>(FastMAPeriod+SlowMAPeriod+FilterPeriod+SnakeRange+4))
      {
         CalcSignals(i);
      }
      else
      { 
         Delta2[i]=0;
         Green1[i]=0;
         Green2[i]=0;
         Red1[i]=0;
         Red2[i]=0;
      }
   }
   return(0);
}
//---------------------------------------------------------------------
void MartAxis(int Pos)
{  
int    SnakeWeight, i, w, ww, Shift;
double SnakeSum;
   Axis[Pos]=iMA(NULL,0,SnakeRange+1,0,MODE_LWMA,PRICE_WEIGHTED,Pos);
   for(Shift=Pos+SnakeRange+2;Shift>Pos;Shift--)
   {
      SnakeSum=0.0;
      SnakeWeight=0;
      i=0;
      w=Shift+SnakeRange;
      ww=Shift-SnakeRange;
      if(ww<Pos) ww=Pos;
      while(w>=Shift)
      {
         i++;
         SnakeSum=SnakeSum+i*SnakePrice(w);
         SnakeWeight=SnakeWeight+i;
         w--;
      }
      while(w>=ww)
      {
         i--;
         SnakeSum=SnakeSum+i*SnakePrice(w);
         SnakeWeight=SnakeWeight+i;
         w--;
      }
      Axis[Shift]=SnakeSum/SnakeWeight;
   }
   return;
}
//----
double SnakePrice(int Shift)
{
   return((2*Close[Shift]+High[Shift]+Low[Shift])/4);
}
//---------------------------------------------------------------------
void SmoothOverMart(int Pos)
{
int    Shift;
double a, t, b;
   for(Shift=Pos+SnakeRange+2;Shift>=Pos;Shift--)
   {
      t=Axis[ArrayMaximum(Axis,FilterPeriod,Shift)];
      b=Axis[ArrayMinimum(Axis,FilterPeriod,Shift)];
      a=Axis[Shift];
      Mart[Shift]=(2*(2+MartFiltr)*a-(t+b))/2/(1+MartFiltr);
   }
   return;
}
//---------------------------------------------------------------------
void CalcDelta1(int Pos)
{
int    i, w=1, sw=0;
double SlowMA=0;
   FastMA=0;
   for(i=Pos+SlowMAPeriod-1;i>=Pos;i--) 
   {
      SlowMA=SlowMA+Axis[i];
      if(i<(Pos+FastMAPeriod)) 
      { 
         FastMA=FastMA+w*Mart[i];
         sw=sw+w; w++;
      }
   }
   SlowMA=SlowMA/SlowMAPeriod;
   FastMA=FastMA/sw;
   Delta1[Pos]=FastMA-SlowMA;
   return;
}
//---------------------------------------------------------------------
void CalcSignals(int Pos)
{
int i, j, sj=0;
double MADelta=0, gACs;
   for(i=Pos+FastMAPeriod-1;i>=Pos;i--)  MADelta=MADelta+Delta1[i];
   Delta2[Pos]=(Delta1[Pos]-MADelta/FastMAPeriod)/Point;
   gACs=0;
   if(Mart[Pos]>FastMA && 
      (Delta2[Pos]>0 || (Delta2[Pos]<0 && Delta2[Pos]>Delta2[Pos+1]))
     )
   {
      if(Delta2[Pos]>Delta2[Pos+1])
      {
         Green1[Pos]=0;
         Green2[Pos]=Delta2[Pos];
         if (Pos==0) gACs=2;
      }
      else
      {
         Green1[Pos]=Delta2[Pos];
         Green2[Pos]=0;
         if (Pos==0) gACs=1;
      }
      Red1[Pos]=0;
      Red2[Pos]=0;
   }
   else
   {
      if(Mart[Pos]<FastMA && 
         (Delta2[Pos]<0 || (Delta2[Pos]>0 && Delta2[Pos]<Delta2[Pos+1]))
        )
      {
         if(Delta2[Pos]<Delta2[Pos+1])
         {
            Red1[Pos]=0;
            Red2[Pos]=Delta2[Pos];
            if (Pos==0) gACs=-2;
         }
         else
         {
            Red1[Pos]=Delta2[Pos];
            Red2[Pos]=0;
            if (Pos==0) gACs=-1;
         }
         Green1[Pos]=0;
         Green2[Pos]=0;
      }
      else
      {
         Green1[Pos]=0;
         Red1[Pos]=0;
         Green2[Pos]=0;
         Red2[Pos]=0;
      }
   }
   if (Pos==0) GlobalVariableSet(ThisName,gACs);
   return;
}
//---------------------------------------------------------------------

Сам до тестирования еще не добрался. У меня это медленно... всякое новое.
Параметры (экстерны) под USDCHF H4.








 
Несколько дней меня не будет.

Если индюк кого-нибудь заинтересует - была идея по "глобализации" по четырем ТФ: ТФ Н4 - основное направление, ТФ М5 - только для подтверждения входа, на Н1 - раскраска только при совпадении с Н4.
ТФ М5+М15+Н1 - точка входа при совпадении. (ТФ М15 - собственно торговля, чтение глобальных, открытие, удержание... слив... :).
Выход по ТФ Н1.

В дальнейшем должен будет добавлен индикатор перекупленности/перепроданности, откуда плясать или нет. Сейчас пробую RSI, затем Болинджер, ...
 
2 Bookkeeper
Было бы очень любопытно погонять Боллинжера по снэйку и МАСД. .
если не сложно можно ли их забацать... делаю нечто подобное. . правда в "Енсинге" от мт4 отошел немного пока месть.. .
жаль заметил снэйка неделю назад..
 
Yur4ik:
Было бы очень любопытно погонять Боллинжера по снэйку и МАСД. .
если не сложно можно ли их забацать... делаю нечто подобное. . в правда в "Енсинге" от мт4 отошел немного пока месть. ..
жаль заметил снэйка неделю назад..

Что значит по снэйку? Поподробней пожалуйста.