58 lines
1.6 KiB
Go
58 lines
1.6 KiB
Go
package libs
|
|
|
|
import (
|
|
"big-qmt/go-client/config"
|
|
"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 {
|
|
SignalKey string `json:"signal_key"`
|
|
Code string `json:"code"`
|
|
Name string `json:"name"`
|
|
Desc string `json:"desc"`
|
|
LastClose float64 `json:"last_close"`
|
|
TechIndicator map[string]float64 `json:"tech_indicator"`
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
// FetchSignals 启动时读取信号,运行期间直接使用内存数据。
|
|
func FetchSignal(subUrl string) (*SignalResult, error) {
|
|
// gen url.
|
|
fullUrl := fmt.Sprintf("%s%s?t=%s", API_HOST, subUrl, randStr(16))
|
|
// doing
|
|
payload, err := GetJSON(fullUrl, HTTPTimeout)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("开仓信号获取失败: %s %v", fullUrl, err)
|
|
}
|
|
|
|
var result SignalResult
|
|
err = json.Unmarshal(payload, &result)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("开仓信号解析失败: %s %v", fullUrl, err)
|
|
}
|
|
return &result, nil
|
|
}
|