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 }