]> gitweb.factorcode.org Git - factor.git/blob - extra/math/finance/finance.factor
Adding distribute word to math-finance.
[factor.git] / extra / math / finance / finance.factor
1 ! Copyright (C) 2008 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
3
4 USING: arrays assocs kernel grouping sequences shuffle
5 math math.functions math.statistics math.vectors ;
6
7 IN: math.finance
8
9 : enumerate ( seq -- newseq )
10     <enum> >alist ;
11
12 : distribute ( amount n -- seq ) 
13     [ / ] keep 0 <array> [ 0 0 ] dip 
14     [ + [ [ dup ] dip + ] dip  
15       [ dup round ] dip 2dup -
16       [ drop ] dip ] map 3nip ;
17
18 <PRIVATE
19
20 : weighted ( x y a -- z ) 
21     tuck [ * ] [ 1 swap - * ] 2bi* + ;
22
23 : a ( n -- a ) 
24     1 + 2 swap / ;
25
26 : first-rest ( seq -- first rest )
27     [ first ] keep 1 tail-slice ;
28
29 PRIVATE>
30
31 : ema ( seq n -- newseq )
32     a swap first-rest swap [ [ dup ] 2dip swap rot weighted ] accumulate 2nip ;
33
34 : sma ( seq n -- newseq )
35     clump [ mean ] map ;
36
37 : macd ( seq n1 n2 -- newseq )
38     rot dup ema [ swap ema ] dip v- ;
39
40 : momentum ( seq n -- newseq )
41     2dup tail-slice -rot swap [ length ] keep
42     [ - neg ] dip swap head-slice v- ;
43