12 Star 63 Fork 40

海风 / goctp

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
quote_win.go 4.33 KB
一键复制 编辑 原始数据 按行查看 历史
海风 提交于 2021-07-02 14:20 . 增加:行情响应增加ClosePrice
package win
import (
"gitee.com/haifengat/goctp"
ctp "gitee.com/haifengat/goctp/ctpdefine"
)
// Quote 行情接口
type Quote struct {
q *quote
onFrontConnected goctp.OnFrontConnectedType
onRspUserLogin goctp.OnRspUserLoginType
onTick goctp.OnTickType
}
// NewQuote 行情接口实例
func NewQuote() *Quote {
q := new(Quote)
q.q = newQuote()
q.q.regOnFrontConnected(q.onConnected)
q.q.regOnRspUserLogin(q.onUserLogin)
q.q.regOnRtnDepthMarketData(q.onDepthMarketData)
return q
}
// Release 接口消毁
func (q *Quote) Release() {
q.q.Release()
}
// ReqConnect 连接前置
func (q *Quote) ReqConnect(addr string) {
q.q.RegisterFront(addr)
q.q.Init()
}
// ReqLogin 登录
func (q *Quote) ReqLogin(investor, pwd, broker string) {
f := ctp.CThostFtdcReqUserLoginField{}
copy(f.BrokerID[:], broker)
copy(f.UserID[:], investor)
copy(f.Password[:], pwd)
copy(f.UserProductInfo[:], "@haifeng")
q.q.ReqUserLogin(f)
}
// ReqSubscript 订阅行情
func (q *Quote) ReqSubscript(instrument string) {
q.q.SubscribeMarketData([1][]byte{[]byte(instrument)}, 1)
}
// RegOnFrontConnected 注册连接响应
func (q *Quote) RegOnFrontConnected(on goctp.OnFrontConnectedType) {
q.onFrontConnected = on
}
// RegOnRspUserLogin 注册登录响应
func (q *Quote) RegOnRspUserLogin(on goctp.OnRspUserLoginType) {
q.onRspUserLogin = on
}
// RegOnTick 注册行情响应
func (q *Quote) RegOnTick(on goctp.OnTickType) {
q.onTick = on
}
func (q *Quote) onDepthMarketData(dataField *ctp.CThostFtdcDepthMarketDataField) uintptr {
if q.onTick == nil {
return 0
}
tick := goctp.TickField{
TradingDay: goctp.Bytes2String(dataField.TradingDay[:]),
InstrumentID: goctp.Bytes2String(dataField.InstrumentID[:]),
ExchangeID: goctp.Bytes2String(dataField.ExchangeID[:]),
LastPrice: float64(dataField.LastPrice),
OpenPrice: float64(dataField.OpenPrice),
HighestPrice: float64(dataField.HighestPrice),
LowestPrice: float64(dataField.LowestPrice),
Volume: int(dataField.Volume),
Turnover: float64(dataField.Turnover),
OpenInterest: float64(dataField.OpenInterest),
ClosePrice: float64(dataField.ClosePrice),
SettlementPrice: float64(dataField.SettlementPrice),
UpperLimitPrice: float64(dataField.UpperLimitPrice),
LowerLimitPrice: float64(dataField.LowerLimitPrice),
CurrDelta: float64(dataField.CurrDelta),
UpdateTime: goctp.Bytes2String(dataField.UpdateTime[:]),
UpdateMillisec: int(dataField.UpdateMillisec),
BidPrice1: float64(dataField.BidPrice1),
BidVolume1: int(dataField.BidVolume1),
AskPrice1: float64(dataField.AskPrice1),
AskVolume1: int(dataField.AskVolume1),
BidPrice2: float64(dataField.BidPrice2),
BidVolume2: int(dataField.BidVolume2),
AskPrice2: float64(dataField.AskPrice2),
AskVolume2: int(dataField.AskVolume2),
BidPrice3: float64(dataField.BidPrice3),
BidVolume3: int(dataField.BidVolume3),
AskPrice3: float64(dataField.AskPrice3),
AskVolume3: int(dataField.AskVolume3),
BidPrice4: float64(dataField.BidPrice4),
BidVolume4: int(dataField.BidVolume4),
AskPrice4: float64(dataField.AskPrice4),
AskVolume4: int(dataField.AskVolume4),
BidPrice5: float64(dataField.BidPrice5),
BidVolume5: int(dataField.BidVolume5),
AskPrice5: float64(dataField.AskPrice5),
AskVolume5: int(dataField.AskVolume5),
AveragePrice: float64(dataField.AskPrice5),
ActionDay: goctp.Bytes2String(dataField.ActionDay[:]),
}
q.onTick(&tick)
return 0
}
func (q *Quote) onUserLogin(loginField *ctp.CThostFtdcRspUserLoginField, infoField *ctp.CThostFtdcRspInfoField, i int, b bool) uintptr {
if q.onRspUserLogin == nil {
return 0
}
q.onRspUserLogin(&goctp.RspUserLoginField{
TradingDay: string(loginField.TradingDay[:]),
LoginTime: string(loginField.LoginTime[:]),
BrokerID: string(loginField.BrokerID[:]),
UserID: string(loginField.UserID[:]),
FrontID: int(loginField.FrontID),
SessionID: int(loginField.SessionID),
MaxOrderRef: string(loginField.MaxOrderRef[:]),
}, &goctp.RspInfoField{
ErrorID: int(infoField.ErrorID),
ErrorMsg: goctp.Bytes2String(infoField.ErrorMsg[:]),
})
return 0
}
func (q *Quote) onConnected() uintptr {
if q.onFrontConnected == nil {
return 0
}
q.onFrontConnected()
return 0
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/haifengat/goctp.git
git@gitee.com:haifengat/goctp.git
haifengat
goctp
goctp
v0.6.3-20211108

搜索帮助

344bd9b3 5694891 D2dac590 5694891