loop over N bars, compute and sum the difference, divide by the count.
How about this?
Doesn't seem to calculate correctly...
//Average move beyond the LWMAs int i, Counted_bars; Counted_bars=IndicatorCounted(); i=Bars-Counted_bars-1; double varPriceExceededHigh=0; double varPriceExceededLow=0; double varPriceExceededHighCount=0; double varPriceExceededLowCount=0; while(i>=0) { if (High[i] > iMA(NULL, 0, 2, 0, MODE_LWMA, PRICE_HIGH, i)) { //count this bar towards the total and add it to the var varPriceExceededHighCount++; varPriceExceededHigh= varPriceExceededHigh + (High[i] - iMA(NULL, 0, 2, 0, MODE_LWMA, PRICE_HIGH, 0)); } if (Low[i] < iMA(NULL, 0, 2, 0, MODE_LWMA, PRICE_LOW, i)) { varPriceExceededLowCount++; varPriceExceededLow= varPriceExceededLow + (iMA(NULL, 0, 2, 0, MODE_LWMA, PRICE_LOW, 0) - Low[i]); } //when the bar doesn't exceede the high or the low don't do any calculating i--; } //calculate averages double varavHigh = varPriceExceededHigh/varPriceExceededHighCount; double varavLow = varPriceExceededLow/varPriceExceededLowCount;
Do you want the number of pips? Remember that doing High[i] - iMA() will give you the difference according to your broker's digits, i.e. 0.0002.
Do you want the number of pips? Remember that doing High[i] - iMA() will give you the difference according to your broker's digits, i.e. 0.0002.
I think it was this line, I needed to change the end to i:
varPriceExceededHigh= varPriceExceededHigh + (High[i] - iMA(NULL, 0, 2, 0, MODE_LWMA, PRICE_HIGH, 0)); Pips I can get from ther Point variable I think.
i=Bars-Counted_bars-1; double varPriceExceededHigh=0; double varPriceExceededLow=0; double varPriceExceededHighCount=0; double varPriceExceededLowCount=0; while(i>=0) { if (High[i] > iMA(NULL, 0, 2, 0, MODE_LWMA, PRICE_HIGH, i)) { //count this bar towards the total and add it to the var varPriceExceededHighCount++; varPriceExceededHigh= varPriceExceededHigh + (High[i] - iMA(NULL, 0, 2, 0, MODE_LWMA, PRICE_HIGH, 0)); } ... i--; } //calculate averages double varavHigh = varPriceExceededHigh/varPriceExceededHighCount;
This is computing the average over all bars vs the CURRENT moving average. You want the average over 20 vs the MA at that time
i=Bars-Counted_bars-1; while(i>=0) { double varPriceExceededHigh=0; double varPriceExceededLow=0; double varPriceExceededHighCount=0; double varPriceExceededLowCount=0; for (int j=19; j>=0; j--) { if (High[i+j] > iMA(NULL, 0, 2, 0, MODE_LWMA, PRICE_HIGH, i+j)) { //count this bar towards the total and add it to the var varPriceExceededHighCount++; varPriceExceededHigh += (High[i+j] - iMA(NULL, 0, 2, 0, MODE_LWMA, PRICE_HIGH, i+j)); } ... } // for //calculate averages double varavHigh = varPriceExceededHigh/varPriceExceededHighCount; bufferHigh[i] = varavHigh; i--; } // while
Why 20 out of interest?
On a weekly chart, I'd like to see the average distance that price exceeds the 2 period LWMA high and get the average.
Same for the low.
Doesn;t 20 restrict it to only the recent 20 bars?
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
I have a band on my chart, which is the 2 LWMA high and 2 LWMA low.
I can work out the distance between the 2 easily enough but what I want to work out is the average amount of pips that price exceeds the bands over say the last 20 periods.
Any ideas on how to do that?