exchange.GetData
获取由exchange.SetData()函数加载的数据,或外部链接提供的数据。
exchange.GetData(key)
exchange.GetData(key, timeout)
exchange.GetData(key, timeout, offset)示例
-
获取直接写入数据的调用方式。
javascript/*backtest start: 2020-01-21 00:00:00 end: 2020-02-12 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}] */ function main() { exchange.SetData("test", [[1579536000000, _D(1579536000000)], [1579622400000, _D(1579622400000)], [1579708800000, _D(1579708800000)]]) while(true) { Log(exchange.GetData("test")) Sleep(1000 * 60 * 60 * 24) } }python'''backtest start: 2020-01-21 00:00:00 end: 2020-02-12 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}] ''' def main(): exchange.SetData("test", [[1579536000000, _D(1579536000000/1000)], [1579622400000, _D(1579622400000/1000)], [1579708800000, _D(1579708800000/1000)]]) while True: Log(exchange.GetData("test")) Sleep(1000 * 60 * 60 * 24)rust/*backtest start: 2020-01-21 00:00:00 end: 2020-02-12 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}] */ fn main() { // Rust SDK 中SetData的数据参数为JSON字符串,使用format!拼接数据 let data = format!(r#"[[1579536000000, "{}"], [1579622400000, "{}"], [1579708800000, "{}"]]"#, _D(1579536000000), _D(1579622400000), _D(1579708800000)); exchange.SetData("test", &data); loop { Log!(exchange.GetData("test")); Sleep(1000 * 60 * 60 * 24); } } -
支持通过外部链接请求数据,请求返回的数据格式如下:
json{ "schema":["time","data"], "data":[ [1579536000000, "abc"], [1579622400000, 123], [1579708800000, {"price": 123}], [1579795200000, ["abc", 123, {"price": 123}]] ] }其中
schema定义了数据主体中每条记录的数据格式,该格式固定为["time","data"],与data属性中逐条数据的格式一一对应。data属性用于存储数据主体,每条数据由毫秒级时间戳和数据内容构成(数据内容可以是任何可JSON编码的数据)。以下是使用Go语言编写的测试服务程序:
mylangpackage main import ( "fmt" "net/http" "encoding/json" ) func Handle (w http.ResponseWriter, r *http.Request) { defer func() { fmt.Println("req:", *r) ret := map[string]interface{}{ "schema": []string{"time","data"}, "data": []interface{}{ []interface{}{1579536000000, "abc"}, []interface{}{1579622400000, 123}, []interface{}{1579708800000, map[string]interface{}{"price":123}}, []interface{}{1579795200000, []interface{}{"abc", 123, map[string]interface{}{"price":123}}}, }, } b, _ := json.Marshal(ret) w.Write(b) }() } func main () { fmt.Println("listen http://localhost:9090") http.HandleFunc("/data", Handle) http.ListenAndServe(":9090", nil) }程序接收到请求后返回的应答数据:
json{ "schema":["time","data"], "data":[ [1579536000000, "abc"], [1579622400000, 123], [1579708800000, {"price": 123}], [1579795200000, ["abc", 123, {"price": 123}]] ] }测试策略代码如下:
javascript/*backtest start: 2020-01-21 00:00:00 end: 2020-02-12 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}] */ function main() { while(true) { Log(exchange.GetData("http://xxx.xx.x.xx:9090/data")) Sleep(1000) } }python'''backtest start: 2020-01-21 00:00:00 end: 2020-02-12 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}] ''' def main(): while True: Log(exchange.GetData("http://xxx.xx.x.xx:9090/data")) Sleep(1000)rust/*backtest start: 2020-01-21 00:00:00 end: 2020-02-12 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}] */ fn main() { loop { Log!(exchange.GetData("http://xxx.xx.x.xx:9090/data")); Sleep(1000); } } -
获取外部链接数据的调用方式。
javascriptfunction main() { Log(exchange.GetData("http://xxx.xx.x.xx:9090/data")) Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json")) }pythondef main(): Log(exchange.GetData("http://xxx.xx.x.xx:9090/data")) Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))rustfn main() { Log!(exchange.GetData("http://xxx.xx.x.xx:9090/data")); Log!(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json")); } -
请求在datadata平台上创建的查询数据,应答的数据格式需满足以下要求(schema中必须描述time和data字段):
json{ "data": [], "schema": ["time", "data"] }其中"data"字段为所需的数据内容,且"data"字段中的数据须与"schema"中约定的字段一致。调用
exchange.GetData()函数时,将返回一个JSON对象,例如:{"Time":1579795200000, "Data":"..."}。javascriptfunction main() { Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data")) // 链接中xxx部分为查询数据的编码,此处xxx仅为示例 }pythondef main(): Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data"))rustfn main() { Log!(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data")); // 链接中xxx部分为查询数据的编码,此处xxx仅为示例 }
返回值
| 类型 | 描述 |
object | 返回 |
参数
| 名称 | 类型 | 必填 | 描述 |
key | string | 是 | 数据集合的名称,或数据请求链接。 |
timeout | number | 否 | 用于设置请求外部链接数据时的缓存超时时间,单位为毫秒。实盘时若不传该参数,默认为60000(一分钟),最小为5000。 |
offset | number | 否 | 时间戳,单位为毫秒。返回数据集合中时间不晚于 |
参考
备注
回测时一次性获取数据,实盘时缓存一分钟的数据。在回测系统中,当使用访问接口请求数据的方式时,回测系统会自动为请求添加from(时间戳,单位秒)、to(时间戳,单位秒)、period(底层K线周期,时间戳,单位毫秒)等参数,用于确定要获取数据的时间范围。
Rust中exchange.GetData(key)只接受key参数,返回Result(请求外部链接失败或不存在该数据集合时返回错误);如需指定timeout、offset,请使用exchange.GetDataWithOptions(key, timeout, offset)。