how to code "first indicator's data" into your indicator

beee  

let me explain my question that i think is different from others', or not?

1 i wanted to make my indicator shows the parameter tab 

2 in that parameter tab it shows "apply to" option with the drop-down menu offering various ENUM_MA_METHOD including the previous and first indicator's data
similar to the attached pic mt4 ma options


i've searched in the forum and still not finding the sample code that will enable me to do the above for my indicator. and indicators come with mt4 don't include 

the source code that i can use as an example to do so. can someone please give me some sample code for me to solve my problem? 

Keith Watford  

Do not double post!!

I have deleted your duplicate topic.

Ernst Van Der Merwe  
//--- input parameters
input int      MAPeriod=9;
input int      MAShift=0;
input ENUM_MA_METHOD MAMethod=MODE_SMA;
input int      CCIPeriod=14;
input ENUM_APPLIED_PRICE CCIPrice=PRICE_TYPICAL;
input int      RSIPeriod=14;
input ENUM_APPLIED_PRICE RSIPrice=PRICE_CLOSE;
enum APPLY_TO
  {
   APPLY_TO_Close=PRICE_CLOSE,         //Close
   APPLY_TO_Open=PRICE_OPEN,           //Open
   APPLY_TO_High=PRICE_HIGH,           //High
   APPLY_TO_Low=PRICE_LOW,             //Low
   APPLY_TO_Median=PRICE_MEDIAN,       //Median
   APPLY_TO_Typical=PRICE_TYPICAL,     //Typical
   APPLY_TO_Weighted=PRICE_WEIGHTED,   //Weighted
   APPLY_TO_CCI,                       //Commodity Channel Index
   APPLY_TO_RSI                        //Relative Strength Index
  };
input APPLY_TO ApplyTo=APPLY_TO_Close;
//--- indicator buffers
double         MABuffer[];
double         IndBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   string name=StringFormat(" %s(%d)",StringSubstr(EnumToString(MAMethod),5),MAPeriod);
//--- indicator buffers mapping
   SetIndexBuffer(0,MABuffer);
   SetIndexShift(0,MAShift);
   SetIndexLabel(0,name);
   SetIndexDrawBegin(0,MAPeriod);
   SetIndexBuffer(1,IndBuffer);
   string name1=StringFormat("%s",StringSubstr(EnumToString(ApplyTo),9));
   SetIndexLabel(1,name1);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
   if(ApplyTo==APPLY_TO_CCI)
     { 
      name1+=StringFormat("(%d)",CCIPeriod);
      SetIndexLabel(1,name1);
      IndicatorSetInteger(INDICATOR_DIGITS,0);
     }
   if(ApplyTo==APPLY_TO_RSI)
     { 
      name1+=StringFormat("(%d)",RSIPeriod);
      SetIndexLabel(1,name1);
      IndicatorSetInteger(INDICATOR_DIGITS,1);
     }
   IndicatorSetString(INDICATOR_SHORTNAME,name1+name);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int begin=(rates_total!=prev_calculated)?rates_total-prev_calculated-1:0;
//--- apply to CCI
   if(ApplyTo==APPLY_TO_CCI)
     { 
      for(int i=begin;i>=0;i--)
         IndBuffer[i]=iCCI(_Symbol,_Period,CCIPeriod,CCIPrice,i);
      for(int i=begin;i>=0;i--)
         MABuffer[i]=iMAOnArray(IndBuffer,rates_total,MAPeriod,0,MAMethod,i);
     }
//--- apply to RSI
   else if(ApplyTo==APPLY_TO_RSI)
     {
      for(int i=begin;i>=0;i--)
         IndBuffer[i]=iRSI(_Symbol,_Period,RSIPeriod,RSIPrice,i);
      for(int i=begin;i>=0;i--)
         MABuffer[i]=iMAOnArray(IndBuffer,rates_total,MAPeriod,0,MAMethod,i);
     }
//--- apply to price
   else
      for(int i=begin;i>=0;i--)
        { 
         IndBuffer[i]=iMA(_Symbol,_Period,1,0,MODE_SMA,(ENUM_APPLIED_PRICE)ApplyTo,i);
         MABuffer[i]=iMA(_Symbol,_Period,MAPeriod,0,MAMethod,(ENUM_APPLIED_PRICE)ApplyTo,i);
        }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Files:
Apply_To.mq4  5 kb
[Deleted]  
Ernst Van Der Merwe #:
Hi, thank you for sharing your codes. I manage to replicate my manual indicator setup. I have been trying to change the source price in RSI function for the past 3 days with the help of chatgpt but it all fail to show any value.

Chatgpt never recommend me to use iRSIOnArray so I able to use any variable for storing source price i want instead of fixed double.

It was fun journey tho 😂 
William Roeder  
beee:i've searched in the forum and still not finding the sample code that will enable me to do the above for my indicator.
Use the format of OnCalculate as defined in MT5 documentation containing price.
Fernando Carreiro  
@William Roeder #: Use the format of OnCalculate as defined in MT5 documentation containing price.

This is the MQL4 section. It does not support the second format using "price", as defined in the MQL5 documentation.

Fernando Carreiro  
@hundredX #: Hi, thank you for sharing your codes. I manage to replicate my manual indicator setup. I have been trying to change the source price in RSI function for the past 3 days with the help of chatgpt but it all fail to show any value. Chatgpt never recommend me to use iRSIOnArray so I able to use any variable for storing source price i want instead of fixed double. It was fun journey tho 😂 
Please stop using ChatGPT AI to generate MQL code. It produces horrible results. Learn to code it properly yourself.