v5sdkgo/ws/wImpl/contants.go

242 lines
5.0 KiB
Go
Raw Permalink Normal View History

2024-12-14 19:09:06 +08:00
package wImpl
import (
"regexp"
)
/*
*/
const (
MSG_NORMAL = iota
MSG_JRPC
)
//事件
type Event int
/*
EventID
*/
const (
EVENT_UNKNOWN Event = iota
EVENT_ERROR
EVENT_PING
EVENT_LOGIN
//订阅公共频道
EVENT_BOOK_INSTRUMENTS
EVENT_STATUS
EVENT_BOOK_TICKERS
EVENT_BOOK_OPEN_INTEREST
EVENT_BOOK_KLINE
EVENT_BOOK_TRADE
EVENT_BOOK_ESTIMATE_PRICE
EVENT_BOOK_MARK_PRICE
EVENT_BOOK_MARK_PRICE_CANDLE_CHART
EVENT_BOOK_LIMIT_PRICE
EVENT_BOOK_ORDER_BOOK
EVENT_BOOK_ORDER_BOOK5
EVENT_BOOK_ORDER_BOOK_TBT
EVENT_BOOK_ORDER_BOOK50_TBT
EVENT_BOOK_OPTION_SUMMARY
EVENT_BOOK_FUND_RATE
EVENT_BOOK_KLINE_INDEX
EVENT_BOOK_INDEX_TICKERS
//订阅私有频道
EVENT_BOOK_ACCOUNT
EVENT_BOOK_POSTION
EVENT_BOOK_ORDER
EVENT_BOOK_ALG_ORDER
EVENT_BOOK_B_AND_P
// JRPC
EVENT_PLACE_ORDER
EVENT_PLACE_BATCH_ORDERS
EVENT_CANCEL_ORDER
EVENT_CANCEL_BATCH_ORDERS
EVENT_AMEND_ORDER
EVENT_AMEND_BATCH_ORDERS
//订阅返回数据
EVENT_BOOKED_DATA
EVENT_DEPTH_DATA
)
/*
EventID事件名称channel
带有周期参数的频道 行情频道 需要将channel写为 正则表达模式方便 类型匹配 "^candle*"
*/
var EVENT_TABLE = [][]interface{}{
// 未知的消息
{EVENT_UNKNOWN, "未知", ""},
// 错误的消息
{EVENT_ERROR, "错误", ""},
// Ping
{EVENT_PING, "ping", ""},
// 登陆
{EVENT_LOGIN, "登录", ""},
/*
订阅公共频道
*/
{EVENT_BOOK_INSTRUMENTS, "产品", "instruments"},
{EVENT_STATUS, "status", "status"},
{EVENT_BOOK_TICKERS, "行情", "tickers"},
{EVENT_BOOK_OPEN_INTEREST, "持仓总量", "open-interest"},
{EVENT_BOOK_KLINE, "K线", "candle"},
{EVENT_BOOK_TRADE, "交易", "trades"},
{EVENT_BOOK_ESTIMATE_PRICE, "预估交割/行权价格", "estimated-price"},
{EVENT_BOOK_MARK_PRICE, "标记价格", "mark-price"},
{EVENT_BOOK_MARK_PRICE_CANDLE_CHART, "标记价格K线", "mark-price-candle"},
{EVENT_BOOK_LIMIT_PRICE, "限价", "price-limit"},
{EVENT_BOOK_ORDER_BOOK, "400档深度", "books"},
{EVENT_BOOK_ORDER_BOOK5, "5档深度", "books5"},
{EVENT_BOOK_ORDER_BOOK_TBT, "tbt深度", "books-l2-tbt"},
{EVENT_BOOK_ORDER_BOOK50_TBT, "tbt50深度", "books50-l2-tbt"},
{EVENT_BOOK_OPTION_SUMMARY, "期权定价", "opt-summary"},
{EVENT_BOOK_FUND_RATE, "资金费率", "funding-rate"},
{EVENT_BOOK_KLINE_INDEX, "指数K线", "index-candle"},
{EVENT_BOOK_INDEX_TICKERS, "指数行情", "index-tickers"},
/*
订阅私有频道
*/
{EVENT_BOOK_ACCOUNT, "账户", "account"},
{EVENT_BOOK_POSTION, "持仓", "positions"},
{EVENT_BOOK_ORDER, "订单", "orders"},
{EVENT_BOOK_ALG_ORDER, "策略委托订单", "orders-algo"},
{EVENT_BOOK_B_AND_P, "账户余额和持仓", "balance_and_position"},
/*
JRPC
*/
{EVENT_PLACE_ORDER, "下单", "order"},
{EVENT_PLACE_BATCH_ORDERS, "批量下单", "batch-orders"},
{EVENT_CANCEL_ORDER, "撤单", "cancel-order"},
{EVENT_CANCEL_BATCH_ORDERS, "批量撤单", "batch-cancel-orders"},
{EVENT_AMEND_ORDER, "改单", "amend-order"},
{EVENT_AMEND_BATCH_ORDERS, "批量改单", "batch-amend-orders"},
/*
订阅返回数据
注意推送数据channle统一为""
*/
{EVENT_BOOKED_DATA, "普通推送", ""},
{EVENT_DEPTH_DATA, "深度推送", ""},
}
/*
获取事件名称
*/
func (e Event) String() string {
for _, v := range EVENT_TABLE {
eventId := v[0].(Event)
if e == eventId {
return v[1].(string)
}
}
return ""
}
/*
通过事件获取对应的channel信息
对于频道名称有时间周期的 通过参数 pd 传入拼接后返回完整channel信息
*/
func (e Event) GetChannel(pd Period) string {
channel := ""
for _, v := range EVENT_TABLE {
eventId := v[0].(Event)
if e == eventId {
channel = v[2].(string)
break
}
}
if channel == "" {
return ""
}
return channel + string(pd)
}
/*
通过channel信息匹配获取事件类型
*/
func GetEventId(raw string) Event {
evt := EVENT_UNKNOWN
for _, v := range EVENT_TABLE {
channel := v[2].(string)
if raw == channel {
evt = v[0].(Event)
break
}
regexp := regexp.MustCompile(`^(.*)([1-9][0-9]?[\w])$`)
//regexp := regexp.MustCompile(`^http://www.flysnow.org/([\d]{4})/([\d]{2})/([\d]{2})/([\w-]+).html$`)
substr := regexp.FindStringSubmatch(raw)
//fmt.Println(substr)
if len(substr) >= 2 {
if substr[1] == channel {
evt = v[0].(Event)
break
}
}
}
return evt
}
// 时间维度
type Period string
const (
// 年
PERIOD_1YEAR Period = "1Y"
// 月
PERIOD_6Mon Period = "6M"
PERIOD_3Mon Period = "3M"
PERIOD_1Mon Period = "1M"
// 周
PERIOD_1WEEK Period = "1W"
// 天
PERIOD_5DAY Period = "5D"
PERIOD_3DAY Period = "3D"
PERIOD_2DAY Period = "2D"
PERIOD_1DAY Period = "1D"
// 小时
PERIOD_12HOUR Period = "12H"
PERIOD_6HOUR Period = "6H"
PERIOD_4HOUR Period = "4H"
PERIOD_2HOUR Period = "2H"
PERIOD_1HOUR Period = "1H"
// 分钟
PERIOD_30MIN Period = "30m"
PERIOD_15MIN Period = "15m"
PERIOD_5MIN Period = "5m"
PERIOD_3MIN Period = "3m"
PERIOD_1MIN Period = "1m"
// 缺省
PERIOD_NONE Period = ""
)
// 深度枚举
const (
DEPTH_SNAPSHOT = "snapshot"
DEPTH_UPDATE = "update"
)