代码拉取完成,页面将自动刷新
package quotes
// todo API未有效解析
import (
"bytes"
"encoding/binary"
"encoding/hex"
"gitee.com/quant1x/exchange"
"gitee.com/quant1x/gotdx/internal"
"gitee.com/quant1x/gotdx/proto"
"gitee.com/quant1x/gox/api"
)
type MinuteTimePackage struct {
reqHeader *StdRequestHeader
respHeader *StdResponseHeader
request *MinuteTimeRequest
reply *MinuteTimeReply
contentHex string
}
type MinuteTimeRequest struct {
Market uint16
Code [6]byte
Date uint32
}
type MinuteTimeReply struct {
Count uint16
List []MinuteTime
}
type MinuteTime struct {
Price float32
Vol int
}
func NewMinuteTimePackage() *MinuteTimePackage {
obj := new(MinuteTimePackage)
obj.reqHeader = new(StdRequestHeader)
obj.respHeader = new(StdResponseHeader)
obj.request = new(MinuteTimeRequest)
obj.reply = new(MinuteTimeReply)
obj.reqHeader.ZipFlag = proto.FlagNotZipped
obj.reqHeader.SeqID = internal.SequenceId()
obj.reqHeader.PacketType = 0x00
//obj.reqHeader.PkgLen1 =
//obj.reqHeader.PkgLen2 =
//obj.reqHeader.Method = 0x051d
obj.reqHeader.Method = proto.STD_MSG_MINUTETIME_DATA
obj.contentHex = ""
return obj
}
func (obj *MinuteTimePackage) SetParams(req *MinuteTimeRequest) {
obj.request = req
}
func (obj *MinuteTimePackage) Serialize() ([]byte, error) {
obj.reqHeader.PkgLen1 = 0x0e
obj.reqHeader.PkgLen2 = 0x0e
buf := new(bytes.Buffer)
err := binary.Write(buf, binary.LittleEndian, obj.reqHeader)
err = binary.Write(buf, binary.LittleEndian, obj.request)
b, err := hex.DecodeString(obj.contentHex)
buf.Write(b)
//b, err := hex.DecodeString(obj.contentHex)
//buf.Write(b)
//err = binary.Write(buf, binary.LittleEndian, uint16(len(obj.stocks)))
return buf.Bytes(), err
}
func (obj *MinuteTimePackage) UnSerialize(header interface{}, data []byte) error {
obj.respHeader = header.(*StdResponseHeader)
market := exchange.MarketType(obj.request.Market)
code := api.Bytes2String(obj.request.Code[:])
pos := 0
err := binary.Read(bytes.NewBuffer(data[pos:pos+2]), binary.LittleEndian, &obj.reply.Count)
pos += 2
// 跳过4个字节
pos += 6
pos += 3
baseUnit := internal.BaseUnit(market, code)
lastPrice := 0
//TODO: ETF的数据不对需要进一步处理
for index := uint16(0); index < obj.reply.Count; index++ {
rawPrice := internal.DecodeVarint(data, &pos)
reversed1 := internal.DecodeVarint(data, &pos)
_ = reversed1
vol := internal.DecodeVarint(data, &pos)
lastPrice += rawPrice
p := float32(lastPrice) / float32(baseUnit)
ele := MinuteTime{p, vol}
obj.reply.List = append(obj.reply.List, ele)
}
return err
}
func (obj *MinuteTimePackage) Reply() interface{} {
return obj.reply
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。