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

[EquisMetaStock Group] Re: Pip detector code



PureBytes Links

Trading Reference Links


Sorry, I gave an imcomplete version of the code.  Here is the one that
I *think* will improve the accuracy.  Maybe Preston can clean up the
list quite a bit by only keeping those 'final' posts of mine and
deleting the first ones.........

Anyhow, here it is

rr:=Abs(C-Ref(C,-1));
ss:=Log(Lowest((rr=0)+rr))/2.302585;
Exp(If(ss>0,Floor(ss),Ceil(ss))-1)*2.302585)

Regards
MG Ferreira
TsaTsa EOD Programmer and trading model builder
http://www.ferra4models.com
http://fun.ferra4models.com




--- In equismetastock@xxxxxxxxxxxxxxx, "MG Ferreira" <quant@xxxx> wrote:
> 
> I *think* the following will improve the accuracy quite a bit.  It
> uses the ceil and floor function, which, unfortunately, you have to
> switch between if the value is above or below zero.
> 
> rr:=Abs(C-Ref(C,-1));
> ss:=Log(Lowest((rr=0)+rr))/2.302585;
> Exp(if(ss>(Int(ss)-1)*2.302585)
> 
> Interestingly, I see there is a 'precision' function in MS, which one
> should also be able to use for this task, something like
> 
> rr:=Abs(C-Ref(C,-1));
>
digits:=(precision(rr,0)=rr)+0.1*(precision(rr,1)=rr)+0.01*(precision(rr,2)=rr)+0.001*(precision(rr,3)=rr)+
> 0.0001*(precision(rr,4)=rr);
> lowest(Exp(-digits*2.302585))
> 
> should do the trick.  Note - I did *not* test this piece of code, it
> may not even compile.  It will be thrown off completely by something
> round like 10.0000, where the pip is say 0.0001, but the code above
> will pick up a pip of 1 - which is why there is now a 'lowest' in the
> final line.
> 
> Regards
> MG Ferreira
> TsaTsa EOD Programmer and trading model builder
> http://www.ferra4models.com
> http://fun.ferra4models.com
> 
> 
> 
> --- In equismetastock@xxxxxxxxxxxxxxx, "MG Ferreira" <quant@xxxx> wrote:
> > 
> > Hi Wallace,
> > 
> > Adding that 0 may fix it.....  The problem is that, if computers were
> > completely accurate, even the * 1.001 was not required.  Now it
> > depends on how they treat a number, does 1 + 1 = 1.99999 (in which
> > case * 1.0001 would do the trick) or does 1 + 1 = 2.00001 (in which
> > case you need to use * 0.99999).  So you need to test the formula
> > quite a bit and for a variety of stuff to get it to work in all
cases.  
> > 
> > This I certainly haven't done nor do I intend to do it, since the
> > formula as it is, is good enough I think for most cases.  You can also
> > revisit the formula, use stuff like MS's floor and ceil and round, and
> > try to get something that will calculate and compensate for the
> > rounding and will work in all cases.  Or, you can do something like
> > 
> > if value < 0.0001 then pip = 0.0001
> > else if value < 0.001 then pip = 0.001
> > else if value < 0.01 then pip = 0.01
> > ...
> > 
> > which is crude I guess but works .... <tonk>
> > 
> > Regards
> > MG Ferreira
> > TsaTsa EOD Programmer and trading model builder
> > http://www.ferra4models.com
> > http://fun.ferra4models.com
> > 
> > 
> > 
> > --- In equismetastock@xxxxxxxxxxxxxxx, murusprimus <no_reply@xxxx>
> wrote:
> > > 
> > > 
> > > Missing 0 in code:*1.0001 NOT *1.001
> > > 
> > > rr:=Abs(C-Ref(C,-1));
> > > ss:=Log(Lowest((rr=0)+rr)*1.0001)/2.302585;
> > > Exp((Int(ss)-1)*2.302585)
> > > 
> > > Wallace.





------------------------ Yahoo! Groups Sponsor --------------------~--> 
Has someone you know been affected by illness or disease?
Network for Good is THE place to support health awareness efforts!
http://us.click.yahoo.com/Rcy2bD/UOnJAA/cosFAA/BefplB/TM
--------------------------------------------------------------------~-> 

 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/equismetastock/

<*> To unsubscribe from this group, send an email to:
    equismetastock-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/