Files
big-qmt/go-client/libs/signal.go

58 lines
1.6 KiB
Go
Raw Normal View History

2026-08-25 22:35:44 +08:00
package libs
import (
2026-08-26 23:27:42 +08:00
"big-qmt/go-client/config"
2026-08-25 22:35:44 +08:00
"encoding/json"
"fmt"
)
type SignalResult struct {
Code string `json:"code"`
Total int `json:"total"`
Updated string `json:"updated"`
Data map[string]SignalItem `json:"data"`
Message string `json:"message"`
}
type SignalItem struct {
2026-08-26 23:27:42 +08:00
SignalKey string `json:"signal_key"`
2026-08-25 22:35:44 +08:00
Code string `json:"code"`
Name string `json:"name"`
Desc string `json:"desc"`
LastClose float64 `json:"last_close"`
TechIndicator map[string]float64 `json:"tech_indicator"`
}
2026-08-26 23:27:42 +08:00
func InitSignals() ([]*SignalItem, error) {
CacheSignals := make([]*SignalItem, 0)
for key, s := range config.Global.Signals {
result, err := FetchSignal(s.Url)
if err != nil {
return nil, fmt.Errorf("[信号] %s, 获取错误:%v", key, err)
}
for _, item := range result.Data {
item.SignalKey = key
CacheSignals = append(CacheSignals, &item)
}
}
return CacheSignals, nil
}
2026-08-25 22:35:44 +08:00
// FetchSignals 启动时读取信号,运行期间直接使用内存数据。
2026-08-26 23:27:42 +08:00
func FetchSignal(subUrl string) (*SignalResult, error) {
2026-08-25 22:35:44 +08:00
// gen url.
2026-08-26 23:27:42 +08:00
fullUrl := fmt.Sprintf("%s%s?t=%s", API_HOST, subUrl, randStr(16))
2026-08-25 22:35:44 +08:00
// doing
payload, err := GetJSON(fullUrl, HTTPTimeout)
if err != nil {
2026-08-26 23:27:42 +08:00
return nil, fmt.Errorf("开仓信号获取失败: %s %v", fullUrl, err)
2026-08-25 22:35:44 +08:00
}
var result SignalResult
err = json.Unmarshal(payload, &result)
if err != nil {
2026-08-26 23:27:42 +08:00
return nil, fmt.Errorf("开仓信号解析失败: %s %v", fullUrl, err)
2026-08-25 22:35:44 +08:00
}
return &result, nil
}