Уважаемые программисты помогите перенести алгоритм индикатора на алгоритм советника!!! - страница 2

 
Vinin:

Если limit меньше двух то последний цикл работать не будет, точнее будет работать только на истории. У Вас limit равен 1 или 2. Все время пересчитываете один бар

А по другому вылезает за пределы массива. Он же и должен на истории работать, "фрактал" как-никак, на 3-м баре в прошлом появляется...
 
evillive:

А по другому вылезает за пределы массива. Он же и должен на истории работать, "фрактал" как-никак, на 3-м баре в прошлом появляется...

//+------------------------------------------------------------------+
//|                                                  Custom MACD.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Yellow
#property  indicator_color2  Red
#property  indicator_color3  Blue
#property  indicator_width1  1
#property  indicator_width2  1
#property  indicator_width3  1
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double     MacdBuffer[];
double     F_upper[];
double     F_lower[];
extern double delta=0.0001;

int m=0,n;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexStyle(2,DRAW_ARROW);

   SetIndexEmptyValue(1,EMPTY_VALUE);
   SetIndexEmptyValue(2,EMPTY_VALUE);

//---- indicator buffers mapping
   SetIndexBuffer(0,MacdBuffer);
   SetIndexBuffer(1,F_upper);
   SetIndexBuffer(2,F_lower);
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit; int Fractal;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;

   for(int i=0; i<limit; i++)
     {
      F_upper[i+2]=EMPTY_VALUE;
      F_lower[i+2]=EMPTY_VALUE;
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

      if(ArrayMaximum(MacdBuffer,5,i)==i+2 && MacdBuffer[i+2]>delta)
         F_upper[i+2]=0;

      if(ArrayMinimum(MacdBuffer,5,i)==i+2 && MacdBuffer[i+2]<-1.0*delta)
         F_lower[i+2]=0;

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


Билд 551:

2013.12.01 05:20:54.880 array out of range in 'MACD_TIY.v1.05(Vinin).mq4' (60,14)

Но за ArrayMaximum спасибо, буду знать )

 
evillive:

Билд 551:

2013.12.01 05:20:54.880 array out of range in 'MACD_TIY.v1.05(Vinin).mq4' (60,14)

Но за ArrayMaximum спасибо, буду знать )



Хотя лучше этот вариант

//+------------------------------------------------------------------+
//|                                                  Custom MACD.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Yellow
#property  indicator_color2  Red
#property  indicator_color3  Blue
#property  indicator_width1  1
#property  indicator_width2  1
#property  indicator_width3  1
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double     MacdBuffer[];
double     F_upper[];
double     F_lower[];
extern double delta=0.0001;

int m=0,n;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexStyle(2,DRAW_ARROW);

   SetIndexEmptyValue(1,EMPTY_VALUE);
   SetIndexEmptyValue(2,EMPTY_VALUE);

//---- indicator buffers mapping
   SetIndexBuffer(0,MacdBuffer);
   SetIndexBuffer(1,F_upper);
   SetIndexBuffer(2,F_lower);
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit; int Fractal;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
   if (limit>2) limit-=5;

   for(int i=0; i<limit; i++) {
      F_upper[i+2]=EMPTY_VALUE;
      F_lower[i+2]=EMPTY_VALUE;
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
   
   
   }

   for(i=0; i<limit; i++)
     {

      if(ArrayMaximum(MacdBuffer,5,i)==i+2 && MacdBuffer[i+2]>delta)
         F_upper[i+2]=MacdBuffer[i+2];

      if(ArrayMinimum(MacdBuffer,5,i)==i+2 && MacdBuffer[i+2]<-1.0*delta)
         F_lower[i+2]=MacdBuffer[i+2];

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


Хотя лучше этот вариант


Ну да, вторым циклом явно лучше )


Осталось дождаться ответа автора про торговлю таким индикатором и какая роль у той дельты что в оригинальном индикаторе считается да как она выглядеть должна...

 

Ну ёлы-палы, смотрю справочник с нового метаедитора и не могу понять, а оно вот оно чё...


старый новый
int ArrayMaximum(double array[], int count=WHOLE_ARRAY, int start=0)

int  ArrayMaximum( const void&   array[],  int  start=0,  int count=WHOLE_ARRAY);

 
evillive:

Ну ёлы-палы, смотрю справочник с нового метаедитора и не могу понять, а оно вот оно чё...

Интересно, зачем это они местами поменяли два параметра. Теперь же нужно всё переделать, где есть поиск по этим функциям. Странно.
 
Нет, там ошибка в новом справочнике. Работает всё по старому образцу.
 
evillive:
Нет, там ошибка в новом справочнике. Работает всё по старому образцу.
Уже определил и написал им
 
Roman.:

Уважаемый доктор, создание ников с "точкой" внутри запрещено правилами форума.

Спасибо но форум сам дал мне разрешения зарегистрироваться...
Причина обращения: