Fixed
...and here is the file...
2 problems found:
- iMAOnArray can only be used on an array and you were using the simple variable thermo instead.
- iMAOnArray can only be used on a prepared (filled) array. So it can only be executed after the first loop.
Cheers,
Herbert
the array is "ExtMapBuffer1", not "thermo" !
Herberth,
You are faster !
but you also can do this (from left to right):
thermo = MathMax(iHigh(NULL,0,i) - iHigh(NULL,0,i+1), iLow(NULL,0,i+1) - iLow(NULL,0,i));
if (thermo < 0) {thermo = 0;}
ExtMapBuffer1=thermo;
ExtMapBuffer2=iMAOnArray(ExtMapBuffer1,0,ThermoMAPeriod,0,MODE_EMA,i);
}It seems better as value of bar i+1 is used to calculate value of bar i
Herberth,
You are faster !
but you also can do this (from left to right):
thermo = MathMax(iHigh(NULL,0,i) - iHigh(NULL,0,i+1), iLow(NULL,0,i+1) - iLow(NULL,0,i));
if (thermo < 0) {thermo = 0;}
ExtMapBuffer1=thermo;
ExtMapBuffer2=iMAOnArray(ExtMapBuffer1,0,ThermoMAPeriod,0,MODE_EMA,i);
}Correct Michel it's always better to go from left to right, one important reason
for that is to prevent re-painting of the indi.
Regards
Thanks for the quick response!!
I appreciate it, now I can review my mistakes and hopefully not repeat them!
Mike
All John Ehlers
1. All John Ehlers Indicators... - the thread
1.1. LowPassFilter indicator - the post
1.2. Non-Linear Kalman Filter indicator - the post
1.3. BandPassIndicator indicator - the post
1.4. KalmanBands indicator - the post
1.5. Gaussian Filter - indicator for MetaTrader 5
1.6. Adaptive Laguerre filter trend for MetaTrader 5
1.7. Adaptive Laguerre Filter indicator for MetaTrader 5
1.8. Adaptive Laguerre filter 2 for MetaTrader 5
1.9. Adaptive Laguerre indicator for MetaTrader 5
1.10. Laguerre indicator for Metatrader 5
2. Elder's Market Thermometer duscussion thread
3. Elders market thermometer - from "Come in my trading room" - a real classic: the thread
- 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 All,
I'm trying to program Elder's Market Thermometer and have the basic calculations and drawing correct to measure "temperature".
However, actually getting the indicator to draw a MA on top seems to be an issue.
I've attached a screen shot where I just used the temperature then manually overlayed a MA ontop vs the bottom where I tried my hand at programming it into the indicator automatically.
It's part of a larger system (all based on Elder's 3 screens) and seems to work quite well.
I'm using it to exit trades when the temperature is 3.5 times the MA.
I'm also playing with it to enter trades - if temperature is 3 times the MA, take trade in direction of longer TF (only if price is below chart MA for a long, for example).
The code is super simple, but even so I can't figure it out - can someone take 3 minutes to check it out and fix the issue?
I've attached a screen shot to show the issue.
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Black
#property indicator_color2 Red
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
extern int ThermoMAPeriod = 13;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
SetIndexBuffer(1,ExtMapBuffer2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i,limit;
double thermo, ma;
limit=Bars-1;
for(i=0;i<limit;i++) {
thermo = MathMax(iHigh(NULL,0,i) - iHigh(NULL,0,i+1), iLow(NULL,0,i+1) - iLow(NULL,0,i));
if (thermo < 0) {thermo = 0;}
ma = iMAOnArray(thermo,0,ThermoMAPeriod,0,MODE_EMA,i);
ExtMapBuffer1=thermo;
ExtMapBuffer2=ma;
}
return(0);
}
//+------------------------------------------------------------------+