int init() { IndicatorBuffers(6); IndicatorDigits(Digits); SetIndexBuffer(0,floor); SetIndexLabel(0,"Lower Angle"); SetIndexBuffer(1,ceiling); SetIndexLabel(1,"Upper Angle"); return(0); } double varLowMACurrent[], varLowMALast[], varHighMACurrent[], varHighMALast[]
Try changing the amount of buffers to 6... and you need to declare & use your other calculating buffers as arrays
#property copyright "Copyright © 2010, Nondisclosure007" #property link "http://no.link.yet" #property indicator_separate_window #property indicator_buffers 2 double floor[]; double ceiling[]; int init() { IndicatorBuffers(2); IndicatorDigits(Digits); SetIndexBuffer(0,floor); SetIndexLabel(0,"Lower Angle"); SetIndexBuffer(1,ceiling); SetIndexLabel(1,"Upper Angle"); return(0); } int deinit() { return(0); } int start() { int i, k, limit, counted_bars=IndicatorCounted(); limit = Bars-counted_bars-1; double varLowMACurrent, varLowMALast, varHighMALast, varHighMACurrent; datetime varTime; double winbc=WindowBarsPerChart(); for(i=0; i<limit; i++) { varLowMACurrent=iMA(NULL,0,34,0,MODE_EMA,PRICE_LOW,i+1); varLowMALast=iMA(NULL,0,34,0,MODE_EMA,PRICE_LOW,i+2); varHighMACurrent=iMA(NULL,0,34,0,MODE_EMA,PRICE_HIGH,i+1); varHighMALast=iMA(NULL,0,34,0,MODE_EMA,PRICE_HIGH,i+2); floor[i]=MathArctan(MathTan(((varLowMALast-varLowMACurrent)/(WindowPriceMax()- WindowPriceMin()))/((1)/winbc)))*180/3.14; ceiling[i]=MathArctan(MathTan(((varHighMALast-varHighMACurrent)/(WindowPriceMax()- WindowPriceMin()))/((1)/winbc)))*180/3.14; if(i<10) Print("ceiling:",ceiling[i],",floor:",floor[i]); } return(0); } //+----------------This worked for me.
Not sure if you were aiming for a separate window or not. The result values implied that you were.
Watch out for int's in double calculations.
Also, your lines are going to default to black, so if you have a black BG, you won't see them.
nd, this is off the top of my head
- Since you're using incrementing loop
the shift in iMA for past bars need to be i - 1 and i - 2
- Try to call and normalize WindowsPriceMax() and WindowsPriceMin() outside the iMA functions
This worked for me.
Not sure if you were aiming for a separate window or not. The result values implied that you were.
Watch out for int's in double calculations.
Also, your lines are going to default to black, so if you have a black BG, you won't see them.
I'm guessing that although when you 'draw' manually the trendline by angle by setting the 2 time and price coordinate, it must figure out what the angle is based on pixels and not price/time.
The angles you get and what you see can be different.
Duh! It depends on size of monitor, how you size the application window, how you zoom it, etc....
I use angles before BUT it is not effective because it cannot predict the future angle/movement.
What you can do instead is maybe deal with slopes/rate of change if you're looking to compare or analyze segments.
For example, 20 pips per bar is a measurement that fits price charts well.
Try changing the amount of buffers to 6... and you need to declare & use your other calculating buffers as arrays
Those intermediate values are never referred to in the past, so no need for additional buffers.
Angles have no place on price charts. Angle is delta y/delta x. But price charts are price vs time. Angle makes no sense. Slope on the other hand does.
Those intermediate values are never referred to in the past, so no need for additional buffers.
Angles have no place on price charts. Angle is delta y/delta x. But price charts are price vs time. Angle makes no sense. Slope on the other hand does.WHRoeder, you're correct that's a once-off calculation. no need for buffers there... thank you
as far as angle, let me see if I can get this correctly :
- delta y / delta x (rise / run), will get you tangent ratio
- to get the degree of slope you must put that ratio back with MathArcTan() - and convert its value from radians to degree.
nd,
- Using WindowsPriceMax and WindowsPriceMin has occured to me also. But that meant that you want your indicator to calculate conversion each
time you zoom in/out, scroll windows, etc. There's no way to call that event yet, afaik.- Angles apply in 1:1 fix chart (set options in F8) so you don't need to see 30 degree angle corresponds visually. You only need to compare it relatively
with other angle values. if the value of older Bar1 - Bar2 is, for example : 28,3 degree ; and newer Bar3 - Bar4 : 40.2 degreethan we have ourselves an inclination in degree. etc... another way of putting it : you won't see a 45 degree angle in chart as you know how a 45 degree should look like.
But you will see it is 45 degrees in comparison with it's neighbouring 23 and 51 degrees values for example...
edited : rise / run cannot be exchanged, tangent = opposite (rise) / adjacent (run);
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
What is wrong with the following code? I'm not getting any values back.