Is the compiler throwing any errors or warnings? Once you turn on property strict your code will need to be squeaky clean. Errors that used to slip past the compiler will no longer do so
I haven't been through all of your code but one thing that stands out is you set
#property indicator_buffers 1
But then in your Init you attempt to assign 4 indicator buffers
Is the compiler throwing any errors or warnings? Once you turn on property strict your code will need to be squeaky clean. Errors that used to slip past the compiler will no longer do so
I haven't been through all of your code but one thing that stands out is you set
But then in your Init you attempt to assign 4 indicator buffers
- When I compile the code it give me Zero Errors which mean that my error is logical.
- When I increase number of buffers from 1 to 4 I got this:
I don't understand as the indicator should look like this:
If all you want is that red PZO line, then you can leave the buffers at 1 and change line 99 from
for( i=0; i<limit;i++)
to
for( i=0; i<limit-1;i++)
But if you want the other 3 indicator buffers in there to print (R, CP & TC), you need to have a harder look at your code as there are bugs in there that need to be fixed.
With that one change, PZO line prints fine:
If all you want is that red PZO line, then you can leave the buffers at 1 and change line 99 from
to
But if you want the other 3 indicator buffers in there to print (R, CP & TC), you need to have a harder look at your code as there are bugs in there that need to be fixed.
With that one change, PZO line prints fine:
I tried your solution for this problem and it worked good on recent data, but when I returned back on the chart (click Home button) it seems that the indicator give incorrect results.
Subtracting -1 from limit variable didn't give a compete answer to the problem. please look to the screenshot below:
I tried your solution for this problem and it worked good on recent data, but when I returned back on the chart (click Home button) it seems that the indicator give incorrect results.
Subtracting -1 from limit variable didn't give a compete answer to the problem. please look to the screenshot below:
I hope some pro could help me to fix this logical error.
//+------------------------------------------------------------------+ //| PZO__.mq4 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_separate_window #property indicator_minimum -100 #property indicator_maximum 100 #property indicator_buffers 1 #property indicator_plots 1 //--- plot PZO_Line #property indicator_label1 "PZO" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 2 //---plot indicator levels #property indicator_level1 -60 #property indicator_level2 -40 #property indicator_level3 0 #property indicator_level4 40 #property indicator_level5 60 //--- input parameters input int BARS=14; //--- indicator buffers double PZO[];//---Price Zone Oscillator double R[]; //---Close Refrence double CP[]; //---Closing Postions double TC[]; //---Total Close //--- right input parameters flag bool ExtParameters=false; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping IndicatorBuffers(4); SetIndexBuffer(0,PZO); SetIndexBuffer(1,R); SetIndexBuffer(2,CP); SetIndexBuffer(3,TC); //----indicator style SetIndexStyle(0,DRAW_LINE); //----Data window & Index Label IndicatorShortName("PZO("+IntegerToString(BARS)+")"); SetIndexLabel(0,"PZO("+IntegerToString(BARS)+")"); //----indicator begin & digit number used at calculation SetIndexDrawBegin(0,BARS); IndicatorDigits(Digits-1); //--- check for input parameters if(BARS<=0 ) { Print("Wrong input parameters"); ExtParameters=false; return(INIT_FAILED); } else ExtParameters=true; //--- initialization done return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Prics Zone Oscillator - PZO 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[]) { RefreshRates(); //--- if(rates_total<=BARS || !ExtParameters) return(0); //--- last counted bar will be recounted int i, limit = rates_total-prev_calculated; if(prev_calculated > 0) limit ++; //--- if(limit == rates_total) limit = rates_total-1; //---- main loop //----R for( i=0; i<limit;i++) { if(close[i]>close[i+1]) R[i]=close[i]; else R[i]= -1*close[i]; } //----CP for( i=0; i<limit;i++) { CP[i]=iMAOnArray(R,Bars,BARS,0,MODE_EMA,i); } //----TC for( i=0; i<limit;i++) { TC[i]=iMA(NULL,0,BARS,0,MODE_EMA,0,i); } //----PZO for( i=0; i<limit;i++) { PZO[i]=100*(CP[i]/TC[i]); } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Sorry, I tried your solution but it didn't help, But I have worked this morning on solving the problem by cutting the code into pieces then studding it step by step. I hope to find the problem.
That is what is written about iMAOnArray in MQL4 Help:
The indicator is calculated from left to right. To access to the array elements as to a series array (i.e., from right to left), one has to use the ArraySetAsSeries() function.
I hope some body to help me in this.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hello my friends,
I've an indicator that I wrote several years ago with MT4. I want to update my indicator to the new MQL4 Compiler. I already wrote the new code but I've on problem. When I add #property strict the indicator vanish but when I delete it the indicator appears.
Here is the code & I hope any pro here could help me.