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 } // 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() }, }