资源加载中... loading...

自定义数据源范例

指定数据源地址,例如:http://120.24.2.20:9090/data。自定义数据源服务程序使用Golang编写:

package main

import (
    "fmt"
    "net/http"
    "encoding/json"
)

func Handle (w http.ResponseWriter, r *http.Request) {
    // e.g. set on backtest DataSourse: http://xxx.xx.x.xx:9090/data
    // r.URL: /data?custom=0&depth=20&detail=true&eid=Futures_CTP&from=1719745260&period=60000&round=true&symbol=FUTURES_CNY.MA501&to=1720281600&trades=0
    
    fmt.Println("request:", r)
    
    // response
    defer func() {
        // response data
        /* e.g. data
        {
            "detail": {
                "alias": "MA501",
                "baseCurrency": "FUTURES",
                "basePrecision": 1,
                "contractType": "MA501",
                "eid": "Futures_CTP",
                "info": {
                    "CombinationType": 48,
                    "CreateDate": 20240116,
                    "DeliveryMonth": 1,
                    "DeliveryYear": 1501,
                    "EndDelivDate": 20250114,
                    "ExchangeID": "CZCE",
                    "ExchangeInstID": "MA501",
                    "ExpireDate": 20250114,
                    "InstLifePhase": 49,
                    "InstrumentID": "MA501",
                    "InstrumentName": "甲醇1月",
                    "IsTrading": 1,
                    "LongMarginRatio": 0.08,
                    "MaxLimitOrderVolume": 1000,
                    "MaxMarginSideAlgorithm": 48,
                    "MaxMarketOrderVolume": 200,
                    "MinLimitOrderVolume": 1,
                    "MinMarketOrderVolume": 1,
                    "OpenDate": 20240116,
                    "OptionsType": 0,
                    "PositionDateType": 50,
                    "PositionType": 50,
                    "PriceTick": 1,
                    "ProductClass": 49,
                    "ProductID": "MA",
                    "ShortMarginRatio": 0.08,
                    "StartDelivDate": 0,
                    "StrikePrice": 0,
                    "UnderlyingInstrID": "",
                    "UnderlyingMultiple": 1,
                    "VolumeMultiple": 10
                },
                "marginCurrency": "CNY",
                "marginLevel": 12,
                "maxNotional": 10000000,
                "maxQty": 1000,
                "minNotional": 1,
                "minQty": 1,
                "priceTick": 1,
                "quoteCurrency": "CNY",
                "quotePrecision": 0,
                "symbol": "MA501",
                "volumeTick": 1
            },
            "schema": ["time", "open", "high", "low", "close", "vol", "position"],
            "data": [
                [1719795600000, 2632, 2633, 2621, 2625, 13070, 1720510],   // 2024-07-01 09:00:00
                [1719795660000, 2625, 2625, 2621, 2623, 4280, 1720940],    // 2024-07-01 09:01:00
                [1719795720000, 2623, 2626, 2622, 2622, 5320, 1722310],    // 2024-07-01 09:02:00
                [1719795780000, 2622, 2625, 2620, 2625, 3480, 1722160],
                [1719795840000, 2624, 2624, 2622, 2623, 2220, 1723150],
                [1719795900000, 2623, 2624, 2620, 2620, 3080, 1722840],
                [1719795960000, 2621, 2622, 2620, 2620, 3090, 1723850]
            ]
        }
        */
        
        // /* 模拟级Tick
        ret := map[string]interface{}{
            "detail": map[string]interface{}{
                "alias": "MA501",
                "baseCurrency": "FUTURES",
                "basePrecision": 1,
                "contractType": "MA501",
                "eid": "Futures_CTP",
                "info": map[string]interface{}{
                    "CombinationType": 48,
                    "CreateDate": 20240116,
                    "DeliveryMonth": 1,
                    "DeliveryYear": 1501,
                    "EndDelivDate": 20250114,
                    "ExchangeID": "CZCE",
                    "ExchangeInstID": "MA501",
                    "ExpireDate": 20250114,
                    "InstLifePhase": 49,
                    "InstrumentID": "MA501",
                    "InstrumentName": "甲醇1月",
                    "IsTrading": 1,
                    "LongMarginRatio": 0.08,
                    "MaxLimitOrderVolume": 1000,
                    "MaxMarginSideAlgorithm": 48,
                    "MaxMarketOrderVolume": 200,
                    "MinLimitOrderVolume": 1,
                    "MinMarketOrderVolume": 1,
                    "OpenDate": 20240116,
                    "OptionsType": 0,
                    "PositionDateType": 50,
                    "PositionType": 50,
                    "PriceTick": 1,
                    "ProductClass": 49,
                    "ProductID": "MA",
                    "ShortMarginRatio": 0.08,
                    "StartDelivDate": 0,
                    "StrikePrice": 0,
                    "UnderlyingInstrID": "",
                    "UnderlyingMultiple": 1,
                    "VolumeMultiple": 10,
                },
                "marginCurrency": "CNY",
                "marginLevel": 12,
                "maxNotional": 10000000,
                "maxQty": 1000,
                "minNotional": 1,
                "minQty": 1,
                "priceTick": 1,
                "quoteCurrency": "CNY",
                "quotePrecision": 0,
                "symbol": "MA501",
                "volumeTick": 1,
            },
            "schema": []string{"time", "open", "high", "low", "close", "vol", "position"},
            "data": []interface{}{
                []int64{1719795600000, 2632, 2633, 2621, 2625, 13070, 1720510},
                []int64{1719795660000, 2625, 2625, 2621, 2623, 4280, 1720940},
                []int64{1719795720000, 2623, 2626, 2622, 2622, 5320, 1722310},
                []int64{1719795780000, 2622, 2625, 2620, 2625, 3480, 1722160},
                []int64{1719795840000, 2624, 2624, 2622, 2623, 2220, 1723150},
                []int64{1719795900000, 2623, 2624, 2620, 2620, 3080, 1722840},
                []int64{1719795960000, 2621, 2622, 2620, 2620, 3090, 1723850},
            },
        }
        // */
        
        /* 实盘级Tick
        ret := map[string]interface{}{
            "detail": map[string]interface{}{
                "alias": "MA501",
                "baseCurrency": "FUTURES",
                "basePrecision": 1,
                "contractType": "MA501",
                "eid": "Futures_CTP",
                "info": map[string]interface{}{
                    "CombinationType": 48,
                    "CreateDate": 20240116,
                    "DeliveryMonth": 1,
                    "DeliveryYear": 1501,
                    "EndDelivDate": 20250114,
                    "ExchangeID": "CZCE",
                    "ExchangeInstID": "MA501",
                    "ExpireDate": 20250114,
                    "InstLifePhase": 49,
                    "InstrumentID": "MA501",
                    "InstrumentName": "甲醇1月",
                    "IsTrading": 1,
                    "LongMarginRatio": 0.08,
                    "MaxLimitOrderVolume": 1000,
                    "MaxMarginSideAlgorithm": 48,
                    "MaxMarketOrderVolume": 200,
                    "MinLimitOrderVolume": 1,
                    "MinMarketOrderVolume": 1,
                    "OpenDate": 20240116,
                    "OptionsType": 0,
                    "PositionDateType": 50,
                    "PositionType": 50,
                    "PriceTick": 1,
                    "ProductClass": 49,
                    "ProductID": "MA",
                    "ShortMarginRatio": 0.08,
                    "StartDelivDate": 0,
                    "StrikePrice": 0,
                    "UnderlyingInstrID": "",
                    "UnderlyingMultiple": 1,
                    "VolumeMultiple": 10,
                },
                "marginCurrency": "CNY",
                "marginLevel": 12,
                "maxNotional": 10000000,
                "maxQty": 1000,
                "minNotional": 1,
                "minQty": 1,
                "priceTick": 1,
                "quoteCurrency": "CNY",
                "quotePrecision": 0,
                "symbol": "MA501",
                "volumeTick": 1,
            },
            "schema": []string{"time", "asks", "bids", "close", "vol", "position"},
            "data": []interface{}{
                []interface{}{1719795601778, []interface{}{[]int64{2633, 50}},  []interface{}{[]int64{2631, 50}}, 2632, 110410, 1718490},
                []interface{}{1719795602192, []interface{}{[]int64{2632, 120}}, []interface{}{[]int64{2631, 50}}, 2632, 110410, 1718490},
                []interface{}{1719795603873, []interface{}{[]int64{2631, 20}},  []interface{}{[]int64{2630, 600}}, 2631, 110780, 1718790},
                []interface{}{1719795604769, []interface{}{[]int64{2633, 120}}, []interface{}{[]int64{2630, 490}}, 2631, 111300, 1718860},
                []interface{}{1719795605661, []interface{}{[]int64{2632, 200}}, []interface{}{[]int64{2631, 30}}, 2632, 111750, 1718880},
            },
        }
        */
        
        b, _ := json.Marshal(ret)
        w.Write(b)
    }()
}
        
func main () {
    fmt.Println("listen http://localhost:9090")
    http.HandleFunc("/data", Handle)
    http.ListenAndServe(":9090", nil)
}

测试策略,JavaScript范例:

/*backtest
start: 2024-07-01 00:00:00
end: 2024-07-07 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES","feeder":"http://120.24.2.20:9090/data"}]
*/

function main() {
    // 对于测试代码,我们通过判断exchange.IO("status")函数,连接成功之后执行测试代码,区别于商品期货策略一般架构
    while (!exchange.IO("status")) {
        Sleep(1000)
    }
    // 设置合约为MA501
    exchange.SetContractType("MA501")
    // 获取ticker数据
    var ticker = exchange.GetTicker()
    // 获取records数据,即K线数据
    var records = exchange.GetRecords()
    // 打印数据
    Log(ticker)
    Log(records)
}
数据格式 本地回测引擎