mirror of
https://github.com/injoyai/tdx.git
synced 2025-11-26 21:25:35 +08:00
临时解决盘口价格不对的问题,感觉不是很合理
This commit is contained in:
69
client.go
69
client.go
@@ -239,7 +239,7 @@ func (this *Client) GetQuote(codes ...string) (protocol.QuotesResp, error) {
|
|||||||
}
|
}
|
||||||
quotes := result.(protocol.QuotesResp)
|
quotes := result.(protocol.QuotesResp)
|
||||||
|
|
||||||
{ //临时处理下先,后续优化
|
{ //todo 临时处理下先,后续优化,感觉有问题
|
||||||
//判断长度和预期是否一致
|
//判断长度和预期是否一致
|
||||||
if len(quotes) != len(codes) {
|
if len(quotes) != len(codes) {
|
||||||
return nil, fmt.Errorf("预期%d个,实际%d个", len(codes), len(quotes))
|
return nil, fmt.Errorf("预期%d个,实际%d个", len(codes), len(quotes))
|
||||||
@@ -258,6 +258,13 @@ func (this *Client) GetQuote(codes ...string) (protocol.QuotesResp, error) {
|
|||||||
for ii, v := range quotes[i].BuyLevel {
|
for ii, v := range quotes[i].BuyLevel {
|
||||||
quotes[i].BuyLevel[ii].Price = m.Price(v.Price)
|
quotes[i].BuyLevel[ii].Price = m.Price(v.Price)
|
||||||
}
|
}
|
||||||
|
quotes[i].K = protocol.K{
|
||||||
|
Last: m.Price(quotes[i].K.Last),
|
||||||
|
Open: m.Price(quotes[i].K.Open),
|
||||||
|
High: m.Price(quotes[i].K.High),
|
||||||
|
Low: m.Price(quotes[i].K.Low),
|
||||||
|
Close: m.Price(quotes[i].K.Close),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,6 +367,12 @@ func (this *Client) GetHistoryMinuteTradeAll(date, code string) (*protocol.Histo
|
|||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
// GetIndex 获取指数,接口是和k线一样的,但是解析不知道怎么区分(解析方式不一致),所以加一个方法
|
// GetIndex 获取指数,接口是和k线一样的,但是解析不知道怎么区分(解析方式不一致),所以加一个方法
|
||||||
func (this *Client) GetIndex(Type uint8, code string, start, count uint16) (*protocol.KlineResp, error) {
|
func (this *Client) GetIndex(Type uint8, code string, start, count uint16) (*protocol.KlineResp, error) {
|
||||||
code = protocol.AddPrefix(code)
|
code = protocol.AddPrefix(code)
|
||||||
@@ -380,7 +393,7 @@ func (this *Client) GetIndexUntil(Type uint8, code string, f func(k *protocol.Kl
|
|||||||
size := uint16(800)
|
size := uint16(800)
|
||||||
var last *protocol.Kline
|
var last *protocol.Kline
|
||||||
for start := uint16(0); ; start += size {
|
for start := uint16(0); ; start += size {
|
||||||
r, err := this.GetKline(Type, code, start, size)
|
r, err := this.GetIndex(Type, code, start, size)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -406,6 +419,11 @@ func (this *Client) GetIndexUntil(Type uint8, code string, f func(k *protocol.Kl
|
|||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetIndexAll 获取全部k线数据
|
||||||
|
func (this *Client) GetIndexAll(Type uint8, code string) (*protocol.KlineResp, error) {
|
||||||
|
return this.GetIndexUntil(Type, code, func(k *protocol.Kline) bool { return false })
|
||||||
|
}
|
||||||
|
|
||||||
func (this *Client) GetIndexDay(code string, start, count uint16) (*protocol.KlineResp, error) {
|
func (this *Client) GetIndexDay(code string, start, count uint16) (*protocol.KlineResp, error) {
|
||||||
return this.GetIndex(protocol.TypeKlineDay, code, start, count)
|
return this.GetIndex(protocol.TypeKlineDay, code, start, count)
|
||||||
}
|
}
|
||||||
@@ -414,6 +432,31 @@ func (this *Client) GetIndexDayUntil(code string, f func(k *protocol.Kline) bool
|
|||||||
return this.GetIndexUntil(protocol.TypeKlineDay, code, f)
|
return this.GetIndexUntil(protocol.TypeKlineDay, code, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (this *Client) GetIndexDayAll(code string) (*protocol.KlineResp, error) {
|
||||||
|
return this.GetIndexAll(protocol.TypeKlineDay, code)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *Client) GetIndexWeekAll(code string) (*protocol.KlineResp, error) {
|
||||||
|
return this.GetIndexAll(protocol.TypeKlineWeek, code)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *Client) GetIndexMonthAll(code string) (*protocol.KlineResp, error) {
|
||||||
|
return this.GetIndexAll(protocol.TypeKlineMonth, code)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *Client) GetIndexQuarterAll(code string) (*protocol.KlineResp, error) {
|
||||||
|
return this.GetIndexAll(protocol.TypeKlineQuarter, code)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *Client) GetIndexYearAll(code string) (*protocol.KlineResp, error) {
|
||||||
|
return this.GetIndexAll(protocol.TypeKlineYear, code)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
// GetKline 获取k线数据,推荐收盘之后获取,否则会获取到当天的数据
|
// GetKline 获取k线数据,推荐收盘之后获取,否则会获取到当天的数据
|
||||||
func (this *Client) GetKline(Type uint8, code string, start, count uint16) (*protocol.KlineResp, error) {
|
func (this *Client) GetKline(Type uint8, code string, start, count uint16) (*protocol.KlineResp, error) {
|
||||||
code = protocol.AddPrefix(code)
|
code = protocol.AddPrefix(code)
|
||||||
@@ -462,27 +505,7 @@ func (this *Client) GetKlineUntil(Type uint8, code string, f func(k *protocol.Kl
|
|||||||
|
|
||||||
// GetKlineAll 获取全部k线数据
|
// GetKlineAll 获取全部k线数据
|
||||||
func (this *Client) GetKlineAll(Type uint8, code string) (*protocol.KlineResp, error) {
|
func (this *Client) GetKlineAll(Type uint8, code string) (*protocol.KlineResp, error) {
|
||||||
resp := &protocol.KlineResp{}
|
return this.GetKlineUntil(Type, code, func(k *protocol.Kline) bool { return false })
|
||||||
size := uint16(800)
|
|
||||||
var last *protocol.Kline
|
|
||||||
for start := uint16(0); ; start += size {
|
|
||||||
r, err := this.GetKline(Type, code, start, size)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if last != nil && len(r.List) > 0 {
|
|
||||||
last.Last = r.List[len(r.List)-1].Close
|
|
||||||
}
|
|
||||||
if len(r.List) > 0 {
|
|
||||||
last = r.List[0]
|
|
||||||
}
|
|
||||||
resp.Count += r.Count
|
|
||||||
resp.List = append(r.List, resp.List...)
|
|
||||||
if r.Count < size {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return resp, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetKlineMinute 获取一分钟k线数据,每次最多800条,最多只能获取24000条数据
|
// GetKlineMinute 获取一分钟k线数据,每次最多800条,最多只能获取24000条数据
|
||||||
|
|||||||
48
codes.go
48
codes.go
@@ -40,7 +40,7 @@ func NewCodes(c *Client, filename string) (*Codes, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
update := new(UpdateModel)
|
update := new(UpdateModel)
|
||||||
{ //插入一条数据
|
{ //查询或者插入一条数据
|
||||||
has, err := db.Get(update)
|
has, err := db.Get(update)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -57,22 +57,38 @@ func NewCodes(c *Client, filename string) (*Codes, error) {
|
|||||||
Codes: nil,
|
Codes: nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
//设置定时器,每天早上9点更新数据
|
{ //设置定时器,每天早上9点更新数据
|
||||||
task := cron.New(cron.WithSeconds())
|
task := cron.New(cron.WithSeconds())
|
||||||
task.AddFunc("0 0 9 * * *", func() {
|
task.AddFunc("0 0 9 * * *", func() {
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 3; i++ {
|
||||||
if err := cc.Update(); err == nil {
|
if err := cc.Update(); err == nil {
|
||||||
return
|
return
|
||||||
|
}
|
||||||
|
logs.Err(err)
|
||||||
|
<-time.After(time.Minute * 5)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
task.Start()
|
||||||
|
}
|
||||||
|
|
||||||
|
{ //判断是否更新过,更新过则不更新
|
||||||
|
now := time.Now()
|
||||||
|
node := time.Date(now.Year(), now.Month(), now.Day(), 9, 0, 0, 0, time.Local)
|
||||||
|
updateTime := time.Unix(update.Time, 0)
|
||||||
|
if now.Sub(node) > 0 {
|
||||||
|
//当前时间在9点之后,且更新时间在9点之前,需要更新
|
||||||
|
if updateTime.Sub(node) < 0 {
|
||||||
|
return cc, cc.Update()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//当前时间在9点之前,且更新时间在上个节点之前
|
||||||
|
if updateTime.Sub(node.Add(time.Hour*24)) < 0 {
|
||||||
|
return cc, cc.Update()
|
||||||
}
|
}
|
||||||
logs.Err(err)
|
|
||||||
<-time.After(time.Minute * 5)
|
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
task.Start()
|
|
||||||
|
|
||||||
//判断是否更新过,更新过则不更新
|
|
||||||
//time.Unix(update.Time,0).A
|
|
||||||
|
|
||||||
|
//从缓存中加载
|
||||||
return cc, cc.Update(true)
|
return cc, cc.Update(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,7 +134,9 @@ func (this *Codes) Update(byCache ...bool) error {
|
|||||||
codeMap[code.Exchange+code.Code] = code
|
codeMap[code.Exchange+code.Code] = code
|
||||||
}
|
}
|
||||||
this.Codes = codeMap
|
this.Codes = codeMap
|
||||||
return nil
|
//更新时间
|
||||||
|
_, err = this.db.Update(&UpdateModel{Time: time.Now().Unix()})
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Code 更新股票并返回结果
|
// Code 更新股票并返回结果
|
||||||
|
|||||||
Reference in New Issue
Block a user