mirror of
https://github.com/injoyai/tdx.git
synced 2025-11-26 21:25:35 +08:00
修复codes的LastPrice价格不对的问题,只做了简单验证
This commit is contained in:
@@ -3,20 +3,18 @@ package main
|
|||||||
import (
|
import (
|
||||||
"github.com/injoyai/logs"
|
"github.com/injoyai/logs"
|
||||||
"github.com/injoyai/tdx"
|
"github.com/injoyai/tdx"
|
||||||
|
"github.com/injoyai/tdx/example/common"
|
||||||
"github.com/injoyai/tdx/protocol"
|
"github.com/injoyai/tdx/protocol"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
c, err := tdx.Dial("124.71.187.122:7709")
|
common.Test(func(c *tdx.Client) {
|
||||||
logs.PanicErr(err)
|
resp, err := c.GetCode(protocol.ExchangeSH, 369)
|
||||||
|
logs.PanicErr(err)
|
||||||
|
|
||||||
resp, err := c.GetCode(protocol.ExchangeSH, 369)
|
for i, v := range resp.List {
|
||||||
logs.PanicErr(err)
|
logs.Debug(i, v, v.LastPrice)
|
||||||
|
}
|
||||||
for i, v := range resp.List {
|
logs.Debug("总数:", resp.Count)
|
||||||
logs.Debug(i, v)
|
})
|
||||||
}
|
|
||||||
logs.Debug("总数:", resp.Count)
|
|
||||||
|
|
||||||
select {}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ func (code) Decode(bs []byte) (*CodeResp, error) {
|
|||||||
Multiple: Uint16(bs[6:8]),
|
Multiple: Uint16(bs[6:8]),
|
||||||
Name: string(UTF8ToGBK(bs[8:16])),
|
Name: string(UTF8ToGBK(bs[8:16])),
|
||||||
Decimal: int8(bs[20]),
|
Decimal: int8(bs[20]),
|
||||||
LastPrice: getVolume(Uint32(bs[21:25])),
|
LastPrice: getVolume2(Uint32(bs[21:25])),
|
||||||
}
|
}
|
||||||
//logs.Debug(bs[25:29]) //26和28字节 好像是枚举(基本是44,45和34,35)
|
//logs.Debug(bs[25:29]) //26和28字节 好像是枚举(基本是44,45和34,35)
|
||||||
bs = bs[29:]
|
bs = bs[29:]
|
||||||
|
|||||||
@@ -19,7 +19,10 @@ func Test_stockKline_Decode(t *testing.T) {
|
|||||||
t.Error(err)
|
t.Error(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
resp, err := MKline.Decode(bs, 9)
|
resp, err := MKline.Decode(bs, KlineCache{
|
||||||
|
Type: 9,
|
||||||
|
Kind: "",
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -195,6 +195,46 @@ func getVolume(val uint32) (volume float64) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getVolume2(val uint32) float64 {
|
||||||
|
ivol := int32(val)
|
||||||
|
logpoint := ivol >> 24 // 提取最高字节(原8*3移位)
|
||||||
|
hleax := (ivol >> 16) & 0xff // 提取次高字节
|
||||||
|
lheax := (ivol >> 8) & 0xff // 提取第三字节
|
||||||
|
lleax := ivol & 0xff // 提取最低字节
|
||||||
|
|
||||||
|
dwEcx := logpoint*2 - 0x7f // 基础指数计算
|
||||||
|
dbl_xmm6 := math.Exp2(float64(dwEcx)) // 核心指数计算仅一次
|
||||||
|
|
||||||
|
// 计算dbl_xmm4
|
||||||
|
var dbl_xmm4 float64
|
||||||
|
if hleax > 0x80 {
|
||||||
|
// 高位分支:合并指数计算
|
||||||
|
dbl_xmm4 = dbl_xmm6 * (64.0 + float64(hleax&0x7f)) / 64.0
|
||||||
|
} else {
|
||||||
|
// 低位分支:复用核心指数
|
||||||
|
dbl_xmm4 = dbl_xmm6 * float64(hleax) / 128.0
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算缩放因子
|
||||||
|
scale := 1.0
|
||||||
|
if (hleax & 0x80) != 0 {
|
||||||
|
scale = 2.0
|
||||||
|
}
|
||||||
|
|
||||||
|
// 预计算常量的倒数,优化除法
|
||||||
|
const (
|
||||||
|
inv32768 = 1.0 / 32768.0 // 2^15
|
||||||
|
inv8388608 = 1.0 / 8388608.0 // 2^23
|
||||||
|
)
|
||||||
|
|
||||||
|
// 计算低位分量
|
||||||
|
dbl_xmm3 := dbl_xmm6 * float64(lheax) * inv32768 * scale
|
||||||
|
dbl_xmm1 := dbl_xmm6 * float64(lleax) * inv8388608 * scale
|
||||||
|
|
||||||
|
// 合计最终结果
|
||||||
|
return dbl_xmm6 + dbl_xmm4 + dbl_xmm3 + dbl_xmm1
|
||||||
|
}
|
||||||
|
|
||||||
// IsStock 是否是股票,示例sz000001
|
// IsStock 是否是股票,示例sz000001
|
||||||
func IsStock(code string) bool {
|
func IsStock(code string) bool {
|
||||||
if len(code) != 8 {
|
if len(code) != 8 {
|
||||||
|
|||||||
@@ -20,5 +20,6 @@ func TestUTF8ToGBK(t *testing.T) {
|
|||||||
|
|
||||||
func Test_getVolume(t *testing.T) {
|
func Test_getVolume(t *testing.T) {
|
||||||
t.Log(getVolume(1237966432))
|
t.Log(getVolume(1237966432))
|
||||||
t.Log(getVolume(1237966432))
|
t.Log(getVolume2(1237966432))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user