-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAnchorBar.fs
35 lines (29 loc) · 1.27 KB
/
AnchorBar.fs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
module GeldMachine.Indicator.AnchorBar
open Deedle
open System
let largeThreshold = 1.8 //180%
let maxAnchorBars = 6
let takeAtMax n (series:Series<'a,'b>) =
let max = if series.ValueCount > n then n else series.ValueCount
let obs = Seq.map (fun i -> series.GetKeyAt(i),series.GetAt(i)) {1..max}
Series.ofObservations obs
let anchorVolBars (data:Frame<DateTime,string>) =
let vols = data?Volume
let meanVol = Stats.mean vols
let relativeVols = Series.map (fun k v -> v / meanVol) vols
let largeVols = Series.filter (fun k v -> v > largeThreshold) relativeVols
largeVols
let anchorWideSpreadBars (data:Frame<DateTime,string>) =
let lows = data?Low
let highs = data?High
let spreads = Series.zip lows highs |> Series.map (fun k (l,h) -> h.Value - l.Value)
let meanSpread = Stats.mean spreads
let relativeSpreads = Series.map (fun k v -> v / meanSpread) spreads
let largeSpreads = Series.filter (fun k v -> v > largeThreshold) relativeSpreads
largeSpreads
let anchorBars (data:Frame<DateTime,string>) =
let volBars = anchorVolBars data
let wideSpreadBars = anchorWideSpreadBars data
let allBars = Series.merge volBars wideSpreadBars |> Series.sort
//let topBars = takeAtMax maxAnchorBars allBars
printfn "%A" allBars