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

발명자 양적 거래 플랫폼 API 업그레이드: 전략 디자인 경험을 향상

저자:발명가들의 수량화 - 작은 꿈, 창작: 2024-06-28 09:08:29, 업데이트: 2024-11-01 10:08:12

[TOC]

img

전문

발명가들의 양자 거래 플랫폼은 9년 동안 기술적인 반복을 거쳐 여러 차례 재구성되었다. 그러나 사용자로서 우리는 아마 알아차리지 못했을 것이다. 지난 2년 동안 플랫폼은 사용자 경험에 대한 많은 최적화와 업그레이드를 실시했다. UI의 전체적인 업그레이드, 자주 사용되는 양자 거래 도구의 풍부함, 그리고 더 많은 회색 데이터 지원을 추가했다.

전략 설계가 더 편리하고 거래 논리가 더 명확하고 초보자도 쉽게 사용할 수 있도록 플랫폼은 정책이 사용하는 API 인터페이스를 업그레이드했습니다. 최신 버전의 호스트를 사용하여 새로운 기능을 활성화 할 수 있습니다. 플랫폼은 여전히 오래된 인터페이스의 호출을 최대한 호환합니다.

그럼 이 글을 통해 어떤 인터페이스 업그레이드 업데이트가 있는지, 그리고 현재 API를 호환하기 위해 오래된 정책을 사용하는 데 필요한 변경 사항에 대해 알아보자.

새로운 API 인터페이스

exchange.GetTickers函数

다종양 전략, 전시장 시장을 모니터링하는 전략을 설계하는 데 필수적이다. 이러한 통합시장 인터페이스는 전략을 더 쉽게 개발하기 위해 필수적이며, 반복적인 휠을 피하기 위해 필수적이다. 발명자는 양적 거래 플랫폼을 거래소와 같은 API로 포장했다.

만약 거래소가 이러한 인터페이스 (개인 거래소) 를 가지고 있지 않다면exchange.GetTickers()이 글은 다른 글과 비교해 볼 수 있습니다.

이 함수는 어떤 매개 변수도 없이 거래소에서 모든 종류의 시장 데이터를 실시간으로 반환한다.

exchange.GetTickers()이 함수들은exchange.GetTicker()함수의 모든 종류가 요청되는 버전 (주의 깊게 살펴보면, 두 함수 이름의 차이점은 단 복수일 뿐이다) 이다.

우리는 OKX 현장 시뮬레이션 디스크를 사용하여 환경을 테스트했습니다.

function main() {
    exchange.IO("simulate", true)

    var tickers = exchange.GetTickers()
    if (!tickers) {
        throw "tickers error"
    }

    var tbl = {type: "table", title: "test tickers", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var i in tickers) {
        var ticker = tickers[i]
        tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }

    LogStatus("`" + JSON.stringify(tbl) +  "`")
    return tickers.length
}

img

exchange.CreateOrder函数

새로운exchange.CreateOrder()이 업그레이드의 핵심은 함수입니다.exchange.CreateOrder()함수의 최대 기능은 바로 함수의 매개 변수에서 주문할 품종, 방향 등을 지정하는 것이다. 이렇게 하면 시스템 현재 설정된 거래 쌍, 계약 코드, 거래 방향 등에 의존하지 않는다.

다중 거래 시나리오에서 단일 시나리오에서 설계 복잡성을 크게 감소시킵니다.exchange.CreateOrder()이 함수의 4개의 매개변수는symbolsidepriceamount

OKX 선물 시뮬레이션 디스크 환경 테스트:

function main() {
    exchange.IO("simulate", true)

    var id1 = exchange.CreateOrder("ETH_USDT.swap", "buy", 3300, 1)
    var id2 = exchange.CreateOrder("BTC_USDC.swap", "closebuy", 70000, 1)
    var id3 = exchange.CreateOrder("LTC_USDT.swap", "sell", 110, 1)

    Log("id1:", id1, ", id2:", id2, ", id3:", id3)
}

img

3번만 사용했습니다.exchange.CreateOrder()함수 호출은 세 가지 다른 종류, 다른 방향의 선물 주문을 가져옵니다.

exchange.GetHistoryOrders函数

새로운exchange.GetHistoryOrders()이 함수는 특정 품종의 역사 거래 주문을 얻기 위해 사용되며, 이 함수는 또한 거래소 인터페이스 지원이 필요합니다.

역사 주문을 검색하는 데 있어서, 거래소마다 구현된 인터페이스가 매우 다양합니다:

  • 일부에서는 페이지 분할 조사를 지원하고 일부는 지원하지 않습니다.
  • 일부 거래는 모든 쿼리 윈도우 기간, 즉 N일 이상 주문을 쿼리 할 수 없습니다.
  • 대부분의 거래소에서 정해진 시간에 대한 문의가 지원되지만, 일부에서는 지원하지 않습니다.

이러한 인터페이스를 최대한 호환성으로 포장하기 위해서는 실제 사용에서는 정책의 요구와 기대에 부합하는지 여부에 대한 주의가 필요합니다.

자세한 함수 설명은 여기서 더 이상 설명되지 않습니다. API 문서의 문법 설명서를 참조하십시오:

https://www.fmz.com/syntax-guide#fun_exchange.gethistoryorders

이 프로젝트의 주제는 '동시화폐 현장환경 테스트'입니다.

function main() {
    var orders = exchange.GetHistoryOrders("ETH_USDT")

    // 写入图表
    var tbl = {type: "table", title: "test GetHistoryOrders", cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
    for (var order of orders) {
        tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
    }
    
    LogStatus("orders.length:", orders.length, "\n", "`" + JSON.stringify(tbl) +  "`")
}

img

exchange.GetPositions函数

이전 버전의 데이터 저장 함수는exchange.GetPosition()▲ 이 업그레이드에서는 함수의 이름에 더 잘 어울리는 새로운 취득 보유 함수를 추가했습니다:exchange.GetPositions()▲ 동시에 GetPosition 함수를 호환/ 업그레이드합니다.

두 함수 이름의 차이점은 하나의 끝의 s일 뿐이라는 점에 유의하십시오.

exchange.GetPositions()함수는 세 가지 형태의 호출이 있습니다.

  • exchange.GetPositions (역주) 어떤 변수를 전달하지 않을 때,거래 / 계약 코드이 설정은 현재 차원의 모든 품종의 저장 데이터를 요청합니다.

  • exchange.GetPositions (ETH_USDT.swap) 특정 품종 정보를 지정할 때 (ETH_USDT.swap라는 형식이 FMZ 플랫폼에 의해 정의됩니다) 특정 품종에 대한 보유 데이터를 요청합니다. 예를 들어:BTC_USD.swapETH_USDT.swapETH_USDT.quarter그리고 또 다른. BTC_USD.swap: BTC의 원자본 상속 계약. ETH_USDT.swap: ETH의 U비트 상속 계약. ETH_USDC.swap:ETH의 USDC 본래 상속계약. (USDT 이외에도 다른 quoteCurrency를 지정할 수 있습니다. 더 이상 언급되지 않습니다.) ETH_USDT.quarter:ETH의 U자본 분기 거래율은 약. BTC_USD.BTC-USD-201226-24250-C: BTC의 코인 로켓 옵션 계약.

  • exchange.GetPositions (USDT.swap) 지정된 차원 범위에 따라 모든 품종에 대한 보관 데이터를 요청합니다. USDT.swap:U 본비트 상속 계약 범위. USDT.futures:U 본비트 거래율 약 범위. USDC.swap:USDC 본래 상속계약 범위. (USDT 이외에도 다른 쿼트Currency를 지정할 수 있으며, 더 이상 언급하지 않음) USDC.futures:USDC 현금 환율 약 범위. USD.swap: 통화 본위 상속 계약 범위. USD.futures: 통화 본래 거래율 약 범위. USDT.option:U 본위 옵션 계약 범위. USD.option: 통화 로켓 옵션 계약 범위.

    다른 거래소와 비교해 볼 때, USDT.futures_combo:Futures_Deribit 거래소의 차이 포트폴리오 계약. USD.futures_ff:Futures_Kraken 거래소의 혼합 보증금 거래 비율 약. USD.swap_pf:Futures_Kraken 거래소의 혼합 보증금 상속 계약.

    거래소 API가 지원하지 않는 차원의 경우 호출 시 오류가 발생하여 빈값을 반환합니다.

OKX 선물 시뮬레이션 디스크 환경 테스트:

function main() {
    exchange.IO("simulate", true)

    exchange.SetCurrency("BTC_USDT")
    exchange.SetContractType("swap")

    var p1 = exchange.GetPositions()
    var p2 = exchange.GetPositions("BTC_USDT.swap")

    var tbls = []
    for (var positions of [p1, p2]) {
        var tbl = {type: "table", title: "test GetPosition/GetPositions", cols: ["Symbol", "Amount", "Price", "FrozenAmount", "Type", "Profit", "Margin", "ContractType", "MarginLevel"], rows: []}
        for (var p of positions) {
            tbl.rows.push([p.Symbol, p.Amount, p.Price, p.FrozenAmount, p.Type, p.Profit, p.Margin, p.ContractType, p.MarginLevel])
        } 
        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

img

그리고 그 후exchange.GetPositions()이 함수의 변수는ETH_USDT.swap이 경우, ETH의 U-비트 상속 계약 보유 데이터를 얻을 수 있습니다.

만약 이 신호가 전달되지 않는다면exchange.GetPositions()함수의 매개 변수에서 거래소가 온라인에 올린 모든 U-비트 영구 계약의 보유 데이터를 얻을 수 있습니다. (현재 거래 쌍이 BTC_USDT이기 때문에, 계약은 현재 거래 쌍, 계약 범위 요청에 따라 교환됩니다.)exchange.GetPositions("USDT.swap"), 요청 범위를 지정합니다.

exchange.GetFundings函数

새로 추가된 GetFundings 함수는 선물 거래소의 상속 계약에 대한 자본 요금을 얻을 수 있다. 함수는 변수 심볼을 가지고 있다. 함수는 Funding 구조 배열을 반환한다.

  • 지정 기호 매개 변수: 지정 품종의 기금율 정보 구조 매개 변수 (Funding array) 를 반환한다. 기호 매개 변수는 GetOrders/GetPositions 함수와 유사한 범위를 설정할 수 있다.
  • 심볼 매개 변수를 지정하지 않는다: 현재 거래 쌍, 계약 코드 위치의 차원에 따라 현재 차원의 모든 품종 데이터를 반환하는 메커니즘, 예를 들어 GetOrders/GetPositions 함수.
  • 만약 거래소가 특정 품종을 지정해야 한다면, 특정 품종에 대한 코드인 상징 파라미터 (symbol parameter) 를 전달해야 합니다. 예를 들어:BTC_USDT.swap▲변수를 전달하지 않거나 전송 범위 함수는 symbol 변수를 지원하지 않습니다.

2 API 인터페이스 업그레이드

exchange.GetTicker函数

행렬 함수exchange.GetTicker()이 업그레이드는 주로 심볼 매개 변수를 추가한다. 이 함수는 현재 거래 쌍, 계약 코드와 매개 변수 지정된 품종 정보를 직접적으로 분리하여 시장 데이터를 요청할 수 있도록 한다. 코드 작성 과정을 단순화한다.

매개 변수symbol거래소 대상exchange다른 형태의 현금/예상 상품입니다:

  • 현금 거래소 대상 포맷은:AAA_BBB, AAA는 거래 통화를 의미하며, BBB는 quoteCurrency를 의미하며, 통화 이름은 모두 대문자로 쓰인다. 예를 들어: BTC_USDT 현금 거래 쌍.
  • 선물 거래소 대상 포맷은:AAA_BBB.XXX,AAA는 거래 통화, BBB는 요금 통화,XXX는 계약 코드, 예를 들어 영구 계약 교환. 통화 이름은 모두 대문자로, 계약 코드는 소문자로 표시됩니다. 예를 들어: BTC_USDT.swap, BTC의 U비트 상속 계약.

이 프로젝트의 주제는

var symbols = ["BTC_USDT.swap", "BTC_USDT.quarter", "BTC_USD.swap", "BTC_USD.next_quarter", "ETH_USDT.swap"]

function main() {
    exchange.SetCurrency("ETH_USD")
    exchange.SetContractType("swap")

    var arr = []
    var t = exchange.GetTicker()
    arr.push(t)

    for (var symbol of symbols) {
        var ticker = exchange.GetTicker(symbol)
        arr.push(ticker)
    }

    var tbl = {type: "table", title: "test GetTicker", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var ticker of arr) {
        tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }

    LogStatus("`" + JSON.stringify(tbl) +  "`")
    return arr
}

img

특정 품종의 시장 데이터 디자인을 요청하는 것이 더 간단합니다.

exchange.GetDepth函数

이 함수와 같은 함수exchange.GetDepth()함수는 또한 symbol 파라미터를 추가한다. 깊이 데이터를 요청할 때 직접 품종을 지정할 수 있다.

이 프로젝트의 주제는

function main() {
    exchange.SetCurrency("LTC_USD")
    exchange.SetContractType("swap")

    Log(exchange.GetDepth())
    Log(exchange.GetDepth("ETH_USDT.quarter"))
    Log(exchange.GetDepth("BTC_USD.swap"))
}

img

exchange.GetTrades函数

이 함수와 같은 함수exchange.GetTrades()함수에는 symbol 파라미터도 추가되어 있다. 시장 거래 데이터를 요청할 때 직접 품종을 지정할 수 있다.

이 프로젝트의 주제는

function main() {
    var arr = []
    var arrR = []
    var symbols = ["LTC_USDT.swap", "ETH_USDT.quarter", "BTC_USD.swap"]    

    for (var symbol of symbols) {
        var r = exchange.Go("GetTrades", symbol)
        arrR.push(r)
    }

    for (var r of arrR) {
        arr.push(r.wait())
    }
    
    var tbls = []
    for (var i = 0; i < arr.length; i++) {
        var trades = arr[i]
        var symbol = symbols[i]

        var tbl = {type: "table", title: symbol, cols: ["Time", "Amount", "Price", "Type", "Id"], rows: []}
        for (var trade of trades) {
            tbl.rows.push([trade.Time, trade.Amount, trade.Price, trade.Type, trade.Id])
        }

        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

img

이 업그레이드 또한 호환성을 통과했습니다.exchange.Go()함수 동시 호출 플랫폼 API 인터페이스에서 symbol 파라미터 지정 품종 정보를 전달합니다.

exchange.GetRecords函数

GetRecords 함수는 심볼 매개 변수를 직접 요청에 지정하는 K선 데이터의 종류 정보를 지원하는 것 외에도 큰 변화를 가했다. K선 주기를 지정하는 원래의 기간 매개 변수를 유지, 또한 요청 기간을 원하는 K선 길이를 지정하는 한계 매개 변수를 추가했다. 또한 구 버전의 GetRecords 함수의 호환성 또한 기간 주기 매개 변수를 전송하는 방식으로만 호출한다.

exchange.GetRecords()함수를 호출하는 방법:

  • exchange.GetRecords 어떤 매개 변수를 지정하지 않고 현재 거래 쌍/계약 코드 대응 품종을 요청할 때 K선 데이터의 K선 주기는 전략 재검토 인터페이스 또는 실제 시점에 설정된 기본 K선 주기가 된다.
  • exchange.GetRecords ((60 * 15) 단지 K선 주기의 매개 변수를 지정할 때, 현재 거래 쌍/계약 코드와 대응하는 품종의 K선 데이터를 요청한다.
  • exchange.GetRecords (BTC_USDT.swap) 품종 정보만 지정할 때, 품종을 지정하는 K선 데이터를 요청하고, K선 주기는 전략 회색 인터페이스 또는 실제 디스크에서 설정된 기본 K선 주기이다.
  • exchange.GetRecords ((BTC_USDT.swap, 60 * 60) 품종 정보를 지정하고 특정 K선 주기를 지정하여 K선 데이터를 요청합니다.
  • exchange.GetRecords ((BTC_USDT.swap, 60, 1000) 품종 정보를 지정하고, 특정 K선 주기를 지정하고, 주기적으로 얻고자 하는 K선 길이를 가리키는 K선 데이터를 요청한다. 한계 파라미터가 거래소의 한 번의 요청의 최대 길이를 초과할 때 페이지 분할 요청 (즉, 거래소의 K 라인 인터페이스에 여러 번 호출) 이 발생한다는 점에 유의하십시오.

이 프로젝트의 주제는

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    var r1 = exchange.GetRecords()
    var r2 = exchange.GetRecords(60 * 60)
    var r3 = exchange.GetRecords("BTC_USDT.swap")
    var r4 = exchange.GetRecords("BTC_USDT.swap", 60)
    var r5 = exchange.GetRecords("LTC_USDT.swap", 60, 3000)

    Log("r1相邻Bar时间差值:", r1[1].Time - r1[0].Time, "毫秒, Bar长度:", r1.length)
    Log("r2相邻Bar时间差值:", r2[1].Time - r2[0].Time, "毫秒, Bar长度:", r2.length)
    Log("r3相邻Bar时间差值:", r3[1].Time - r3[0].Time, "毫秒, Bar长度:", r3.length)
    Log("r4相邻Bar时间差值:", r4[1].Time - r4[0].Time, "毫秒, Bar长度:", r4.length)
    Log("r5相邻Bar时间差值:", r5[1].Time - r5[0].Time, "毫秒, Bar长度:", r5.length)
}

img

exchange.GetOrders函数

또한 GetOrders 함수가 추가되었습니다.symbol매개 변수, 특정 품종을 지정하여 그 품종의 미완성 주문을 검색할 수 있다. 또한 지정된 차원 범위의 모든 품종의 미완성 주문을 검색할 수 있다.

exchange.GetOrders()함수를 호출하는 방법은 다음과 같습니다.

  • exchange.GetOrders ((() 선물 거래소: 어떤 매개 변수도 전달하지 않을 때, 현재 기준으로거래 / 계약 코드현재 차원 범위의 모든 품종에 대한 모든 미완성 주문을 요청하는 설정.
    현장 거래소: 어떤 매개 변수도 전달되지 않을 때 모든 현장 품종의 미완성 주문을 요청합니다.
  • exchange.GetOrders ( BTC_USDT.swap) 또는 exchange.GetOrders ( BTC_USDT) 선물 거래소: exchange.GetOrders (BTC_USDT.swap) 에서 BTC의 USDT 상속 계약에 대한 모든 미완성 주문 () 을 검색합니다. 현금 거래소:exchange.GetOrders ( BTC_USDT) 에서 모든 미완성 주문 () 을 BTC_USDT 현금 거래 쌍으로 검색하십시오.
  • 선물 거래소에만 지원 exchange.GetOrders (USDT.swap) 지정 차원 범위 요청 모든 품종의 미수 주문 (한 목록) 차원 분할 범위는 GetPositions 함수의 범위와 일치합니다. 예를 들어: exchange.GetOrders (USDT.swap) U의 상속계약 범위에 있는 모든 품종의 미수 주문 (挂单) 을 요청한다.

OKX 선물 시뮬레이션 디스크 환경 테스트:

function main() {
    exchange.IO("simulate", true)

    exchange.SetCurrency("BTC_USDT")
    exchange.SetContractType("swap")

    // 写入图表
    var tbls = []
    for (var symbol of ["null", "ETH_USDT.swap", "USDT.swap"]) {
        var tbl = {type: "table", title: symbol, cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}

        var orders = null
        if (symbol == "null") {
            orders = exchange.GetOrders()
        } else {
            orders = exchange.GetOrders(symbol)
        }

        for (var order of orders) {
            tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
        }

        tbls.push(tbl)
    }
    
    LogStatus("`" + JSON.stringify(tbls) +  "`")
}
  • 매개 변수를 전달하지 않을 때, 현재 거래 쌍 (BTC_USDT), 계약 코드 (스와프) 의 차원 범위의 모든 품종의 미완성 주문 (목록) 을 요청합니다.
  • 매개 변수 지정ETH_USDT.swap파라미터에서, ETH를 요청하는 USDT의 상속 계약의 부결된 주문 (挂单).
  • 문자열을 입력합니다."USDT.swap"이 문서는 모든 USDT 상속 계약의 미완성 주문을 요청합니다.

exchange.GetPosition函数

여전히 구식 저장함수 이름화와 호환되며, 또한 특정 요청된 저장 데이터의 종류 정보를 지정할 수 있는 심볼 매개 변수를 추가하였다.exchange.GetPositions()이 글은 이쪽의 글입니다.

exchange.IO函数

이 문제에 대해exchange.IO("api", ...)함수 호출 방식, 모든 거래소 객체에 대한 업그레이드, 직접 입력 전체 요청 주소 기능을 지원.

예를 들어 OKX의 인터페이스를 호출하려면:

GEThttps://www.okx.com/api/v5/account/max-withdrawal ccy: BTC

데이터베이스 주소를 직접 입력할 수 있는 지원https://www.okx.com, 기본 주소를 변경하지 않고 IO 함수를 호출하십시오.

OKX 선물 시뮬레이션 디스크 환경 테스트:

function main() {
    exchange.IO("simulate", true)

    return exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
}

img

3, API 인터페이스의 영향

exchange.GetOrder函数

이 업그레이드는 주로 영향을 미쳤습니다.exchange.GetOrder(id)함수의 매개 변수id,id 매개 변수는 원래의 거래소 주문 id에서 거래 품종을 포함하는 문자열 형식으로 변경되었습니다. FMZ 플랫폼에서 모든 포괄된 주문 Id는이 형식으로 변경되었습니다.

예를 들어:

  • 거래소 주문에서 정의된 거래소의 원본 주문Id은:123456이 업그레이드 이전에는 GetOrder 함수를 호출할 때 입력된 OrderId는123456
  • 거래소 주문에 정의된 거래소 이름의 제품 코드:BTC-USDTᅳ 참고: 여기서는 FMZ 플랫폼에 정의된 거래 쌍이 아니라 거래소 이름이 붙은 거래 품종 코드입니다.

그리고 이 업그레이드 후,exchange.GetOrder(id)함수가 입력해야 하는 변수 id의 형식은 다음과 같이 조정됩니다.BTC-USDT,123456

  • 이 디자인은 왜 그렇게 되었는지 설명해 드리겠습니다. 이번 업그레이드에서 CreateOrder 함수는 직접 품종을 지정하기 때문에, 귀환된 주문 ID가 품종 정보를 포함하지 않으면 해당 주문 ID는 사용할 수 없습니다. 특정 주문에 해당하는 품종이 무엇인지 알 수 없기 때문에, 대부분의 거래소 청구서와 취소에는 품종 코드를 설명하는 매개 변수를 지정해야 합니다.

  • 어떻게 이런 영향력을 합쳐야 할까요? 하위 주문은 교환.IO 함수가 직접 거래소 하위 주문 인터페이스를 호출하여 주문을 하려면, 반환 값은 일반적으로 거래소의 원시 기호 (종 코드) 와 원시 주문 id를 포함합니다. 두 가지를 영어 코마로拼接하면 FMZ 플랫폼 정의에 맞는 주문 Id입니다. 또한 FMZ 플랫폼에서 포장된 하부 주문 인터페이스를 사용하는 경우 하부 주문이 가능하며, 주문Id의 시작 부분은 거래 품종 코드이기 때문에, 주문의 원본Id을 사용하는 것이 필요한 경우 품종 코드와 코마를 제거하는 것만으로도 가능합니다.

exchange.CancelOrder函数

이 업그레이드는exchange.CancelOrder()함수의 영향과exchange.GetOrder()같은 함수입니다.

exchange.Buy函数

이 업그레이드는exchange.Buy()함수의 영향과exchange.GetOrder()같은 함수입니다.exchange.Buy()함수가 반환하는 명령 Id는 OKX 거래소 선물 주문 시 반환되는 새로운 구조의 Id입니다.LTC-USDT-SWAP,1578360858053058560

exchange.Sell函数

이 업그레이드는exchange.Sell()함수의 영향과exchange.GetOrder()같은 함수입니다.exchange.Sell()함수가 반환하는 명령 Id는 OKX 거래소 선물 주문 시 반환되는 새로운 구조의 Id입니다.ETH-USDT-SWAP,1578360832820125696

exchange.GetPosition函数

선물 거래소 객체만 이 함수를 지원하고 있으며, 보유 데이터 함수를 획득하는 데는 exchange.GetPosition (), 새로운 exchange.GetPositions ()) 라는 이름을 붙였으며, 둘은 완전히 일치합니다.

이전 정의:exchange.GetPosition ((() 함수, 어떤 매개 변수도 지정하지 않은 채 호출할 때, 현재 거래 쌍, 계약 코드 설정의 특정 계약의 보유 데이터를 얻는다.

조정, 변경 후, 새로운 정의:exchange.GetPosition ((() 함수, 어떤 파라미터도 지정하지 않은 채 호출할 때, 현재 설정된 거래 쌍, 계약 코드에서 정의된 차원 범위의 모든 품종의 보유를 얻는다.

예를 들어, 현재 거래 쌍은 BTC_USDT이며 계약 코드는 swap입니다.

exchange.GetPosition() // 等价于调用 exchange.GetPosition("USDT.swap")

이 함수는 모든 화폐의 U비트 영구 계약 보유 데이터를 요청합니다.

exchange.GetOrders函数

1. 현금 거래소에 대해:

이전 정의:exchange.GetOrders ()) 함수는 어떤 매개 변수도 지정하지 않고 호출할 때, 현재 트랜잭션 쌍의 모든 미완성 주문을 얻는다.

변경 후, 새로운 정의:exchange.GetOrders (,) 함수, 어떤 매개 변수를 지정하지 않은 호출에서, 모든 현상 거래에 대한 품종의 완료되지 않은 주문을 얻는다.

2, 선물 거래소에 대해:

이전 정의:exchange.GetOrders ()) 함수는 어떤 매개 변수도 지정하지 않고 호출할 때, 현재 거래 쌍, 계약 코드 설정의 특정 계약에 대한 모든 미완성 주문을 얻는다.

조정, 변경 후, 새로운 정의:exchange.GetOrders ((() 함수, 어떤 매개 변수를 지정하지 않은 호출에서 현재 설정된 거래 쌍, 계약 코드에서 정의된 차원 범위에서 모든 미완성 주문을 가져옵니다.

예를 들어, 현재 거래 쌍은 BTC_USD이며 계약 코드는 quarter입니다.

exchange.GetOrders()   // 等价于调用 exchange.GetOrders("USD.futures")

이 함수는 모든 화폐의 화폐 현금 교환 비율에 대한 미완성 주문 데이터를 요청합니다.

4 구조조정

티커 구조물

이 업데이트는 티커 구조에 현재 티커 구조가 어떤 품종에 해당하는지 정보를 기록하는 심볼 필드를 추가했습니다.exchange.GetTicker()함수의 기호 매개 변수 형식은 완전히 일치합니다.

Order 구조물

이 업데이트는 Order 구조에 Symbol 필드를 추가했습니다.exchange.GetTicker()함수의 기호 매개 변수 형식은 완전히 일치한다. 이 업데이트는 또한 Order 구조물의 Id 필드를 변경하여 새로운 Order Id 형식으로 품종 정보, 원본 주문 정보를 기록한다. 참조.exchange.GetOrder()함수에서 OrderId의 설명은 여기서 더 이상 설명되지 않습니다.

위치 구조물

이 업데이트는 포지션 구조에 심볼 필드를 추가했습니다.exchange.GetTicker()함수의 기호 매개 변수 형식은 완전히 일치합니다.

자금구조

GetFundings 함수는 Funding 구조물 배열을 반환합니다.

{
    "Info": {...},               // 交易所资金费率接口原始应答数据
    "Symbol": "BTC_USDT.swap",   // FMZ平台定义的品种名称
    "Interval": 28800000,        // 8小时间隔,单位毫秒
    "Time": 1729728000000,       // 本期资金费率收取时间
    "Rate": 0.0001,              // 资金费率,即 0.01 %
}

5. 리코딩 시스템

이 업그레이드는 사용자의 요구를 충족시키기 위해 먼저 실제 디스크에 호환되며, 리코드 시스템은 일주일 이내에 적응을 완료합니다. 개별 정책 코드가 영향을 받으면 이 문서 설명에 따라 변경을 조정하십시오.

이 플랫폼 전략 API 인터페이스 업그레이드에 따라, 플랫폼의 검색 시스템 내의 모든 API 인터페이스가 동기화 업데이트 완료되었습니다. 또한 검색 시스템 새로운 지원:

  • 더 많은 거래소 리테스트 데이터를 지원합니다.
  • 모든 종류의 재검토 데이터를 지원합니다.
  • 유본, 화폐본 배달, 영구 계약 혼합 거래.
  • 재검토 기간에 상품 거래소 객체는 교환 거래 쌍을 지원합니다.
  • 리테크 시스템은 GetTickers, GetMarkets 등의 새로운 기능에 대한 지원을 추가합니다.

추가 업데이트

1, 계정 구조 새로운 필드 Equity, UPnL

선물 거래소 객체의 멤버 함수GetAccount다시 돌아왔다Account구조는 필드를 확장했습니다.

  • 엑위티 현재 보증금 자산화폐의 총권익은 매우 특정 선물 거래소가 지원하지 않는 경우를 제외하고는 대부분 해당 분야를 지원합니다. 주로 실시간 계정 보증금 수익/손실 상황을 계산하는 데 사용됩니다.
  • UPnL 현재 담보자산화폐 종목에 있는 모든 포지션의 실현되지 않은 이익 손실은 매우 개별적인 선물 거래소가 지원하지 않는 것을 제외하고는 대부분 해당 분야를 지원한다.

2, SetMarginLevel 함수 업그레이드 심볼 매개 변수 지원

선물 거래소 객체의 구성원 함수 SetMarginLevel에 대한 업그레이드, 매개 변수 기호가 추가되었다.

예를 들어:

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    // 当前交易对为ETH_USDT,合约代码为swap,设置杠杆值为10
    exchange.SetMarginLevel(10)
    
    // 直接指定交易对BTC_USDT,合约代码swap,设置杠杆值20
    exchange.SetMarginLevel("BTC_USDT.swap", 20)
}

3, GetMarkets 함수가 반환하는 Market Structure가 CtValCcy 필드를 추가합니다.

  • 필드CtValCcy계약의 가치 단위를 기록합니다. 계약의 가치 단위는 BTC, USD, ETH 등이 될 수 있습니다.
  • 필드CtVal거래 품종에 해당하는 거래소의 계약에 해당하는 가치를 기록합니다.CtValCcy필드에 기록된 화폐.CtVal그리고 그 다음에는CtValCcy"BTC"는 0.01 BTC의 계약에 해당합니다.

더 많은

와-엠제가 새로 시작한 로봇에 무슨 일이 있었는지, 거래 ID가 이름과 함께 돌아왔는지, 오랫동안 연구했고, 주문 후의 로그 정보가 표시되지 않았는지, 관리자가 업데이트했기 때문이라고 말했습니다.

/upload/asset/2ffc0f961149326b78aed.png 이 문제는 이 인터페이스 업데이트로 인한 문제인가요?

에크네무스 希望exchange.Buy函数能增加开止损单的功能。。

세그전선 포토그래프

와-엠안녕하세요

발명가들의 수량화 - 작은 꿈네, 이쪽에서 테스트해보세요. 질문 주셔서 감사합니다. 이쪽에서 빨리 처리하겠습니다.

와-엠extMsg1, extMsg2는 표시되지 않습니다.

발명가들의 수량화 - 작은 꿈안녕하세요, 주문 ID는 필수적인 변화입니다. 왜냐하면 직접 품종을 지정하는 주문을 업그레이드했기 때문에 주문 ID에는 품종 정보가 포함되어야합니다. 그렇지 않으면 어떤 품종인지 확인 할 수 없으며 취소 시 호출 할 수 없습니다. 당신이 말한 다음 주문 후의 문자는 표시되지 않습니다. 즉: exchange.Buy ((price, amount, extMsg1, extMsg2) 를 호출할 때, extMsg1, extMsg2가 로그에 표시되지 않는가?

발명가들의 수량화 - 작은 꿈안녕하세요, 현재 거래소 설정, 거래 쌍, 계약 코드 설정을 보내십시오.

발명가 양자화테스트 코드와 구성의 세부사항을 본 문서에 보내 주시기 바랍니다. 엔지니어는 첫 번째 시간에 응답합니다.

발명가들의 수량화 - 작은 꿈거래소의 조건화 메커니즘과 같은 차이가 크며 지원 정도가 다양합니다.

발명가들의 수량화 - 작은 꿈지원에 감사드립니다. 이용에 문제가 있다면 신청서를 보내거나 메시지를 보낼 수 있습니다.