Why doesn't my indicator work
forexbob1970:
So I'm pretty simple. But I tried this and nothing. Just indicator buffer#1 detached???
Apart from this
//---- calculate values for(int i=0; i<limit; i++) { highest[i]=NormalizeDouble(((iHighest(Symbol(),Period(),MODE_HIGH,Middle,i))+(iLowest(Symbol(),Period(),MODE_LOW,Middle,i))/2),Digits); lowest[i]=NormalizeDouble(((iHighest(Symbol(),Period(),MODE_HIGH,Lowest,i))+(iLowest(Symbol(),Period(),MODE_LOW,Lowest,i))/2),Digits); fastest[i]=NormalizeDouble((((iHighest(Symbol(),Period(),MODE_HIGH,Middle,i))+(iLowest(Symbol(),Period(),MODE_LOW,Middle,i))/2)+((iHighest(Symbol(),Period(),MODE_HIGH,Lowest,i))+(iLowest(Symbol(),Period(),MODE_LOW,Lowest,i))/2))/2,Digits); lowest[i]=NormalizeDouble(((iHighest(Symbol(),Period(),MODE_HIGH,Highest,i))+(iLowest(Symbol(),Period(),MODE_LOW,Highest,i))/2),Digits); trail1[i]=NormalizeDouble((((iHighest(Symbol(),Period(),MODE_HIGH,Middle,i+Middle))+(iLowest(Symbol(),Period(),MODE_LOW,Middle,i+Middle))/2)+((iHighest(Symbol(),Period(),MODE_HIGH,Lowest,i+Middle))+(iLowest(Symbol(),Period(),MODE_LOW,Lowest,i+Middle))/2))/2,Digits); trail2[i]=NormalizeDouble(((iHighest(Symbol(),Period(),MODE_HIGH,Highest,i+Middle))+(iLowest(Symbol(),Period(),MODE_LOW,Highest,i+Middle))/2),Digits); }
Which should read this
//---- calculate values for(int i=0; i<limit; i++) { highest[i]=NormalizeDouble(((iHighest(Symbol(),Period(),MODE_HIGH,Middle,i))+(iLowest(Symbol(),Period(),MODE_LOW,Middle,i))/2),Digits); lowest[i]=NormalizeDouble(((iHighest(Symbol(),Period(),MODE_HIGH,Lowest,i))+(iLowest(Symbol(),Period(),MODE_LOW,Lowest,i))/2),Digits); fastest[i]=NormalizeDouble((((iHighest(Symbol(),Period(),MODE_HIGH,Middle,i))+(iLowest(Symbol(),Period(),MODE_LOW,Middle,i))/2)+((iHighest(Symbol(),Period(),MODE_HIGH,Lowest,i))+(iLowest(Symbol(),Period(),MODE_LOW,Lowest,i))/2))/2,Digits); slowest[i]=NormalizeDouble(((iHighest(Symbol(),Period(),MODE_HIGH,Highest,i))+(iLowest(Symbol(),Period(),MODE_LOW,Highest,i))/2),Digits); trail1[i]=NormalizeDouble((((iHighest(Symbol(),Period(),MODE_HIGH,Middle,i+Middle))+(iLowest(Symbol(),Period(),MODE_LOW,Middle,i+Middle))/2)+((iHighest(Symbol(),Period(),MODE_HIGH,Lowest,i+Middle))+(iLowest(Symbol(),Period(),MODE_LOW,Lowest,i+Middle))/2))/2,Digits); trail2[i]=NormalizeDouble(((iHighest(Symbol(),Period(),MODE_HIGH,Highest,i+Middle))+(iLowest(Symbol(),Period(),MODE_LOW,Highest,i+Middle))/2),Digits); }
Array out of range error. Check your logs when something doesn't work.
- Do you think integer values in the [0 .. 100] range are going to be visiable on a pair in the [1.52 .. 1.54] range
-
Do NOT use NormalizeDouble, EVER. For ANY Reason. It's a kludge, don't use it.
It's use is always wrong
- SL/TP are market orders when triggered, they don't need to be normalized, only abide by the limits Requirements and Limitations in Making Trades - Appendixes - MQL4 Tutorial and that requires understanding floating point equality Can price != price ? - MQL4 forum
- Only the open price for pending orders need to be adjusted. On Currencies, Point == TickSize, so you will get the same answer, but it won't work on Metals. So do it right: Trailing Bar Entry EA - MQL4 forum or Bid/Ask: (No Need) to use NormalizeDouble in OrderSend - MQL4 forum
- Lot size must also be adjusted to a multiple of LotStep. If that is not a power of 1/10 then NormalizeDouble is wrong. Do it right.
MODE_HIGH,Highest,i+Middle)
Your look back is Highest+Middle-1. Contradictory information on IndicatorCounted() - MQL4 forum Do it right.int counted_bars=IndicatorCounted(); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars;
int counted_bars=IndicatorCounted(); int lookback = Highest+Middle-1; limit=Bars-MathMax(lookback,counted_bars);
Thanks lads especially for the links.
So I'm pretty simple. But I tried this and nothing. Just indicator buffer#1 detached???