Индикаторы: Extremum - страница 4

 
eddy:
Fox_RM:

Вот промежуточный результат ...

кто-нибудь мне объяснит что происходит?:)

fox, если ты соединил 2 екс-а в 1, то почему он отличается от 2х екс2?

или ты сделал от одного всё кроме канала, а от второго тока канал и тяжёлую?

Если не путаю, то в первом окошке мой индикатор где 2 екса натянуты на одну систему координат, на втором ты кинул 2 экса с разными периодами один на другой

и появилась погрешность в их отображении поскольку системы координат у них разные, а в третьем окошке экс автора с гистограмами. Там 2 экса 21 и 89 без гистограммы. Муторно написал, но оно так.

 

Fox_RM писал(а):

Если не путаю, то в первом окошке мой индикатор где 2 екса натянуты на одну систему координат, на втором ты кинул 2 экса с разными периодами один на другой и появилась погрешность в их отображении поскольку системы координат у них разные, а в третьем окошке экс автора с гистограмами. Там 2 экса 21 и 89 без гистограммы. Муторно написал, но оно так.

наоборот.

в первом окне 2 экса (148380 выкладывал: Extremum без гистограмм - Extremum_2) наложеные друг на друга.

во втором твой индюк, породивший вопросы на которые ты не ответил: если в нём ты соединил 2 екс-а, то почему он отличается от 2х екс2? или они отличаются только тем что твой в одной координат. плоскости?

тогда что ты имел ввиду сказав "Добавлю еще столбцы гистограммы"?

и скажи подробней, то что ты соединил? просто 2 "Extremum без гистограмм - Extremum_2" которые выкладывал 148380?

 
eddy:

Fox_RM писал(а):

Если не путаю, то в первом окошке мой индикатор где 2 екса натянуты на одну систему координат, на втором ты кинул 2 экса с разными периодами один на другой и появилась погрешность в их отображении поскольку системы координат у них разные, а в третьем окошке экс автора с гистограмами. Там 2 экса 21 и 89 без гистограммы. Муторно написал, но оно так.

наоборот.

в первом окне 2 экса (148380 выкладывал: Extremum без гистограмм - Extremum_2) наложеные друг на друга.

во втором твой индюк, породивший вопросы на которые ты не ответил: если в нём ты соединил 2 екс-а, то почему он отличается от 2х екс2? или они отличаются только тем что твой в одной координат. плоскости?

тогда что ты имел ввиду сказав "Добавлю еще столбцы гистограммы"?

и скажи подробней, то что ты соединил? просто 2 "Extremum без гистограмм - Extremum_2" которые выкладывал 148380?

Ты все верно понял и правильно меня поправил! Да соединил 2 Экса без гистограмм 2-х периодов 21 и 89. По поводу гистограмм, пока эксперементирую с ними и буду прикручивать их на свой вариант Экса.

 

Fox_RM писал(а):

соединил 2 Экса без гистограмм 2-х периодов

кул. выкладывай с названием 2exs)

 
eddy:

Fox_RM писал(а):

соединил 2 Экса без гистограмм 2-х периодов

кул. выкладывай с названием 2exs)

В ходе многочисленных экспериментов с индикатором, пришел к выводу, что ИНДИКАТОР в доработке не нуждается!)))

Ниже прикладываю код индикатора АО с полосами болинджера (внешне на мой взгляд похоже), этим индюком закончил исследования на тему). АВТОРУ БОЛЬШОЙ РЕСПЕКТ!

//+------------------------------------------------------------------------------------+
//| AO+BB.mq4 |
//| -----------------------------------------------------------------------------------|
//| |
//+------------------------------------------------------------------------------------+


#property copyright " Fox_RM@inbox.ru "
#property link " http://forum.niochem.net/index.php/topic,1310.0.html "

#property indicator_separate_window

#property indicator_buffers 5
#property indicator_color1 Blue
#property indicator_color2 MediumSpringGreen
#property indicator_color3 Red
#property indicator_color4 Red
#property indicator_color5 Black
#property indicator_level1 0


//---- buffers
extern string in1 = " AO Настройки ";
extern int Fast = 2;
extern int Slow = 34;

//---
extern string in2 = " Bollinger Настройки ";
extern int BandsPeriod = 13;
extern int BandsShift = 0;
extern double BandsDeviations = 2.0;
//---

double ExtMapBuffer1[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_HISTOGRAM, STYLE_SOLID);
SetIndexStyle(2,DRAW_HISTOGRAM, STYLE_SOLID);
SetIndexStyle(3,DRAW_HISTOGRAM, STYLE_SOLID);
SetIndexStyle(4,DRAW_HISTOGRAM, STYLE_SOLID);
//----
IndicatorBuffers(5);
//---- indicator lines
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0, ExtMapBuffer1);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2, ExtMapBuffer3);
SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3, ExtMapBuffer4);
SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4, ExtMapBuffer5);
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- main loop
for(int i=0; i<limit; i++){
ExtMapBuffer1[i]=iMA(NULL,0,Fast,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,Slow,0,MODE_SMA,PRICE_MEDIAN,i);
}
for(int k=0; k<limit; k++){
ExtMapBuffer3[k]=iBandsOnArray(ExtMapBuffer1,0,BandsPeriod,BandsDeviations,BandsShift,MODE_UPPER,k);
ExtMapBuffer4[k]=iBandsOnArray(ExtMapBuffer1,0,BandsPeriod,BandsDeviations,BandsShift,MODE_LOWER,k);
}
for(int n=0; n<limit; n++){
ExtMapBuffer5[n]=iMAOnArray(ExtMapBuffer1,0,BandsPeriod,0,0,n);
}


//----
return(0);
}
//+------------------------------------------------------------------+

 

И еще хочется уточнить у читателей. Кто как использует этот индюк в торговле (с чем комбинирует и т.д.) и у кого какие впечатления.

Особенно этот вопрос хочется задать автору. Если интересно могу поделиться своими наработками...

 

Небольшой бонус для всех кто использует Extremum.


Fox_RM писал(а):

В ходе многочисленных экспериментов с индикатором, пришел к выводу, что ИНДИКАТОР в доработке не нуждается!)))


 Fox_RM спасибо за проявленный интерес к индикатору. Однако, с таким выводом - немного поторопился .

Ведь Extremum еще может быть дополнен сигнальной линией (см. рисунок).

При этом интерпретация торговых сигналов будет - аналогично MACD.



//+------------------------------------------------------------------+
//|                                                    Extremum+.mq4 |
//|                                                             Egor |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Egor"
#property link      ""
//---- indicator settings
#property indicator_separate_window
#property  indicator_buffers 8
#property  indicator_color1  Yellow
#property  indicator_color2  Lime
#property  indicator_color3  Lime
#property  indicator_color4  Lime
#property  indicator_color5  Red
#property  indicator_color6  Yellow
#property  indicator_color7  Red
#property  indicator_color8  Magenta
//---- indicator parameters
extern int NBars=20;
//---- indicator buffers
double     MNKBuffer[];
double     MNKBuffer1[];
double     MNKBuffer2[];
double     MNKBuffer3[];
double     MNKBuffer4[]; 
double     MNKBuffer5[];
double     MNKBuffer6[];
double     MNKBuffer7[];
double     MNKBuffer8[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(8);
//---- drawing settings
   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexStyle(1,DRAW_LINE,0,2);
   SetIndexStyle(2,DRAW_HISTOGRAM,0,2);
   SetIndexStyle(3,DRAW_LINE,0,1);
   SetIndexStyle(4,DRAW_LINE,0,2);
   SetIndexStyle(5,DRAW_HISTOGRAM,0,2);
   SetIndexStyle(6,DRAW_HISTOGRAM,0,4);
   SetIndexStyle(7,DRAW_HISTOGRAM,0,2);
   SetIndexDrawBegin(0,NBars);
   SetIndexDrawBegin(1,NBars);
   SetIndexDrawBegin(2,NBars);
   SetIndexDrawBegin(3,NBars);
   SetIndexDrawBegin(4,NBars);
   SetIndexDrawBegin(5,NBars);
   SetIndexDrawBegin(6,NBars);
   SetIndexDrawBegin(7,NBars);
   IndicatorDigits(Digits+4);
//---- indicator buffers mapping
   SetIndexBuffer(0,MNKBuffer);
   SetIndexBuffer(1,MNKBuffer1);
   SetIndexBuffer(2,MNKBuffer2);
   SetIndexBuffer(3,MNKBuffer3);
   SetIndexBuffer(4,MNKBuffer4);
   SetIndexBuffer(5,MNKBuffer5);
   SetIndexBuffer(6,MNKBuffer6);
   SetIndexBuffer(7,MNKBuffer7);
 //---- name for DataWindow and indicator subwindow label
   IndicatorShortName("Extremum+("+NBars+")");
   SetIndexLabel(0,"MNK");
   SetIndexLabel(1,"MNK1");
   SetIndexLabel(2,"MNK2");
   SetIndexLabel(3,"MNK3");
   SetIndexLabel(4,"MNK4");
   SetIndexLabel(5,"MNK5");
   SetIndexLabel(6,"MNK6");
   SetIndexLabel(7,"MNK7");
 //----
   return(0);
  }
//+------------------------------------------------------------------+
//| Extremum+                                                        |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   int    counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//----
    for( int k=0; k<limit; k++)
       { 
    double n=0;
    for(int i=0+k;i<NBars+k; i++) 
      {    
      if(iHigh(NULL,0,k)>iHigh(NULL,0,i) && iHigh(NULL,0,k)-iHigh(NULL,0,i)>n)
        {
      n=iHigh(NULL,0,k)-iHigh(NULL,0,i);  
        }
      }  
    double m=0;
    for( i=0+k;i<NBars+k; i++) 
      {    
      if(iLow(NULL,0,k)<iLow(NULL,0,i) && iLow(NULL,0,k)-iLow(NULL,0,i)<m)
        {
      m= iLow(NULL,0,k)-iLow(NULL,0,i);  
        }
      }
//----------------------------------   
     //Линия гистограммы
       MNKBuffer[k]=n+m;
     //Нижняя линия волатильности
       MNKBuffer1[k]=m-n;
     //Верхняя линия волатильности
       MNKBuffer4[k]=n-m;
     //Гистограмма,экстремум медвежий  
      if((n+m)==(m-n))
       {
       MNKBuffer2[k]=-(n+m)/2;
       }
     //Гистограмма,экстремум бычий
      if((n+m)==(n-m))
       {
       MNKBuffer2[k]=-(n+m)/2;
       }
     //Гистограмма "-"
       if((n+m)<0)
       {
       MNKBuffer5[k]=n+m;
       }
     //Гистограмма "+"  
       if((n+m)>0)
       {
       MNKBuffer7[k]=n+m;
       }
     }
//-------------------------
      //Сигнальная линия       
      for(i=0; i<limit; i++)
      MNKBuffer3[i]=iMAOnArray(MNKBuffer,Bars,9,0,MODE_SMA,i);
 
    return(0);
  }



 

148380 писал(а):

Extremum может быть дополнен сигнальной линией.

вставьте её в Еx. без гист.)

 

Ого, 6 лет никто не писал, а я только увидел этот индюк.
Автору респект, заграбил себе алгоритм.

В качестве благодарности - оптимизировал код: повторные вычисления заменил переменными, ненужные вычисления - константами (к примеру if(n+m==n-m) равносильно if(m=0)), удалил/перенес лишние циклы.
Добавил настройку периода сглаживания сигнала и метод сглаживания 

Стоило бы еще убрать "украшательные" буферы и разгрузить память.

//+------------------------------------------------------------------+
//|                                                   Extremum++.mq4 |
//|                                                       Egor+Pavel |
//+------------------------------------------------------------------+
#property copyright "Egor+Pavel"
#property link      ""
//---- установки индикатора
#property indicator_separate_window
#property  indicator_buffers 8
#property  indicator_color1  Yellow
#property  indicator_color2  Lime
#property  indicator_color3  Lime
#property  indicator_color4  Lime
#property  indicator_color5  Red
#property  indicator_color6  Yellow
#property  indicator_color7  Red
#property  indicator_color8  Magenta
//---- вводные параметры индикатора
extern int NBars=20;
extern int Signal_SMA_Period = 9;// период сглаживания сигнала
extern ENUM_MA_METHOD Signal_SMA_Metod = MODE_SMA;// метод сглаживания сигнала
//---- объявление массивов буферов
double MNKBuffer[],MNKBuffer1[],MNKBuffer2[],MNKBuffer3[],MNKBuffer4[],MNKBuffer5[],MNKBuffer6[],MNKBuffer7[],MNKBuffer8[];

// --- --- --- Функция инициализации индикатора --- --- ---

int init()
  {
   IndicatorBuffers(8);
//---- установки отрисовки
   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexStyle(1,DRAW_LINE,0,2);
   SetIndexStyle(2,DRAW_HISTOGRAM,0,2);
   SetIndexStyle(3,DRAW_LINE,0,1);
   SetIndexStyle(4,DRAW_LINE,0,2);
   SetIndexStyle(5,DRAW_HISTOGRAM,0,2);
   SetIndexStyle(6,DRAW_HISTOGRAM,0,4);
   SetIndexStyle(7,DRAW_HISTOGRAM,0,2);
   SetIndexDrawBegin(0,NBars);
   SetIndexDrawBegin(1,NBars);
   SetIndexDrawBegin(2,NBars);
   SetIndexDrawBegin(3,NBars);
   SetIndexDrawBegin(4,NBars);
   SetIndexDrawBegin(5,NBars);
   SetIndexDrawBegin(6,NBars);
   SetIndexDrawBegin(7,NBars);
   IndicatorDigits(Digits+4);
//---- indicator buffers mapping
   SetIndexBuffer(0,MNKBuffer);
   SetIndexBuffer(1,MNKBuffer1);
   SetIndexBuffer(2,MNKBuffer2);
   SetIndexBuffer(3,MNKBuffer3);
   SetIndexBuffer(4,MNKBuffer4);
   SetIndexBuffer(5,MNKBuffer5);
   SetIndexBuffer(6,MNKBuffer6);
   SetIndexBuffer(7,MNKBuffer7);
 //---- name for DataWindow and indicator subwindow label
   IndicatorShortName("Extremum++("+NBars+")");
   SetIndexLabel(0,"MNK");//MNK0
   SetIndexLabel(1,"Уровень волатильности");//MNK1
   SetIndexLabel(2,"MNK2");//MNK2
   SetIndexLabel(3,"Сигнал");//MNK3
   SetIndexLabel(4,"Уровень волатильности");//MNK4
   SetIndexLabel(5,"MNK5");//MNK5
   SetIndexLabel(6,"MNK6");//MNK6
   SetIndexLabel(7,"MNK7");//MNK7
 //----
   return(0);
  }

//--- --- --- Extremum++ --- --- ---

int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//----
   for( int k=0; k<limit; k++)
   { 
      double Hk=High[k], Lk=Low[k];
      double n=0,m=0;
         //----
         for( int i=k;i<NBars+k; i++) 
         {    
            double Hi=High[i], Li=Low[i];
            double tn=Hk-Hi, tm=Lk-Li;
            if(Hk>Hi && tn>n) n=tn;  
            if(Lk<Li && tm<m) m=tm;        
         }
     // --- --- < Отрисовка графиков > --- ---
       MNKBuffer[k]=n+m;//Линия гистограммы
       MNKBuffer1[k]=m-n;//Нижняя линия волатильности
       MNKBuffer4[k]= -MNKBuffer1[k];//Верхняя линия волатильности
       if(n==0||m==0)MNKBuffer2[k]=-(n+m)/2;//Гистограмма,экстремум медвежий/бычий
       if(MNKBuffer[k]<0)MNKBuffer5[k]=MNKBuffer[k];//Гистограмма "-"
       if(MNKBuffer[k]>0)MNKBuffer7[k]=MNKBuffer[k];//Гистограмма "+"  
     // --- --- --- --- --- --- --- --- ---
     }
//-------------------------
      //Сигнальная линия       
      for(i=0; i<limit; i++)MNKBuffer3[i]=iMAOnArray(MNKBuffer,Bars,Signal_SMA_Period,0,Signal_SMA_Metod,i);
 
    return(0);
  }
//▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
 
))))