mirror of
https://github.com/injoyai/tdx.git
synced 2025-11-26 21:25:35 +08:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
37eb34beaa | ||
|
|
7bf4839310 | ||
|
|
cbf56d936d |
35
client.go
35
client.go
@@ -422,7 +422,7 @@ func (this *Client) GetHistoryTrade(date, code string, start, count uint16) (*pr
|
|||||||
|
|
||||||
// GetHistoryMinuteTrade 获取历史分时交易
|
// GetHistoryMinuteTrade 获取历史分时交易
|
||||||
// 只能获取昨天及之前的数据,服务器最多返回2000条,count-start<=2000,如果日期输入错误,则返回0
|
// 只能获取昨天及之前的数据,服务器最多返回2000条,count-start<=2000,如果日期输入错误,则返回0
|
||||||
// 历史数据sz000001在20241116只能查到21111112,13年差几天,3141天,或者其他规则
|
// 历史数据只能查到20000609
|
||||||
func (this *Client) GetHistoryMinuteTrade(date, code string, start, count uint16) (*protocol.TradeResp, error) {
|
func (this *Client) GetHistoryMinuteTrade(date, code string, start, count uint16) (*protocol.TradeResp, error) {
|
||||||
code = protocol.AddPrefix(code)
|
code = protocol.AddPrefix(code)
|
||||||
f, err := protocol.MHistoryTrade.Frame(date, code, start, count)
|
f, err := protocol.MHistoryTrade.Frame(date, code, start, count)
|
||||||
@@ -439,13 +439,36 @@ func (this *Client) GetHistoryMinuteTrade(date, code string, start, count uint16
|
|||||||
return result.(*protocol.TradeResp), nil
|
return result.(*protocol.TradeResp), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *Client) GetHistoryTradeAll(date, code string) (*protocol.TradeResp, error) {
|
// GetHistoryTradeFull 获取上市至今的分时成交
|
||||||
return this.GetHistoryMinuteTradeAll(date, code)
|
func (this *Client) GetHistoryTradeFull(code string) (protocol.Trades, error) {
|
||||||
|
ls := protocol.Trades(nil)
|
||||||
|
resp, err := this.GetKlineMonthAll(code)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(resp.List) == 0 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
start := time.Date(resp.List[0].Time.Year(), resp.List[0].Time.Month(), 1, 0, 0, 0, 0, resp.List[0].Time.Location())
|
||||||
|
var res *protocol.TradeResp
|
||||||
|
for ; start.Before(time.Now()); start = start.Add(time.Hour * 24) {
|
||||||
|
res, err = this.GetHistoryTradeDay(start.Format("20060102"), code)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
ls = append(ls, res.List...)
|
||||||
|
}
|
||||||
|
return ls, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetHistoryMinuteTradeAll 获取历史分时全部交易,通过多次请求来拼接,只能获取昨天及之前的数据
|
// GetHistoryTradeDay 获取历史某天分时全部交易,通过多次请求来拼接,只能获取昨天及之前的数据
|
||||||
// 历史数据sz000001在20241116只能查到21111112,13年差几天,3141天,或者其他规则
|
func (this *Client) GetHistoryTradeDay(date, code string) (*protocol.TradeResp, error) {
|
||||||
func (this *Client) GetHistoryMinuteTradeAll(date, code string) (*protocol.TradeResp, error) {
|
return this.GetHistoryMinuteTradeDay(date, code)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetHistoryMinuteTradeDay 获取历史某天分时全部交易,通过多次请求来拼接,只能获取昨天及之前的数据
|
||||||
|
// 历史数据只能查到20000609
|
||||||
|
func (this *Client) GetHistoryMinuteTradeDay(date, code string) (*protocol.TradeResp, error) {
|
||||||
resp := &protocol.TradeResp{}
|
resp := &protocol.TradeResp{}
|
||||||
size := uint16(2000)
|
size := uint16(2000)
|
||||||
for start := uint16(0); ; start += size {
|
for start := uint16(0); ; start += size {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
common.Test(func(c *tdx.Client) {
|
common.Test(func(c *tdx.Client) {
|
||||||
resp, err := c.GetHistoryMinuteTradeAll("20241025", "sz000001")
|
resp, err := c.GetHistoryMinuteTradeDay("20251010", "sh000001")
|
||||||
logs.PanicErr(err)
|
logs.PanicErr(err)
|
||||||
|
|
||||||
for _, v := range resp.List {
|
for _, v := range resp.List {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
func main() {
|
func main() {
|
||||||
common.Test(func(c *tdx.Client) {
|
common.Test(func(c *tdx.Client) {
|
||||||
|
|
||||||
resp, err := c.GetHistoryTradeAll("20251010", "sz000001")
|
resp, err := c.GetHistoryTradeDay("20251010", "sz000001")
|
||||||
logs.PanicErr(err)
|
logs.PanicErr(err)
|
||||||
|
|
||||||
ks := resp.List.Klines()
|
ks := resp.List.Klines()
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ func (this *PullTrade) PullYear(ctx context.Context, m *tdx.Manage, year int, co
|
|||||||
|
|
||||||
var resp *protocol.TradeResp
|
var resp *protocol.TradeResp
|
||||||
err = m.Do(func(c *tdx.Client) error {
|
err = m.Do(func(c *tdx.Client) error {
|
||||||
resp, err = c.GetHistoryTradeAll(date, code)
|
resp, err = c.GetHistoryTradeDay(date, code)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -257,12 +257,16 @@ func (this Klines) Sort() {
|
|||||||
sort.Sort(this)
|
sort.Sort(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kline 计算多个K线,成一个K线
|
func (this Klines) Kline(t time.Time, last Price) *Kline {
|
||||||
func (this Klines) Kline() *Kline {
|
k := &Kline{
|
||||||
if this == nil {
|
Time: t,
|
||||||
return new(Kline)
|
Open: last,
|
||||||
|
High: last,
|
||||||
|
Low: last,
|
||||||
|
Close: last,
|
||||||
|
Volume: 0,
|
||||||
|
Amount: 0,
|
||||||
}
|
}
|
||||||
k := new(Kline)
|
|
||||||
for i, v := range this {
|
for i, v := range this {
|
||||||
switch i {
|
switch i {
|
||||||
case 0:
|
case 0:
|
||||||
@@ -270,34 +274,87 @@ func (this Klines) Kline() *Kline {
|
|||||||
k.High = v.High
|
k.High = v.High
|
||||||
k.Low = v.Low
|
k.Low = v.Low
|
||||||
k.Close = v.Close
|
k.Close = v.Close
|
||||||
case len(this) - 1:
|
default:
|
||||||
|
if k.Open == 0 {
|
||||||
|
k.Open = v.Open
|
||||||
|
}
|
||||||
|
k.High = conv.Select(k.High < v.High, v.High, k.High)
|
||||||
|
k.Low = conv.Select(k.Low > v.Low, v.Low, k.Low)
|
||||||
|
}
|
||||||
k.Close = v.Close
|
k.Close = v.Close
|
||||||
k.Time = v.Time
|
|
||||||
}
|
|
||||||
if v.High > k.High {
|
|
||||||
k.High = v.High
|
|
||||||
}
|
|
||||||
if v.Low < k.Low {
|
|
||||||
k.Low = v.Low
|
|
||||||
}
|
|
||||||
k.Volume += v.Volume
|
k.Volume += v.Volume
|
||||||
k.Amount += v.Amount
|
k.Amount += v.Amount
|
||||||
}
|
}
|
||||||
return k
|
return k
|
||||||
}
|
}
|
||||||
|
|
||||||
// Merge 合并K线,1分钟转成5,15,30分钟等
|
// Merge 合并成其他类型的K线
|
||||||
func (this Klines) Merge(n int) Klines {
|
func (this Klines) Merge(n int) Klines {
|
||||||
if this == nil {
|
if n <= 1 {
|
||||||
return nil
|
return this
|
||||||
}
|
}
|
||||||
ks := []*Kline(nil)
|
ks := Klines(nil)
|
||||||
for i := 0; i < len(this); i += n {
|
ls := Klines(nil)
|
||||||
if i+n > len(this) {
|
for i := 0; ; i++ {
|
||||||
ks = append(ks, this[i:].Kline())
|
if len(this) <= i*n {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if len(this) < (i+1)*n {
|
||||||
|
ls = this[i*n:]
|
||||||
} else {
|
} else {
|
||||||
ks = append(ks, this[i:i+n].Kline())
|
ls = this[i*n : (i+1)*n]
|
||||||
}
|
}
|
||||||
|
if len(ls) == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
last := ls[len(ls)-1]
|
||||||
|
k := ls.Kline(last.Time, ls[0].Open)
|
||||||
|
ks = append(ks, k)
|
||||||
}
|
}
|
||||||
return ks
|
return ks
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//// Kline 计算多个K线,成一个K线
|
||||||
|
//func (this Klines) Kline() *Kline {
|
||||||
|
// if this == nil {
|
||||||
|
// return new(Kline)
|
||||||
|
// }
|
||||||
|
// k := new(Kline)
|
||||||
|
// for i, v := range this {
|
||||||
|
// switch i {
|
||||||
|
// case 0:
|
||||||
|
// k.Open = v.Open
|
||||||
|
// k.High = v.High
|
||||||
|
// k.Low = v.Low
|
||||||
|
// k.Close = v.Close
|
||||||
|
// case len(this) - 1:
|
||||||
|
// k.Close = v.Close
|
||||||
|
// k.Time = v.Time
|
||||||
|
// }
|
||||||
|
// if v.High > k.High {
|
||||||
|
// k.High = v.High
|
||||||
|
// }
|
||||||
|
// if v.Low < k.Low {
|
||||||
|
// k.Low = v.Low
|
||||||
|
// }
|
||||||
|
// k.Volume += v.Volume
|
||||||
|
// k.Amount += v.Amount
|
||||||
|
// }
|
||||||
|
// return k
|
||||||
|
//}
|
||||||
|
|
||||||
|
//// Merge 合并K线,1分钟转成5,15,30分钟等
|
||||||
|
//func (this Klines) Merge(n int) Klines {
|
||||||
|
// if this == nil {
|
||||||
|
// return nil
|
||||||
|
// }
|
||||||
|
// ks := []*Kline(nil)
|
||||||
|
// for i := 0; i < len(this); i += n {
|
||||||
|
// if i+n > len(this) {
|
||||||
|
// ks = append(ks, this[i:].Kline())
|
||||||
|
// } else {
|
||||||
|
// ks = append(ks, this[i:i+n].Kline())
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return ks
|
||||||
|
//}
|
||||||
|
|||||||
Reference in New Issue
Block a user