Индикаторы: Эксперимент - страница 2

 

Пока добился только такого результата... но пока не выкладываю.. думаю что могу и лучше)


 
Кстати.. чем выше ТФ, тем лучше результат)) дневки вообще просто супер))
 

Любопытный и простой индюк +10, но в коде автор ты конечно переборщил :)

смотри сам:

if(buf0[i+1]>Close[i+1]) buf0[i]=buf0[i+1]-(High[i+1]-(High[i+1]-(High[i+1]-Low[i+1])/2))/2;

зачем стока вычислений лишних :) расшифрую например:

x=(High[i+1]-Low[i+1])/2 //получили половину бара
y=High[i+1]-x //получили цену центра бара
z=(High[i+1]-y)/2 //получили четверть бара
buf0[i]=buf0[i+1]-z //вычли четверть бара

так вот зачем лишний расчёт четверти бара? вот так думаю будет проще :)

buf0[i]=buf0[i+1]-(High[i+1]-Low[i+1])/4;

ну и так несколько раз в коде.

 
кстати делитель можно вынести во внешнюю переменную, получится что то вроде чувствительности индюка.
 
Korwin:

Пока добился только такого результата... но пока не выкладываю.. думаю что могу и лучше)


гораздо реалистичнее - а выложить стоит - хотябы чтобы на реале тестить - на истории то мы все "зигзаги удачи"
 
alexhammer:

так вот зачем лишний расчёт четверти бара? вот так думаю будет проще :)

buf0[i]=buf0[i+1]-(High[i+1]-Low[i+1])/4;

ну и так несколько раз в коде.

благодарю) я чет в логику вдарился.. не подумал об упрощении)
 
в версии 002 опять отрисовывает от максимумов -фантастик
 
YOUNGA:
в версии 002 опять отрисовывает от максимумов -фантастик

если рисовать от какой-то другой точки.. то и картина будет совершенно другая, ибо это есть точка отсчета... изначально данная идея была задумана, для реализации трала

да и потом какая разница, нарисовался этот хвост или нет..

 

Автор! немного не правильный код, я сразу как то не обратил внимание.

Вы заполняете при инициализации буфера нулями SetIndexEmptyValue(0,0), этого не надо делать, буфера при создании автоматически заполняются пустыми значениями EMPTY_VALUE, что равно числу 0x7FFFFFFF (в коде можно так и писать EMPTY_VALUE,это константа). Так вот, при прорисовке индикатора, если встречаются эти значения, они просто пропускаются и в этом месте ничего не рисуется. А если будут нули, то они как раз и нарисуются!. Тоесть уберите строки SetIndexEmptyValue(0,0), и в коде записывайте в буфер не нули, а EMPTY_VALUE.

Должно получиться примерно так:

#property  indicator_chart_window
#property  indicator_buffers 2
#property  indicator_color1  Red
#property  indicator_color2  Green
extern int divisor=6;
double buf0[], buf1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {   
   SetIndexBuffer(0,buf0); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(1,buf1); SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int CB=IndicatorCounted();
   if (CB>0) CB--;
   int limit=Bars-CB;
   for(int i=limit; i>=0; i--)
      {
       if(buf0[i+1]==EMPTY_VALUE && buf1[i+1]==EMPTY_VALUE)
         {
          if(Close[i+1]>Open[i+1]) buf1[i+1]=Low[i+1];
          if(Close[i+1]<Open[i+1]) buf0[i+1]=High[i+1];
         }
       if(buf0[i+1]!=EMPTY_VALUE)
         {
         if(buf0[i+1]>Close[i+1]) buf0[i]=buf0[i+1]-(High[i+1]-Low[i+1])/divisor;
          else 
            {
             buf0[i]=EMPTY_VALUE;
             buf1[i+1]=Low[i+1];
             buf1[i]=buf1[i+1]+(High[i+1]-Low[i+1])/divisor;
            }
         }
       if(buf1[i+1]!=EMPTY_VALUE) 
         {
          if(buf1[i+1]<Close[i+1]) buf1[i]=buf1[i+1]+(High[i+1]-Low[i+1])/divisor;
          else
            {
             buf1[i]=EMPTY_VALUE;
             buf0[i+1]=High[i+1];
             buf0[i]=buf0[i+1]-(High[i+1]-Low[i+1])/divisor;
            }
         }
      }
   return(0);
  }
 
alexhammer:

   if (CB>0) CB--;

извините.. а зачем это?
Причина обращения: