输入/搜索内容
内置函数
Global
Log
Market
exchange.GetTicker
exchange.GetDepth
exchange.GetTrades
exchange.GetRecords
exchange.GetPeriod
exchange.SetMaxBarLen
exchange.GetRate
exchange.SetData
exchange.GetData
exchange.GetMarkets
exchange.GetTickers
Trade
Account
Futures
Threads
TA
Talib
OS
结构体
内置变量

获取由exchange.SetData()函数加载的数据,或外部链接提供的数据。

exchange.GetData(key)
exchange.GetData(key, timeout)

示例

  • 获取直接写入数据的调用方式示例。

    javascript
    /*backtest start: 2020-01-21 00:00:00 end: 2020-02-12 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}] */ 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":"Futures_CTP","currency":"FUTURES"}] ''' 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":"Futures_CTP","currency":"FUTURES"}] */ fn main() { 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":"Futures_CTP","currency":"FUTURES"}] */ 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":"Futures_CTP","currency":"FUTURES"}] ''' 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":"Futures_CTP","currency":"FUTURES"}] */ 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")) }
    python
    def main(): Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
    rust
    fn main() { Log!(exchange.GetData("http://xxx.xx.x.xx:9090/data")); }
  • 请求在datadata平台上创建的查询数据,要求应答的数据格式如下(schema中必须包含time、data字段的描述):

    json
    { "data": [], "schema": ["time", "data"] }

    其中"data"字段为所需的数据内容,且"data"字段中的数据需与"schema"中约定的字段保持一致。调用exchange.GetData()函数时,将返回一个JSON对象,例如:{"Time":1579795200000, "Data":"..."}。

    javascript
    function main() { // 链接中的xxx部分为查询数据的编码,此处xxx仅为示例。具体查询链接可登录datadata.cn平台创建,也可在优宽量化平台的「数据探索」页面创建 Log(exchange.GetData("https://www.datadata.cn/api/v1/query/xxx/data")) }
    python
    def main(): Log(exchange.GetData("https://www.datadata.cn/api/v1/query/xxx/data"))
    rust
    fn main() { // 链接中的xxx部分为查询数据的编码,此处xxx仅为示例。具体查询链接可登录datadata.cn平台创建,也可在优宽量化平台的「数据探索」页面创建 Log!(exchange.GetData("https://www.datadata.cn/api/v1/query/xxx/data")); }

返回值

类型描述

object

数据集合中的记录。

参数

名称类型必填描述

key

string

是

数据集合的名称。

timeout

number

否

用于设置缓存超时时间,单位为毫秒。实盘时默认的缓存超时时间为一分钟。

参考

备注

回测时一次性获取全部数据,实盘时缓存一分钟的数据。

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