Indicator and arrow issues

 
Indicator not showing arrows to indicate when to buy , sell , close buy , close sell . please help
 
Skonk Skunkodus: Indicator not showing arrows
  1. #property indicator_buffers 3
    #property indicator_color1 Blue   // RSI
    #property indicator_color2 Green  // ADX
    #property indicator_color3 Red    // ADX Threshold

    Where do you state what to display (arrow and character numbers? Why are you creating objects instead of using the buffers?

  2.         rsi_buffer[i] = iRSI(NULL, 0, rsi_length, PRICE_CLOSE); // Removed the extra index argument

    Perhaps you should read the manual, especially the examples.
       How To Ask Questions The Smart Way. (2004)
          How To Interpret Answers.
             RTFM and STFW: How To Tell You've Seriously Screwed Up.

    They all (including iCustom) return a handle (an int). You get that in OnInit. In OnTick/OnCalculate/OnStart (after the indicator has updated its buffers), you use the handle, shift and count to get the data.
              Technical Indicators - Reference on algorithmic/automated trading language for MetaTrader 5
              Timeseries and Indicators Access / CopyBuffer - Reference on algorithmic/automated trading language for MetaTrader 5
              How to start with MQL5 - General - MQL5 programming forum - Page 3 #22 (2020)
              How to start with MQL5 - MetaTrader 5 - General - MQL5 programming forum - Page 7 #61 (2020)
              MQL5 for Newbies: Guide to Using Technical Indicators in Expert Advisors - MQL5 Articles (2010)
              How to call indicators in MQL5 - MQL5 Articles (2010)

 

You need to go to the codebase and look at working codes.

 

Hi

This code is not working because it’s coded wrongly.

You don’t use indicator calculations correctly. In mt5 all those functions for indicators iRSI, iADX etc return only handles for indicator values – not values itself. So you need to define those handles in the OnInit for example:

RSI_Handle = iRSI(NULL, 0, rsi_length, PRICE_CLOSE);

And then in OnCalculate use CopyBuffer to get values properly:

rsi_buffer[i]=getRSI(i);

...

double getRSI(int i){

   double res[];

   ResetLastError();

   if(CopyBuffer(RSI_Handle, 0, i,1,res)<0 ){

      Print("Error copying RSI data for buffer - error:"+IntegerToString(GetLastError())+"!!");

      return(0);

   }

   return(norm(res[0]));

}

Have a nice day👍📊

This website uses cookies. Learn more about our Cookies Policy.