1 ! Copyright (C) 2008 John Benediktsson, Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: arrays assocs kernel grouping sequences shuffle
4 math math.functions math.statistics math.vectors ;
9 : weighted ( x y a -- z )
10 [ * ] [ 1 - neg * ] bi-curry bi* + ;
17 : ema ( seq n -- newseq )
18 a swap unclip [ swap pick weighted ] accumulate 2nip ;
20 : sma ( seq n -- newseq )
23 : dema ( seq n -- newseq )
24 [ ema ] keep [ drop 2 v*n ] [ ema ] 2bi v- ;
26 : gdema ( seq n v -- newseq )
27 [ [ ema ] keep dupd ema ] dip
28 [ 1 + v*n ] [ v*n ] bi-curry bi* v- ;
30 : tema ( seq n -- newseq )
31 [ ema ] keep dupd [ ema ] keep
32 [ drop [ 3 v*n ] bi@ v- ] [ ema nip ] 3bi v+ ;
34 : macd ( seq n1 n2 -- newseq )
35 rot dup ema [ swap ema ] dip v- ;
37 : momentum ( seq n -- newseq )
38 [ tail-slice ] 2keep [ dup length ] dip - head-slice v- ;
40 : monthly ( x -- y ) 12 / ; inline
42 : semimonthly ( x -- y ) 24 / ; inline
44 : biweekly ( x -- y ) 26 / ; inline
46 : weekly ( x -- y ) 52 / ; inline
48 : daily-360 ( x -- y ) 360 / ; inline
50 : daily-365 ( x -- y ) 365 / ; inline