[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Help with an indicator...



PureBytes Links

Trading Reference Links

Tomasz,

Thanks for your "other point of view" on how to look at the math 
involved (being an electrical engineer, I should have seen that! :)

However, I have run into another problem. sc (the smoothing constant 
here is a moving target....it changes based on the stock's movement 
(adapative). Below is the entire code:

fast = 2/(2+1);
slow = 2/(30+1);
dir=abs(close-ref(close,-10));
vol=sum(abs(close-ref(close,-1)),10);
ER=dir/vol;
sc =( ER*(fast-slow)+slow)^2;
graph1=sc;
x =-1 + round(2/sc);
AMA = ema(close,x); 

And the error is:

AMA = ema(close,round(2/sc))
^

Bad args


which leds me to believe that this adaptive moving average can not be 
done. But prehaps you have a better idea on how to get this to work.

Once again, thanks for all your help, and keep up the great work!! :)

Regards,

Jared James
jjames@xxxx

--- In amibroker@xxxx, "Tomasz Janeczko" <tjaneczk@xxxx> wrote:
> Hi,
> 
> Sometimes things look more complicated than they should :-)
> 
> Your formula:
> 
> AMA = ref(AMA,-1)+sc*(close-ref(AMA,-1)); 
> 
> Is the same as:
> 
> AMA = sc * close + ( 1 - sc ) * Previous( AMA );
> 
> This one is in fact the formula for exponential moving average
> sc is simply smoothing constant = 2 / (periods + 1)
> 
> So periods = -1 + 2/sc
> 
> So you final AFL code for your AMA is:
> 
> AMA = ema( close, -1 + 2/sc ); 
> 
> It is not only faster to execute but also does not have any self-
references.
> 
> In AFL you can reference the same variable in the assignment 
statement 
> (you must initialize it however):
> 
> testvar = 0;
> testvar = testvar + close;
> 
> But... AFL is a vector (or array) based language performing 
operations on array
> in one run (that's why it is so fast) - so you can not iterate thru 
elements
> of the array. Statements like variable = ref( variable, -1 ) + 
something 
> will not work correctly.
> To overcome this problem functions like cum(), sum(), ema() should 
be used.
> 
> Best regards,
> Tomasz Janeczko
> 
> 
> ----- Original Message ----- 
> From: <jmjames@xxxx>
> To: <amibroker@xxxx>
> Sent: Tuesday, March 13, 2001 05:34
> Subject: [amibroker] Help with an indicator...
> 
> 
> > Hi!
> > 
> > I have had trouble getting an indicator to work. More specific, 
I 
> > have had trouble with the following line:
> > 
> > AMA = ref(AMA,-1)+sc*(close-ref(AMA,-1)); 
> > 
> > It comes back with an error of:
> > 
> > AMA = ref(AMA,
> > ^
> > 
> > Unknown identifier
> > 
> > Am I doing something wrong, or will AmiBroker not handel a ref to 
> > itself?
> > 
> > Thank for your time and effort on my questions!!
> > 
> > Regards,
> > 
> > Jared James
> > jjames@xxxx
> > 
> > 
> > 
> > 
> > 
> > 
> > Your use of Yahoo! Groups is subject to 
http://docs.yahoo.com/info/terms/ 
> > 
> >