]> gitweb.factorcode.org Git - factor.git/blob - extra/math/finance/finance.factor
Adding first version of 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 kernel grouping math math.statistics sequences ;
5
6 IN: math.finance
7
8 : enumerate ( seq -- newseq )
9     #! Returns a sequence where each element and its index
10     -1 swap [ [ 1+ ] dip swap [ 2array ] keep swap ] { } map-as swap drop ;
11
12 : ema ( seq n -- newseq )
13     #! An exponentially-weighted moving average:
14     #! A = 2.0 / (N + 1)
15     #! EMA[t] = (A * VAL[t]) + ((1-A) * EMA[t-1])
16     1+ 2.0 swap / dup 1 swap - swap rot
17     [ [ dup ] dip * ] map swap drop 0 swap
18     [ [ dup ] 2dip [ * ] dip + dup ] map 
19     [ drop drop ] dip 1 tail-slice >array ;
20
21 : sma ( seq n -- newseq )
22     #! Simple moving average
23     clump [ mean ] map ;
24
25 : macd ( seq n1 n2 -- newseq )
26     #! Moving Average Convergence Divergence
27     #! MACD[t] = EMA2[t] - EMA1[t]
28     rot dup ema [ swap ema ] dip [ - ] 2map ;
29
30 : momentum ( seq n -- newseq )
31     #! Momentum
32     #! M[t] = P[t] - P[t-n]
33     2dup tail-slice -rot swap [ length ] keep
34     [ - neg ] dip swap head-slice [ - ] 2map ;
35
36