]> gitweb.factorcode.org Git - factor.git/blob - extra/math/finance/finance.factor
factor: trim using lists
[factor.git] / extra / math / finance / finance.factor
1 ! Copyright (C) 2008 John Benediktsson, Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: grouping kernel math math.statistics math.vectors
4 sequences ;
5 IN: math.finance
6
7 : sma ( seq n -- newseq )
8     clump [ mean ] map ;
9
10 <PRIVATE
11
12 : weighted ( prev elt a -- newelt )
13     [ 1 swap - * ] [ * ] bi-curry bi* + ; inline
14
15 : a ( n -- a )
16     1 + 2 swap / ; inline
17
18 PRIVATE>
19
20 : ema ( seq n -- newseq )
21     [ cut [ mean dup ] dip ] [ a ] bi
22     [ weighted dup ] curry map nip swap prefix ;
23
24 : dema ( seq n -- newseq )
25     [ ema ] keep [ drop 2 v*n ] [ ema ] 2bi
26     [ length tail* ] keep v- ;
27
28 : gdema ( seq n v -- newseq )
29     [ [ ema ] keep dupd ema ] dip
30     [ 1 + v*n ] [ v*n ] bi-curry bi*
31     [ length tail* ] keep v- ;
32
33 : tema ( seq n -- newseq )
34     [ ema ] keep dupd [ ema ] keep
35     [ drop [ 3 v*n ] bi@ [ length tail* ] keep v- ] [ ema nip ] 3bi
36     [ length tail* ] keep v+ ;
37
38 : macd ( seq n1 n2 -- newseq )
39     rot dup ema [ swap ema ] dip v- ;
40
41 : momentum ( seq n -- newseq )
42     [ tail-slice ] 2keep [ dup length ] dip - head-slice v- ;
43
44 : performance ( seq -- newseq )
45     dup first '[ _ [ - ] [ /f ] bi 100 * ] map ;
46
47 : monthly ( x -- y ) 12 / ; inline
48
49 : semimonthly ( x -- y ) 24 / ; inline
50
51 : biweekly ( x -- y ) 26 / ; inline
52
53 : weekly ( x -- y ) 52 / ; inline
54
55 : daily-360 ( x -- y ) 360 / ; inline
56
57 : daily-365 ( x -- y ) 365 / ; inline