math.finance: some fixes to dema, gdema, and tema.

db4
John Benediktsson 2012-05-04 09:40:04 -07:00
parent 2699c4482b
commit 0a187f6609
1 changed files with 14 additions and 10 deletions

View File

@ -4,32 +4,36 @@ USING: arrays assocs kernel grouping sequences shuffle
math math.functions math.statistics math.vectors ;
IN: math.finance
: sma ( seq n -- newseq )
clump [ mean ] map ;
<PRIVATE
: weighted ( x y a -- z )
[ * ] [ 1 - neg * ] bi-curry bi* + ;
: weighted ( prev elt a -- newelt )
[ 1 swap - * ] [ * ] bi-curry bi* + ; inline
: a ( n -- a )
1 + 2 swap / ;
1 + 2 swap / ; inline
PRIVATE>
: ema ( seq n -- newseq )
a swap unclip [ swap pick weighted ] accumulate 2nip ;
: sma ( seq n -- newseq )
clump [ mean ] map ;
[ cut [ mean dup ] dip ] [ a ] bi
[ weighted dup ] curry map nip swap prefix ;
: dema ( seq n -- newseq )
[ ema ] keep [ drop 2 v*n ] [ ema ] 2bi v- ;
[ ema ] keep [ drop 2 v*n ] [ ema ] 2bi
[ length tail* ] keep v- ;
: gdema ( seq n v -- newseq )
[ [ ema ] keep dupd ema ] dip
[ 1 + v*n ] [ v*n ] bi-curry bi* v- ;
[ 1 + v*n ] [ v*n ] bi-curry bi*
[ length tail* ] keep v- ;
: tema ( seq n -- newseq )
[ ema ] keep dupd [ ema ] keep
[ drop [ 3 v*n ] bi@ v- ] [ ema nip ] 3bi v+ ;
[ drop [ 3 v*n ] bi@ [ length tail* ] keep v- ] [ ema nip ] 3bi
[ length tail* ] keep v+ ;
: macd ( seq n1 n2 -- newseq )
rot dup ema [ swap ema ] dip v- ;