Hi
I am a developer who comes from a Java-background. Therefore I have a hard time understanding Array handling in MQL.
Lets say I want to make an Indicator, in the calculation of the "current value", I need to know lets say the squareroot of some "earlier values", therefore I want an array with squareroots of every value (every bar). Here is the problem, because I don't want to show the squareroot value in the chart. Therefore the array is not a "buffer" and it therefore wont automatically push backwards on every new period/timeframe (I mean that value[i] wont become value[i+1], so that index 0 is the most recent point). How do I achieve this? I hope you understood the question, feel free to comment...
Thanks in advance.
Hi sigvardsen
I suggest you look at the ZigZag indicator that comes with MT4 for an example of what you want to do.
This property sets the number of visible indicator buffers
#property indicator_buffers 1
but later, in init(), the function SetIndexBuffer() is used three times to assign arrays to inidcator buffers. The first one is drawn, extra ones are not.
SetIndexBuffer(0,ZigzagBuffer); SetIndexBuffer(1,HighMapBuffer); SetIndexBuffer(2,LowMapBuffer);
You would use such additional indicator buffers for your intermediate calculations.
Hope this helps.
Cheers
Jellybean
Hi sigvardsen
I suggest you look at the ZigZag indicator that comes with MT4 for an example of what you want to do.
This property sets the number of visible indicator buffers
but later, in init(), the function SetIndexBuffer() is used three times to assign arrays to inidcator buffers. The first one is drawn, extra ones are not.
You would use such additional indicator buffers for your intermediate calculations.
Hope this helps.
Cheers
Jellybean
Thank you for the reply, I have examined the ZigZag indicator. But I don't understand why the following indicator doesn't show any graph:
#property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red //---- buffers double p[]; double q[]; int init() { SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0, p); SetIndexBuffer(1, q); return(0); } int deinit() { return(0); } int start() { int limit = Bars - IndicatorCounted(); int i; for (i = limit; i >= 0; i--) { q[i] = Close[i] * 2; p[i] = q[i]; } return(0); }
Hi
I am a developer who comes from a Java-background. Therefore I have a hard time understanding Array handling in MQL.
Lets say I want to make an Indicator, in the calculation of the "current value", I need to know lets say the squareroot of some "earlier values", therefore I want an array with squareroots of every value (every bar). Here is the problem, because I don't want to show the squareroot value in the chart. Therefore the array is not a "buffer" and it therefore wont automatically push backwards on every new period/timeframe (I mean that value[i] wont become value[i+1], so that index 0 is the most recent point). How do I achieve this? I hope you understood the question, feel free to comment...
Thanks in advance.
From the Article "Transferring an Indicator Code into an Expert Advisor Code, Indicator Structure"
//---- INDICATOR BUFFERS EMULATION
int NewSize = iBars(symbol, timeframe);
//---- Checking the change of the zero bar
if(ArraySize(Ind_Buffer0) < NewSize)
{
//---- Set the direct indexing direction in the array
ArraySetAsSeries(Ind_Buffer0, false);
ArraySetAsSeries(Ind_Buffer1, false);
ArraySetAsSeries(Ind_Buffer2, false);
//---- Change the size of the emulated indicator buffers
ArrayResize(Ind_Buffer0, NewSize);
ArrayResize(Ind_Buffer1, NewSize);
ArrayResize(Ind_Buffer2, NewSize);
//---- Set the reverse indexing direction in the array
ArraySetAsSeries(Ind_Buffer0, true);
ArraySetAsSeries(Ind_Buffer1, true);
ArraySetAsSeries(Ind_Buffer2, true); } //----
Thank you for the reply, I have examined the ZigZag indicator. But I don't understand why the following indicator doesn't show any graph:
Try added "IndicatorBuffers":
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- buffers
double p[];
double q[];
int init()
{
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0, p);
SetIndexBuffer(1, q);
return(0);
}
int deinit()
{
return(0);
}
int start()
{
int limit = Bars - IndicatorCounted();
int i;
for (i = limit; i >= 0; i--)
{
q[i] = Close[i] * 2;
p[i] = q[i];
}
return(0);
}
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi
I am a developer who comes from a Java-background. Therefore I have a hard time understanding Array handling in MQL.
Lets say I want to make an Indicator, in the calculation of the "current value", I need to know lets say the squareroot of some "earlier values", therefore I want an array with squareroots of every value (every bar). Here is the problem, because I don't want to show the squareroot value in the chart. Therefore the array is not a "buffer" and it therefore wont automatically push backwards on every new period/timeframe (I mean that value[i] wont become value[i+1], so that index 0 is the most recent point). How do I achieve this? I hope you understood the question, feel free to comment...
Thanks in advance.