You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.9 KiB
132 lines
3.9 KiB
package types |
|
|
|
import ( |
|
"time" |
|
) |
|
|
|
var LossEmoji = "🔥" |
|
var ProfitEmoji = "💰" |
|
|
|
type Interval string |
|
|
|
// AddMul 对指定毫秒时间戳增加周期数 |
|
func (i Interval) AddMul(ts, mul int64) (int64, bool) { |
|
c, ok := SupportedIntervals[i] |
|
if !ok { |
|
return ts, false |
|
} |
|
return c(ts, mul), true |
|
} |
|
|
|
// Iota 返回interval唯一索引 |
|
func (i Interval) Iota(ts, mul int64) (int, bool) { |
|
index, ok := IntervalIotas[i] |
|
if !ok { |
|
return 0, false |
|
} |
|
return index, true |
|
} |
|
|
|
// func (i Interval) Minutes() (int64, bool) { |
|
// c, ok := SupportedIntervals[i] |
|
// if !ok || c <= 0 { |
|
// return c, false |
|
// } |
|
// return c / 60, true |
|
// } |
|
|
|
// func (i Interval) Seconds() (int64, bool) { |
|
// m, ok := SupportedIntervals[i] |
|
// if !ok || m <= 0 { |
|
// return m, false |
|
// } |
|
// return m, true |
|
// } |
|
|
|
// func (i Interval) Milliseconds() (int64, bool) { |
|
// m, ok := SupportedIntervals[i] |
|
// if !ok || m <= 0 { |
|
// return m, false |
|
// } |
|
// return m * 1000, true |
|
// } |
|
|
|
var ( |
|
Interval1s = Interval("1s") |
|
Interval1m = Interval("1m") |
|
Interval3m = Interval("3m") |
|
Interval5m = Interval("5m") |
|
Interval15m = Interval("15m") |
|
Interval30m = Interval("30m") |
|
Interval1h = Interval("1h") |
|
Interval2h = Interval("2h") |
|
Interval4h = Interval("4h") |
|
Interval6h = Interval("6h") |
|
Interval12h = Interval("12h") |
|
Interval1d = Interval("1d") |
|
Interval2d = Interval("2d") |
|
Interval3d = Interval("3d") |
|
Interval5d = Interval("5d") |
|
Interval1w = Interval("1w") |
|
Interval1mo = Interval("1mo") |
|
Interval3mo = Interval("3mo") |
|
) |
|
|
|
// IntervalWindow is used by the indicators |
|
type IntervalWindow struct { |
|
// The interval of kline |
|
Interval Interval `json:"interval"` |
|
|
|
// The windows size of the indicator (for example, EWMA and SMA) |
|
Window int `json:"window"` |
|
|
|
// RightWindow is used by the pivot indicator |
|
RightWindow *int `json:"rightWindow"` |
|
} |
|
|
|
type IntervalMap map[Interval]IntervalAdder |
|
|
|
type IntervalAdder func(ts, mul int64) (ret int64) |
|
|
|
var SupportedIntervals = IntervalMap{ |
|
// Interval1s: func(ts, mul int64) (ret int64) { return ts + (1000 * mul) }, |
|
Interval1m: func(ts, mul int64) (ret int64) { return ts + (1 * 60 * 1000 * mul) }, |
|
Interval3m: func(ts, mul int64) (ret int64) { return ts + (3 * 60 * 1000 * mul) }, |
|
Interval5m: func(ts, mul int64) (ret int64) { return ts + (5 * 60 * 1000 * mul) }, |
|
Interval15m: func(ts, mul int64) (ret int64) { return ts + (15 * 60 * 1000 * mul) }, |
|
Interval30m: func(ts, mul int64) (ret int64) { return ts + (30 * 60 * 1000 * mul) }, |
|
Interval1h: func(ts, mul int64) (ret int64) { return ts + (60 * 60 * 1000 * mul) }, |
|
Interval2h: func(ts, mul int64) (ret int64) { return ts + (2 * 60 * 60 * 1000 * mul) }, |
|
Interval4h: func(ts, mul int64) (ret int64) { return ts + (4 * 60 * 60 * 1000 * mul) }, |
|
Interval6h: func(ts, mul int64) (ret int64) { return ts + (4 * 60 * 60 * 1000 * mul) }, |
|
Interval12h: func(ts, mul int64) (ret int64) { return ts + (12 * 60 * 60 * 1000 * mul) }, |
|
Interval1d: func(ts, mul int64) (ret int64) { return ts + (24 * 60 * 60 * 1000 * mul) }, |
|
Interval2d: func(ts, mul int64) (ret int64) { return ts + (2 * 24 * 60 * 60 * 1000 * mul) }, |
|
Interval3d: func(ts, mul int64) (ret int64) { return ts + (3 * 24 * 60 * 60 * 1000 * mul) }, |
|
Interval5d: func(ts, mul int64) (ret int64) { return ts + (5 * 24 * 60 * 60 * 1000 * mul) }, |
|
Interval1w: func(ts, mul int64) (ret int64) { return ts + (7 * 24 * 60 * 60 * 1000 * mul) }, |
|
Interval1mo: func(ts, mul int64) (ret int64) { return time.UnixMilli(ts).AddDate(0, int(mul), 0).UnixMilli() }, |
|
Interval3mo: func(ts, mul int64) (ret int64) { return time.UnixMilli(ts).AddDate(0, int(3*mul), 0).UnixMilli() }, |
|
} |
|
|
|
type IntervalIotaMap map[Interval]int |
|
|
|
var IntervalIotas = IntervalIotaMap{ |
|
Interval1m: 2, |
|
Interval3m: 3, |
|
Interval5m: 4, |
|
Interval15m: 5, |
|
Interval30m: 6, |
|
Interval1h: 7, |
|
Interval2h: 8, |
|
Interval4h: 9, |
|
Interval6h: 10, |
|
Interval12h: 11, |
|
Interval1d: 12, |
|
Interval2d: 13, |
|
Interval3d: 14, |
|
Interval5d: 15, |
|
Interval1w: 16, |
|
Interval1mo: 17, |
|
Interval3mo: 18, |
|
}
|
|
|