리소스 로딩... 로딩...

사용자 지정 데이터 소스

FMZ 양자 거래 플랫폼의 백테스팅 시스템은 사용자 지정 데이터 소스를 지원합니다. 백테스팅 시스템은GET사용자 지정 URL (공중 접근 가능한 URL) 를 요청하는 방법. 백테스트를 위한 외부 데이터 소스를 얻기 위해 추가 요청 매개 변수는 다음과 같습니다.

매개 변수 의미 설명
기호 기호 이름 포트 시장 데이터, 예를 들어:BTC_USDT, 선물 시장 데이터, 예를 들어:BTC_USDT.swap, 미래에셋 상시 계약금융율 데이터, 예를 들어:BTC_USDT.funding, 퓨처스 영구 계약 가격 지수 데이터, 예를 들어:BTC_USDT.index
eid 교환 예를 들어 OKX, Futures_OKX
둥글다 데이터 정확성 True는 사용자 지정 데이터 소스가 입력하는 데이터에서 특정 정밀도가 정의된다는 것을 의미합니다. FMZ 양자 거래 플랫폼 백테스팅 시스템이 사용자 지정 데이터 소스에 보내는 요청은 다음과 같이 고정됩니다.round=true
기간 K-라인 데이터 기간 (밀리 초) 예를 들어:600001분 분량입니다
깊이 깊이 레벨 1-20
무역 데이터 분할 필요 여부 true(1) / false(0)
에서 시작 시간 유닉스 시간표
종말 시대 유닉스 시간표
세부사항 기호에 대한 세부 정보를 요청 true는 사용자 지정 데이터 소스가 제공되어야한다는 것을 의미합니다. FMZ 양자 거래 플랫폼 백테스팅 시스템에서 사용자 지정 데이터 소스에 전송되는 요청은 다음과 같이 고정됩니다.detail=true
관습 이 매개 변수는 무시할 수 있습니다.

스팟 거래소 및 선물 거래소 객체의 데이터 소스가 사용자 지정 데이터 소스 (피더) 로 설정되면 백테스팅 시스템은 사용자 지정 데이터 소스 서비스에 요청을 전송합니다.

http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Bitget&from=1351641600&period=86400000&round=true&symbol=BTC_USDT&to=1611244800&trades=1
http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Futures_OKX&from=1351641600&period=86400000&round=true&symbol=BTC_USDT.swap&to=1611244800&trades=1

데이터 형식

반환 된 형식은 다음 두 가지 형식 중 하나여야 합니다. 시스템에서 자동으로 인식됩니다):

  • 시뮬레이션 레벨 Tick, 다음은 JSON 데이터의 예입니다.

    {
        "detail": {
            "eid": "Binance",
            "symbol": "BTC_USDT",
            "alias": "BTCUSDT",
            "baseCurrency": "BTC",
            "quoteCurrency": "USDT",
            "marginCurrency": "USDT",
            "basePrecision": 5,
            "quotePrecision": 2,
            "minQty": 0.00001,
            "maxQty": 9000,
            "minNotional": 5,
            "maxNotional": 9000000,
            "priceTick": 0.01,
            "volumeTick": 0.00001,
            "marginLevel": 10
        },
        "schema":["time", "open", "high", "low", "close", "vol"],
        "data":[
            [1564315200000, 9531300, 9531300, 9497060, 9497060, 787],
            [1564316100000, 9495160, 9495160, 9474260, 9489460, 338]
        ]
    }
    
  • 보트 레벨 틱, 다음은 JSON 데이터의 예입니다: 틱 레벨 백테스트 데이터 (시장의 깊이에 대한 정보를 포함하고, 깊이 형식은[price, volume]수차례 깊이가 있을 수 있습니다.asks가격 상승 순서에서는bids가격 하락 순서)

    {
        "detail": {
            "eid": "Binance",
            "symbol": "BTC_USDT",
            "alias": "BTCUSDT",
            "baseCurrency": "BTC",
            "quoteCurrency": "USDT",
            "marginCurrency": "USDT",
            "basePrecision": 5,
            "quotePrecision": 2,
            "minQty": 0.00001,
            "maxQty": 9000,
            "minNotional": 5,
            "maxNotional": 9000000,
            "priceTick": 0.01,
            "volumeTick": 0.00001,
            "marginLevel": 10
        },
        "schema":["time", "asks", "bids", "trades", "close", "vol"],
        "data":[
            [1564315200000, [[9531300, 10]], [[9531300, 10]], [[1564315200000, 0, 9531300, 10]], 9497060, 787],
            [1564316100000, [[9531300, 10]], [[9531300, 10]], [[1564316100000, 0, 9531300, 10]], 9497060, 787]
        ]
    }
    
필드 설명
세부사항 요청된 데이터 유형에 대한 자세한 정보

통화 이름, 거래 통화, 정확성, 최소 주문량 등등 스키마. 데이터의 열의 속성을 지정합니다. 대문자 감수성이 있고 시간적 제한이 있는 배열입니다. 높은, 낮은, 닫는, 볼, 요청, 제안, 거래 데이터. 기둥 구조, 스케마에 따라 기록된 데이터. 설정.

세부 필드

필드 설명
eid 거래 ID, 점유 및 선물의
어떤 교환은 다른 효력을 가지고 있습니다.
기호 거래 상품 코드
별명 현재에 대응하는 교환의 기호
거래 상품 코드
기본 통화 거래 통화
코트화폐 지폐
마진화폐 마진 화폐
기본정확성 거래 통화 정확성
인용어정확함 가격화 통화 정확성
분량 최소 주문량
최대 최대 주문량
미노니셔널 최소 주문 금액
최대 최대 주문 금액
가격표 가격 점프
부피 주문 양의 최소 변화 값 (한 점프)
주문량)
마진수준 미래에셋자산의 레버리지 가치
계약 유형 상시계약은 다음과 같습니다.swap, 그

백테스트 시스템은 재정율과 가격 인덱스를 계속 보낼 것입니다. 요청합니다.

특별 열 속성asks, bids, trades:

필드 설명 언급
요청/입찰 [가격, 부피],...] 예를 들어,

Live Trading Level Tick데이터 예제:[[9531300, 10]]자, 이제 시작해보죠. 트레이드 시간, 방향, 가격, 규모,... 예를 들어,Live Trading Level Tick데이터 예제:[[1564315200000, 0, 9531300, 10]] |

미래에셋 거래소의 영구 계약에 대한 역 테스트를 할 때, 사용자 정의 또한 데이터 소스에는 추가적인 지원율 데이터와 가격도 필요합니다. 백테스팅 시스템은 계속 요청을 보낼 것입니다. 요청된 시장 데이터가 반환될 때만 그리고 반환 구조의 세부 필드는"contractType": "swap"키-값 쌍

백테스팅 시스템이 자금율 데이터를 받을 때, 가격지수 데이터를 계속 요청합니다.

자금 조달 비율 데이터 구조는 다음과 같습니다.

{
    "detail": {
        "eid": "Futures_Binance",
        "symbol": "BTC_USDT.funding",
        "alias": "BTC_USDT.funding",
        "baseCurrency": "BTC",
        "quoteCurrency": "USDT",
        "marginCurrency": "",
        "basePrecision": 8,
        "quotePrecision": 8,
        "minQty": 1,
        "maxQty": 10000,
        "minNotional": 1,
        "maxNotional": 100000000,
        "priceTick": 1e-8,
        "volumeTick": 1e-8,
        "marginLevel": 10
    },
    "schema": [
        "time",
        "open",
        "high",
        "low",
        "close",
        "vol"
    ],
    "data": [
        [
            1584921600000,
            -16795,
            -16795,
            -16795,
            -16795,
            0
        ],
        [
            1584950400000,
            -16294,
            -16294,
            -16294,
            -16294,
            0
        ]
        // ...
    ]
}
  • 인접한 기간 사이의 간격은 8시간입니다.
  • 예를 들어, 바이낸스의 자금율은 8시간마다 업데이트됩니다. 자금율 자료는 -16795인가요? 왜냐하면 K-라인 데이터와 마찬가지로 네트워크 전송 중에 부동 소수점 정밀의 손실을 피하기 위해 데이터는 정수 유형을 사용하기 때문에, 자금 조달율 데이터는 또한 부정적일 수 있기 때문입니다.

백테스팅에서 지원율 데이터 요청의 예제 시스템은 다음과 같습니다.

http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Futures_Binance&from=1351641600&period=86400000&round=true&symbol=BTC_USDT.funding&to=1611244800&trades=0

가격지수 데이터 구조는 다음과 같습니다.


{
    "detail": {
        "eid": "Futures_Binance",
        "symbol": "BTC_USDT.index",
        "alias": "BTCUSDT",
        "baseCurrency": "BTC",
        "quoteCurrency": "USDT",
        "contractType": "index",
        "marginCurrency": "USDT",
        "basePrecision": 3,
        "quotePrecision": 1,
        "minQty": 0.001,
        "maxQty": 1000,
        "minNotional": 0,
        "maxNotional": 1.7976931348623157e+308,
        "priceTick": 0.1,
        "volumeTick": 0.001,
        "marginLevel": 10,
        "volumeMultiple": 1
    },
    "schema": [
        "time",
        "open",
        "high",
        "low",
        "close",
        "vol"
    ],
    "data": [
        [1584921600000, 58172, 59167, 56902, 58962, 0],
        [1584922500000, 58975, 59428, 58581, 59154, 0],
        // ...
    ]
}

백테스팅에 의해 전송된 가격 지표 데이터 요청의 예 시스템은 다음과 같습니다.

http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Futures_Binance&from=1351641600&period=86400000&round=true&symbol=BTC_USDT.index&to=1611244800&trades=0

사용자 지정 데이터 소스의 예제

데이터 소스 주소를 지정합니다.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

    // request: GET http://xxx.xx.x.xx:9090/data?custom=0&depth=20&detail=true&eid=OKX&from=1584921600&period=86400000&round=true&symbol=BTC_USDT&to=1611244800&trades=1
    //              http://xxx.xx.x.xx:9090/data?custom=0&depth=20&detail=true&eid=Futures_Binance&from=1599958800&period=3600000&round=true&symbol=BTC_USDT.swap&to=1611244800&trades=0
    fmt.Println("request:", r)

    // response
    defer func() {
        // response data
        /* e.g. data
        {
            "detail": {
                "eid": "Binance",
                "symbol": "BTC_USDT",
                "alias": "BTCUSDT",
                "baseCurrency": "BTC",
                "quoteCurrency": "USDT",
                "marginCurrency": "USDT",
                "basePrecision": 5,
                "quotePrecision": 2,
                "minQty": 0.00001,
                "maxQty": 9000,
                "minNotional": 5,
                "maxNotional": 9000000,
                "priceTick": 0.01,
                "volumeTick": 0.00001,
                "marginLevel": 10
            },
            "schema": [
                "time",
                "open",
                "high",
                "low",
                "close",
                "vol"
            ],
            "data": [
                [1610755200000, 3673743, 3795000, 3535780, 3599498, 8634843151],
                [1610841600000, 3599498, 3685250, 3385000, 3582861, 8015772738],
                [1610928000000, 3582499, 3746983, 3480000, 3663127, 7069811875],
                [1611014400000, 3662246, 3785000, 3584406, 3589149, 7961130777],
                [1611100800000, 3590194, 3641531, 3340000, 3546823, 8936842292],
                [1611187200000, 3546823, 3560000, 3007100, 3085013, 13500407666],
                [1611273600000, 3085199, 3382653, 2885000, 3294517, 14297168405],
                [1611360000000, 3295000, 3345600, 3139016, 3207800, 6459528768],
                [1611446400000, 3207800, 3307100, 3090000, 3225990, 5797803797],
                [1611532800000, 3225945, 3487500, 3191000, 3225420, 8849922692]
            ]
        }
        */
        
        // /* Simulation level Tick
        ret := map[string]interface{}{
            "detail": map[string]interface{}{
                "eid": "Binance",
                "symbol": "BTC_USDT",
                "alias": "BTCUSDT",
                "baseCurrency": "BTC",
                "quoteCurrency": "USDT",
                "marginCurrency": "USDT",
                "basePrecision": 5,
                "quotePrecision": 2,
                "minQty": 0.00001,
                "maxQty": 9000,
                "minNotional": 5,
                "maxNotional": 9000000,
                "priceTick": 0.01,
                "volumeTick": 0.00001,
                "marginLevel": 10,
            },
            "schema": []string{"time","open","high","low","close","vol"},
            "data": []interface{}{
                []int64{1610755200000, 3673743, 3795000, 3535780, 3599498, 8634843151},  // 1610755200000 : 2021-01-16 08:00:00
                []int64{1610841600000, 3599498, 3685250, 3385000, 3582861, 8015772738},  // 1610841600000 : 2021-01-17 08:00:00
                []int64{1610928000000, 3582499, 3746983, 3480000, 3663127, 7069811875},
                []int64{1611014400000, 3662246, 3785000, 3584406, 3589149, 7961130777},
                []int64{1611100800000, 3590194, 3641531, 3340000, 3546823, 8936842292},
                []int64{1611187200000, 3546823, 3560000, 3007100, 3085013, 13500407666},
                []int64{1611273600000, 3085199, 3382653, 2885000, 3294517, 14297168405},
                []int64{1611360000000, 3295000, 3345600, 3139016, 3207800, 6459528768},
                []int64{1611446400000, 3207800, 3307100, 3090000, 3225990, 5797803797},
                []int64{1611532800000, 3225945, 3487500, 3191000, 3225420, 8849922692},
            },
        }
        // */

        /* Bot level Tick
        ret := map[string]interface{}{
            "detail": map[string]interface{}{
                "eid": "Binance",
                "symbol": "BTC_USDT",
                "alias": "BTCUSDT",
                "baseCurrency": "BTC",
                "quoteCurrency": "USDT",
                "marginCurrency": "USDT",
                "basePrecision": 5,
                "quotePrecision": 2,
                "minQty": 0.00001,
                "maxQty": 9000,
                "minNotional": 5,
                "maxNotional": 9000000,
                "priceTick": 0.01,
                "volumeTick": 0.00001,
                "marginLevel": 10,
            },
            "schema": []string{"time", "asks", "bids", "trades", "close", "vol"},
            "data": []interface{}{
                []interface{}{1610755200000, []interface{}{[]int64{9531300, 10}}, []interface{}{[]int64{9531300, 10}}, []interface{}{[]int64{1610755200000, 0, 9531300, 10}}, 9497060, 787},
                []interface{}{1610841600000, []interface{}{[]int64{9531300, 15}}, []interface{}{[]int64{9531300, 15}}, []interface{}{[]int64{1610841600000, 0, 9531300, 11}}, 9497061, 789},                
            },
        }
        */

        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: 2021-01-16 08:00:00
end: 2021-01-22 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"OKX","currency":"BTC_USDT","feeder":"http://120.24.2.20:9090/data"}]
args: [["number",2]]
*/

function main() {
    var ticker = exchange.GetTicker()
    var records = exchange.GetRecords()
    Log(exchange.GetName(), exchange.GetCurrency())
    Log(ticker)
    Log(records)
}
백테스트 설정을 저장 로컬 백테스트 엔진