-
-
Notifications
You must be signed in to change notification settings - Fork 277
/
interval.go
80 lines (66 loc) · 1.54 KB
/
interval.go
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package types
import (
"encoding/json"
"fmt"
"time"
)
type Interval string
func (i Interval) Minutes() int {
return SupportedIntervals[i]
}
func (i Interval) Duration() time.Duration {
return time.Duration(i.Minutes()) * time.Minute
}
func (i *Interval) UnmarshalJSON(b []byte) (err error) {
var a string
err = json.Unmarshal(b, &a)
if err != nil {
return err
}
*i = Interval(a)
return
}
func (i Interval) String() string {
return string(i)
}
type IntervalSlice []Interval
func (s IntervalSlice) StringSlice() (slice []string) {
for _, interval := range s {
slice = append(slice, `"`+interval.String()+`"`)
}
return slice
}
var Interval1m = Interval("1m")
var Interval5m = Interval("5m")
var Interval15m = Interval("15m")
var Interval30m = Interval("30m")
var Interval1h = Interval("1h")
var Interval2h = Interval("2h")
var Interval4h = Interval("4h")
var Interval6h = Interval("6h")
var Interval12h = Interval("12h")
var Interval1d = Interval("1d")
var Interval3d = Interval("3d")
var SupportedIntervals = map[Interval]int{
Interval1m: 1,
Interval5m: 5,
Interval15m: 15,
Interval30m: 30,
Interval1h: 60,
Interval2h: 60 * 2,
Interval4h: 60 * 4,
Interval6h: 60 * 6,
Interval12h: 60 * 12,
Interval1d: 60 * 24,
Interval3d: 60 * 24 * 3,
}
// IntervalWindow is used by the indicators
type IntervalWindow struct {
// The interval of kline
Interval Interval
// The windows size of the indicator (EWMA and SMA)
Window int
}
func (iw IntervalWindow) String() string {
return fmt.Sprintf("%s (%d)", iw.Interval, iw.Window)
}