Вопрос к знатокам mql4 и mql5 - страница 2

 
ivanivan_11:
остальные тоже не поймут,пока вы наконец не скопируете ошибки сюда, или пока не дождетесь, что вам переделают индикатор,если вы этого добиваетесь))

За переделовку я был бы благодарен. Но мне больше нравится бы если помогили бы самому это сделать. Каждый раз просить не вариант

 
Stanislav Korotky:
Гы. Дифайны и инклуды нужно в начале на глобальном уровне вставлять, после property. Сейчас покажу.
Буду благодарен!
 

Вот исправленный исходник с комментариями. В приложении дополненный заголовочный файл MT4Indicators.mqh (я обращал внимание, что он тоже нужен для вызова доп. индикаторов) - добавил туда RSI по примеру MA.

//+------------------------------------------------------------------+
//|                                                      rsiport.mq5 |
//|                              Конвертация индикатора из MT4 в MT5 |
//+------------------------------------------------------------------+

#property version   "1.00"
#property strict
#property indicator_chart_window   
#property indicator_buffers 2
#property indicator_plots 2   // добавил строку
#property indicator_color1 Red    
#property indicator_color2 Blue    

input int RSIperiod = 12; // добавил для порядка

#define MT4_OLD_EVENT_HANDLERS
#include <ind4to5.mqh>
#include <MT4Indicators.mqh> // добавил iRSI сюда по примеру iMA: все прочие индикаторы тоже можно сделать аналогично

double Buffer[];
double Buffer2[];
int j=0;
int a=0;

int init()
{
   
   SetIndexStyle(0, DRAW_ARROW,0,3);
   SetIndexBuffer(0, Buffer);
   SetIndexStyle(1, DRAW_ARROW,0,3);
   SetIndexBuffer(1, Buffer2);
   SetIndexArrow(1,241);
   SetIndexArrow(0,242);
   return(0);
}

int deinit()
{
   return(0);
}

int start()                      
{
   int i, Counted_bars;              
   
   Counted_bars=IndicatorCounted();
   
   i=Bars-Counted_bars-1;
   // далее исправление багов: нужно вычесть RSIperiod и еще 1
   if(i > Bars - RSIperiod - 2) i = Bars - RSIperiod - 2; // нужно -2 потому что в RSI идет обращение к +1 бару, это баг в вашем индюке
   
   while(i>=0)                
   {
    double rsi = iRSI(NULL, 0, RSIperiod, PRICE_CLOSE, i+1);
    if(rsi == EMPTY_VALUE) return -1; // ждем расчета RSI
    
    a=0;

    if(rsi > 70 &&j != 1)
    {
      Buffer[i] = High[i]+5*Point;
      j=1; 
      a=1;     
    }    
    else
    if(rsi < 30 && j != 2)
    {
      Buffer2[i] = Low[i]-5*Point;
      j=2;
      a=2;
    }
    else // MT5 не чистит буфера автоматически, нужно делать вручную
    {
      Buffer[i] = EMPTY_VALUE;
      Buffer2[i] = EMPTY_VALUE;
    }
    
       
    i--;                          
   }
     

   if(a==1)
   {
     Alert(Symbol()," ","DOWN");
     a=0;
   }
     
   if(a==2)
   {
     Alert(Symbol()," ","UP");
     a=0;
   }

   return(0);                        
}

Результат. 


Файлы:
 
Stanislav Korotky:

Вот исправленный исходник с комментариями. В приложении дополненный заголовочный файл MT4Indicators.mqh (я обращал внимание, что он тоже нужен для вызова доп. индикаторов) - добавил туда RSI по примеру MA.

Результат. 



УХ ТЫ! Вот вам спасибо большое)))) ОЧень очень благодарен)))) плюссс)))

 

Прицепил файл которого не хватало. Мало ли кому инфа понадобится 

Файлы:
 
Stanislav Korotky:

Вот исправленный исходник с комментариями. В приложении дополненный заголовочный файл MT4Indicators.mqh (я обращал внимание, что он тоже нужен для вызова доп. индикаторов) - добавил туда RSI по примеру MA.

Результат. 


Отличный конвертер!