输入/搜索内容
内置函数
Global
Log
Market
exchange.GetTicker
exchange.GetTickers
exchange.GetDepth
exchange.GetTrades
exchange.GetRecords
exchange.GetMarkets
exchange.GetRawJSON
exchange.SetData
exchange.GetData
Trade
Account
Futures
Exchange
IO
Network
Storage
Threads
TA
Talib
OS
结构体
内置变量与常量
通用约定
交易所

获取由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语言编写的测试服务程序:

    mylang
    package 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); } }
  • 获取外部链接数据的调用方式。

    javascript
    function main() { Log(exchange.GetData("http://xxx.xx.x.xx:9090/data")) Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json")) }
    python
    def main(): Log(exchange.GetData("http://xxx.xx.x.xx:9090/data")) Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))
    rust
    fn 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":"..."}。

    javascript
    function main() { Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data")) // 链接中xxx部分为查询数据的编码,此处xxx仅为示例 }
    python
    def main(): Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data"))
    rust
    fn main() { Log!(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data")); // 链接中xxx部分为查询数据的编码,此处xxx仅为示例 }

返回值

类型描述

object

返回{"Time": ..., "Data": ...}形式的对象,Time为记录的时间戳,Data为记录的数据内容。没有可用的记录时(数据未加载、请求外部链接失败,或所有记录的时间都晚于offset),Data为空值。

参数

名称类型必填描述

key

string

是

数据集合的名称,或数据请求链接。

timeout

number

否

用于设置请求外部链接数据时的缓存超时时间,单位为毫秒。实盘时若不传该参数,默认为60000(一分钟),最小为5000。exchange.SetData()加载的数据不会过期。

offset

number

否

时间戳,单位为毫秒。返回数据集合中时间不晚于offset的最后一条记录;若不传该参数,则为当前时间,即只返回当前时刻已经到达的记录。

参考

备注

回测时一次性获取数据,实盘时缓存一分钟的数据。在回测系统中,当使用访问接口请求数据的方式时,回测系统会自动为请求添加from(时间戳,单位秒)、to(时间戳,单位秒)、period(底层K线周期,时间戳,单位毫秒)等参数,用于确定要获取数据的时间范围。

Rust中exchange.GetData(key)只接受key参数,返回Result(请求外部链接失败或不存在该数据集合时返回错误);如需指定timeout、offset,请使用exchange.GetDataWithOptions(key, timeout, offset)。