mirror of
https://github.com/injoyai/tdx.git
synced 2025-11-26 21:25:35 +08:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
80d6d6dfc5 | ||
|
|
a27461740a | ||
|
|
7a9d59f8f1 | ||
|
|
cba35308f6 |
20
client.go
20
client.go
@@ -15,6 +15,16 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
LevelNone = 0
|
||||
LevelDebug = 2
|
||||
LevelWrite = 3
|
||||
LevelRead = 4
|
||||
LevelInfo = 5
|
||||
LevelError = 7
|
||||
LevelAll = 999
|
||||
)
|
||||
|
||||
// WithDebug 是否打印通讯数据
|
||||
func WithDebug(b ...bool) client.Option {
|
||||
return func(c *client.Client) {
|
||||
@@ -22,6 +32,12 @@ func WithDebug(b ...bool) client.Option {
|
||||
}
|
||||
}
|
||||
|
||||
func WithLevel(level int) client.Option {
|
||||
return func(c *client.Client) {
|
||||
c.Logger.SetLevel(level)
|
||||
}
|
||||
}
|
||||
|
||||
// WithRedial 断线重连
|
||||
func WithRedial(b ...bool) client.Option {
|
||||
return func(c *client.Client) {
|
||||
@@ -31,6 +47,7 @@ func WithRedial(b ...bool) client.Option {
|
||||
|
||||
// DialDefault 默认连接方式
|
||||
func DialDefault(op ...client.Option) (cli *Client, err error) {
|
||||
op = append([]client.Option{WithRedial()}, op...)
|
||||
return DialHostsRange(Hosts, op...)
|
||||
}
|
||||
|
||||
@@ -229,6 +246,9 @@ func (this *Client) GetQuote(codes ...string) (protocol.QuotesResp, error) {
|
||||
if DefaultCodes == nil {
|
||||
return nil, errors.New("DefaultCodes未初始化")
|
||||
}
|
||||
for i := range codes {
|
||||
codes[i] = DefaultCodes.AddExchange(codes[i])
|
||||
}
|
||||
f, err := protocol.MQuote.Frame(codes...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
30
codes.go
30
codes.go
@@ -97,7 +97,7 @@ type Codes struct {
|
||||
db *xorm.Engine //数据库实例
|
||||
Map map[string]*CodeModel //股票缓存
|
||||
list []*CodeModel //列表方式缓存
|
||||
exchanges map[string]string //交易所缓存
|
||||
exchanges map[string][]string //交易所缓存
|
||||
}
|
||||
|
||||
// GetName 获取股票名称
|
||||
@@ -140,7 +140,11 @@ func (this *Codes) GetExchange(code string) protocol.Exchange {
|
||||
return protocol.ExchangeSZ
|
||||
}
|
||||
}
|
||||
exchange := this.exchanges[code]
|
||||
var exchange string
|
||||
exchanges := this.exchanges[code]
|
||||
if len(exchanges) >= 1 {
|
||||
exchange = exchanges[0]
|
||||
}
|
||||
if len(code) == 8 {
|
||||
exchange = code[0:2]
|
||||
}
|
||||
@@ -154,6 +158,24 @@ func (this *Codes) GetExchange(code string) protocol.Exchange {
|
||||
}
|
||||
}
|
||||
|
||||
func (this *Codes) AddExchange(code string) string {
|
||||
if exchanges := this.exchanges[code]; len(exchanges) == 1 {
|
||||
return exchanges[0] + code
|
||||
}
|
||||
if len(code) == 6 {
|
||||
switch {
|
||||
case code[:1] == "6":
|
||||
return protocol.ExchangeSH.String() + code
|
||||
case code[:1] == "0":
|
||||
return protocol.ExchangeSZ.String() + code
|
||||
case code[:2] == "30":
|
||||
return protocol.ExchangeSZ.String() + code
|
||||
}
|
||||
return this.GetExchange(code).String() + code
|
||||
}
|
||||
return code
|
||||
}
|
||||
|
||||
// Update 更新数据,从服务器或者数据库
|
||||
func (this *Codes) Update(byDB ...bool) error {
|
||||
codes, err := this.GetCodes(len(byDB) > 0 && byDB[0])
|
||||
@@ -161,10 +183,10 @@ func (this *Codes) Update(byDB ...bool) error {
|
||||
return err
|
||||
}
|
||||
codeMap := make(map[string]*CodeModel)
|
||||
exchanges := make(map[string]string)
|
||||
exchanges := make(map[string][]string)
|
||||
for _, code := range codes {
|
||||
codeMap[code.Exchange+code.Code] = code
|
||||
exchanges[code.Code] = code.Exchange
|
||||
exchanges[code.Code] = append(exchanges[code.Code], code.Exchange)
|
||||
}
|
||||
this.Map = codeMap
|
||||
this.list = codes
|
||||
|
||||
@@ -21,7 +21,7 @@ func main() {
|
||||
b1cb74001c00000000000d005100bd00789c6378c1cecb252ace6066c5b4898987b9050ed1f90cc5b74c18a5bc18c1b43490fecff09c81819191f13fc3c9f3bb169f5e7dfefeb5ef57f7199a305009308208e5b32bb6bcbf70148712002d7f1e13
|
||||
b1cb74000c02000000003e05ac00ac000102020000303030303031601294121a1c2d4eadabcf0ed412aae5fc01afb0024561124fbcc08301afa47900b2e3174100bf68871a4201b741b6144302bb09af334403972e96354504ac09b619560e00000000f8ff601201363030303038b60fba04060607429788a70efa04ada37ab2531c12974d91e7449dbc354184b6010001844bad324102b5679ea1014203a65abd8d0143048a6ba4dd01440587e101b3d2029613000000000000b60f
|
||||
*/
|
||||
resp, err := c.GetQuote("sz000001", "sh600000", "sz159558")
|
||||
resp, err := c.GetQuote("000001", "600000", "159558", "010504")
|
||||
logs.PanicErr(err)
|
||||
|
||||
for _, v := range resp {
|
||||
|
||||
@@ -77,7 +77,10 @@ func (this *Kline) RisePrice() Price {
|
||||
|
||||
// RiseRate 涨跌比例/涨跌幅,第一个数据不准,仅做参考
|
||||
func (this *Kline) RiseRate() float64 {
|
||||
return float64(this.RisePrice()) / float64(this.Open) * 100
|
||||
if this.Last == 0 {
|
||||
return float64(this.Close-this.Open) / float64(this.Open) * 100
|
||||
}
|
||||
return float64(this.Close-this.Last) / float64(this.Last) * 100
|
||||
}
|
||||
|
||||
type kline struct{}
|
||||
|
||||
@@ -77,7 +77,7 @@ func (this *Workday) Update() error {
|
||||
|
||||
now := time.Now()
|
||||
if lastWorkday == nil || lastWorkday.Unix < IntegerDay(now).Unix() {
|
||||
resp, err := this.Client.GetKlineDayAll("sh000001")
|
||||
resp, err := this.Client.GetIndexDayAll("sh000001")
|
||||
if err != nil {
|
||||
logs.Err(err)
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user