avatar of 发明者量化-小小梦 发明者量化-小小梦
집중하다 사신
4
집중하다
1271
수행원

Inventor Quantitative Trading Platform API 업그레이드에 대한 자세한 설명: 전략 설계 경험 개선

만든 날짜: 2024-06-28 09:08:29, 업데이트 날짜: 2024-11-01 10:08:12
comments   12
hits   2053

[TOC]

Inventor Quantitative Trading Platform API 업그레이드에 대한 자세한 설명: 전략 설계 경험 개선

머리말

Inventor 양적 거래 플랫폼은 9년간의 기술적 반복을 거쳤고 여러 번 재구축되었지만 사용자인 우리는 이를 알아차리지 못했을 수도 있습니다. 지난 2년 동안 이 플랫폼은 사용자 경험 측면에서 많은 최적화와 업그레이드를 거쳤으며, 여기에는 UI 인터페이스를 전면적으로 업그레이드하고, 일반적으로 사용되는 양적 거래 도구를 강화하고, 더 많은 백테스팅 데이터 지원을 추가하는 것이 포함됩니다.

전략 설계를 더 편리하게 만들고, 거래 로직을 더 명확하게 하고, 초보자가 더 쉽게 시작할 수 있도록 하기 위해 플랫폼은 전략에서 사용하는 API 인터페이스를 업그레이드했습니다. 이러한 새로운 기능을 사용하려면 호스트의 최신 버전을 사용해야 합니다. 해당 플랫폼은 가능한 한 기존 인터페이스에 대한 호출과도 호환됩니다. 새로운 API 인터페이스 기능에 대한 정보가 Inventor Quantitative Trading Platform의 API 문서에 업데이트되었습니다.

따라서 어떤 인터페이스가 업그레이드되었는지, 그리고 기존 전략을 현재 API와 호환되게 하기 위해 어떤 변경이 필요한지 간단히 살펴보겠습니다.

1. 새로운 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
}

Inventor Quantitative Trading Platform API 업그레이드에 대한 자세한 설명: 전략 설계 경험 개선

exchange.CreateOrder 함수

새로운exchange.CreateOrder()이 업그레이드의 초점은 기능에 맞춰져 있습니다.exchange.CreateOrder()함수의 가장 중요한 기능은 함수의 매개변수에서 순서의 유형과 방향을 직접 지정하는 것입니다. 이런 방식으로 거래 쌍, 계약 코드, 거래 방향 등과 같은 현재 시스템 설정에 더 이상 의존하지 않게 됩니다.

다중 상품 거래 주문 시나리오와 동시 시나리오에서는 설계 복잡성이 크게 줄어듭니다.exchange.CreateOrder()함수의 네 가지 매개변수는 다음과 같습니다.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)
}

Inventor Quantitative Trading Platform API 업그레이드에 대한 자세한 설명: 전략 설계 경험 개선

이것은 3번만 걸렸습니다exchange.CreateOrder()해당 함수 호출은 서로 다른 종류와 방향의 선물 주문 3개를 발행합니다.

exchange.GetHistoryOrders 함수

새로운exchange.GetHistoryOrders()이 기능은 특정 제품의 과거 거래 주문을 얻는 데 사용됩니다. 이 기능은 또한 거래소 인터페이스의 지원이 필요합니다.

과거 주문을 쿼리하기 위해 다양한 거래소에서 구현한 인터페이스는 매우 다양합니다.

  • 일부는 페이지 분할 쿼리를 지원하지만, 다른 일부는 지원하지 않습니다.
  • 일부 거래소에는 조회 기간이 있습니다. 즉, N일이 지난 주문은 조회할 수 없습니다.
  • 대부분의 거래소는 지정된 시간에 대한 쿼리를 지원하지만, 일부 거래소는 지원하지 않습니다.

이러한 인터페이스는 최고 수준의 호환성을 갖도록 캡슐화되며, 실제 사용 시 전략의 요구 사항과 기대 사항을 충족하는지 여부에 주의를 기울여야 합니다.

여기서는 자세한 기능 설명을 반복하지 않습니다. API 설명서의 구문 매뉴얼을 참조할 수 있습니다.

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

Binance 현물 거래 환경을 사용하여 테스트:

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) +  "`")
}

Inventor Quantitative Trading Platform API 업그레이드에 대한 자세한 설명: 전략 설계 경험 개선

exchange.GetPositions 함수

이전 버전의 위치 데이터 수집 기능은 다음과 같습니다.exchange.GetPosition(). 함수 명명 의미론을 더 잘 일치시키기 위해 이 업그레이드는 위치를 얻기 위한 새로운 함수를 추가합니다.exchange.GetPositions(). 동시에 GetPosition 함수와도 호환되거나 업그레이드됩니다.

두 함수 이름은 마지막 s만 다릅니다. GetPositions가 의미적으로 더 정확하기 때문에 앞으로는 GetPositions를 사용하는 것이 좋습니다.

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 외에도 다른 quoteCurrency를 지정할 수 있으며, 여기서는 반복되지 않습니다.) USDC.futures: USDC 마진이 적용된 다양한 선물 계약. USD.swap: 통화 기반 영구 계약 범위. USD.futures: 다양한 통화 기반 선물 계약입니다. USDT.option: U 기반 옵션 계약 범위. USD.option: 통화 기반 옵션 계약 범위.

일부 특별 교환 계약 차원 구분: USDT.futures_combo:선물_Deribit 거래소의 CFD 조합입니다. USD.futures_ff:Futures_Craken 거래소의 혼합 증거금 인도 계약입니다. USD.swap_pf: 선물_크라켄 거래소의 하이브리드 마진 무기한 선물 계약입니다.

Exchange API 인터페이스에서 지원하지 않는 차원의 경우 오류가 보고되고 호출 시 null 값이 반환됩니다.

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) +  "`")
}

Inventor Quantitative Trading Platform API 업그레이드에 대한 자세한 설명: 전략 설계 경험 개선

들어오는 경우exchange.GetPositions()함수의 매개변수는 다음과 같습니다.ETH_USDT.swapETH U 기반 영구 계약 상품을 사용하면 ETH U 기반 영구 계약 상품의 포지션 데이터를 얻을 수 있습니다.

수입하지 않을 경우exchange.GetPositions()해당 함수를 매개변수로 사용하면 거래소에 상장된 모든 U-margin 무기한 계약의 포지션 데이터를 얻을 수 있습니다(현재 거래 쌍이 BTC_USDT이고 계약이 swap이기 때문에 요청은 현재 거래 쌍을 기반으로 하며 계약 차원 범위). 이것은 호출과 동일합니다.exchange.GetPositions("USDT.swap")요청 범위를 지정합니다.

exchange.GetFundings 함수

새로 추가된 GetFundings 기능을 사용하면 선물 거래소의 무기한 계약에 대한 자금 조달 비율을 얻을 수 있습니다. 이 함수는 하나의 매개변수 기호를 취합니다. 이 함수는 자금 조달 구조의 배열을 반환합니다.

  • 기호 매개변수 지정: 지정된 제품의 자금 조달 비율 정보 구조 배열(Funding 배열)을 반환합니다. 기호 매개변수는 GetOrders/GetPositions 함수의 기호 매개변수와 유사하게 범위로 설정할 수 있습니다.
  • 기호 매개변수를 지정하지 않고: 현재 거래 쌍과 계약 코드가 있는 차원에 따라 현재 차원의 모든 제품 데이터를 반환합니다. 메커니즘은 GetOrders/GetPositions 함수와 동일합니다.
  • 거래소에서 특정 상품을 지정해야 하는 경우, symbol 매개변수, 즉 특정 상품의 코드를 전달해야 합니다. 예:BTC_USDT.swap. 매개변수가 전달되지 않거나 범위가 함수에 전달되면, symbol 매개변수가 지원되지 않는다는 오류 메시지가 표시됩니다.

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

exchange.GetTicker 함수

시장 기능exchange.GetTicker()이 업그레이드는 주로 심볼 매개변수를 추가합니다. 이 기능은 현재 거래 쌍 및 계약 코드와 관계없이 매개변수에 의해 지정된 제품 정보에 따라 직접 시장 데이터를 요청하는 데 사용할 수 있습니다. 코드 작성 과정을 간소화합니다. 동시에 매개변수를 전달하지 않는 호출 방법과도 여전히 호환되며, 기존 플랫폼 전략과도 최대한 호환됩니다.

매개변수symbol교환 대상에 대하여exchange현물/선물에는 다양한 형식이 있습니다.

  • 스팟 교환 객체 형식은 다음과 같습니다.AAA_BBBAAA는 기본 통화(거래 통화)를 나타내고 BBB는 견적 통화(가격 통화)를 나타냅니다. 통화 이름은 모두 대문자입니다. 예를 들어: BTC_USDT 현물 거래 쌍.
  • 선물거래 대상 형식은 다음과 같습니다.AAA_BBB.XXXAAA는 거래 통화인 baseCurrency를 나타내고, BBB는 가격 책정 통화인 quoteCurrency를 나타내고, XXX는 영구 계약 스왑과 같은 계약 코드를 나타냅니다. 화폐 이름은 모두 대문자이고, 계약 코드는 소문자입니다. 예를 들어: BTC_USDT.swap, BTC의 U 기반 영구 계약.

Binance Futures 라이브 환경을 사용하여 테스트:

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
}

Inventor Quantitative Trading Platform API 업그레이드에 대한 자세한 설명: 전략 설계 경험 개선

특정 심볼에 대한 시장 데이터 일괄 요청이 훨씬 간단해졌습니다.

exchange.GetDepth 함수

GetTicker 함수와 동일exchange.GetDepth()이번에는 함수에 심볼 매개변수도 추가되었습니다. 깊이 데이터를 요청할 때 유형을 직접 지정할 수 있습니다.

Binance Futures 라이브 환경을 사용하여 테스트:

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

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

Inventor Quantitative Trading Platform API 업그레이드에 대한 자세한 설명: 전략 설계 경험 개선

exchange.GetTrades 함수

GetTicker 함수와 동일exchange.GetTrades()이번에는 함수에 심볼 매개변수도 추가되었습니다. 시장 거래데이터 요청 시 상품을 직접 지정하는 것이 가능합니다.

Binance Futures 라이브 환경을 사용하여 테스트:

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) +  "`")
}

Inventor Quantitative Trading Platform API 업그레이드에 대한 자세한 설명: 전략 설계 경험 개선

이 업그레이드는 또한 다음과 호환됩니다.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-라인 인터페이스에 대한 여러 호출).

Binance Futures 라이브 환경을 사용하여 테스트:

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)
}

Inventor Quantitative Trading Platform API 업그레이드에 대한 자세한 설명: 전략 설계 경험 개선

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”)은 USDT 마진이 적용된 모든 종류의 미처리 주문(보류 주문)을 요청합니다.

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 인터페이스를 호출하려면 다음과 같이 합니다.

GET https://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")
}

Inventor Quantitative Trading Platform API 업그레이드에 대한 자세한 설명: 전략 설계 경험 개선

3. API 인터페이스 영향

교환.GetOrder 함수

이 업그레이드는 주로 다음에 영향을 미칩니다.exchange.GetOrder(id)함수 매개변수idid 매개변수는 원래 거래소 주문 id에서 거래 종류를 포함하는 문자열 형식으로 변경됩니다. FMZ 플랫폼의 모든 패키지 주문 ID는 이 형식을 따릅니다.

예를 들어:

  • 거래소 주문에 정의된 거래소 원래 주문 ID는 다음과 같습니다.123456 이 업그레이드 이전에 GetOrder 함수를 호출하려면 전달된 주문 ID가 다음과 같습니다.123456
  • 거래소 주문서에 정의된 거래소명 제품 기호:BTC-USDT。 여기에 언급된 내용은 거래소에서 명명한 거래 상품 코드이며, FMZ 플랫폼에서 정의한 거래 쌍이 아닙니다.

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

  • 먼저 이 디자인이 만들어진 이유를 설명하겠습니다. 이번에는 CreateOrder 함수가 업그레이드되어, 반환된 주문 ID에 상품 정보가 포함되어 있지 않은 경우, 주문을 할 상품을 직접 지정하여 주문할 수 있게 되었습니다(주문한 상품이 현재 설정된 거래쌍 및 계약 코드와 다를 수 있음). 그러면 이 주문 ID를 사용할 수 없습니다. 주문을 확인할 때, 주문이 어떤 유형(계약)인지 알 수 없기 때문입니다. 대부분의 거래소에서는 주문을 확인하고 취소할 때, 제품 코드를 설명하는 매개변수를 지정하도록 요구합니다.

  • 이 효과와 호환되는 방법: exchange.IO 함수를 사용하여 거래소의 주문 인터페이스를 직접 호출하여 주문을 하는 경우 반환 값에는 일반적으로 거래소의 원래 심볼(제품 코드)과 원래 주문 ID가 포함됩니다. 그런 다음 두 개를 영어 쉼표로 연결하면 FMZ 플랫폼에서 정의한 주문 ID가 제공됩니다. 마찬가지로 FMZ 플랫폼에서 캡슐화된 주문 인터페이스를 사용하여 주문을 하는 경우 주문 ID의 시작 부분이 거래 상품 코드이므로 원래 주문 ID를 사용해야 하는 경우 상품 코드만 삭제하면 됩니다. 콤마.

exchange.CancelOrder 함수

이 업그레이드는 다음을 위한 것입니다.exchange.CancelOrder()기능과의 영향exchange.GetOrder()기능은 같습니다.

교환.구매 기능

이 업그레이드는 다음을 위한 것입니다.exchange.Buy()기능과의 영향exchange.GetOrder()기능은 같습니다.exchange.Buy()함수에서 반환된 주문 ID는 새로운 구조입니다. 예를 들어, OKX 거래소에서 선물 주문을 할 때 반환되는 ID입니다.LTC-USDT-SWAP,1578360858053058560

교환.판매 기능

이 업그레이드는 다음을 위한 것입니다.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-margin 무기한 계약의 포지션 데이터를 요청합니다.

exchange.GetOrders 함수

  1. 현물 교환의 경우:

이전 정의: exchange.GetOrders() 함수. 매개변수를 지정하지 않고 호출하면 현재 거래 쌍에 대한 모든 미결 주문을 검색합니다.

조정 및 수정 후, 새로운 정의는 다음과 같습니다: exchange.GetOrders() 함수. 매개변수를 지정하지 않고 호출하면 모든 현물 거래 쌍의 완료되지 않은 주문을 얻습니다.

  1. 선물 거래소의 경우:

이전 정의: exchange.GetOrders() 함수. 매개변수를 지정하지 않고 호출하면 현재 거래 쌍과 계약 코드로 설정된 특정 계약의 완료되지 않은 모든 주문을 검색합니다.

조정 및 수정 후, 새로운 정의는 다음과 같습니다: exchange.GetOrders() 함수. 매개변수를 지정하지 않고 호출하면 현재 설정된 거래 쌍과 계약 코드에 의해 결정된 차원 범위에서 완료되지 않은 모든 주문을 얻습니다.

예를 들어, 현재 거래 쌍이 BTC_USD이고 계약 코드는 quarter입니다. 이 때 전화하세요:

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

이 기능은 모든 코인 마진 선물 계약의 미결제 주문 데이터를 요청합니다.

4. 구조조정

티커 구조

이 업데이트는 현재 티커 구조의 제품에 대한 시장 정보를 기록하는 심볼 필드를 티커 구조에 추가합니다. 이 필드의 형식은 다음과 같습니다.exchange.GetTicker()함수의 기호 매개변수 형식은 정확히 동일합니다.

주문 구조

이 업데이트는 Order 구조에 Symbol 필드를 추가합니다. 이 필드의 형식은 다음과 같습니다.exchange.GetTicker()함수의 기호 매개변수 형식은 정확히 동일합니다. 이 업데이트는 또한 새로운 주문 ID 형식으로 제품 정보와 원래 주문 정보를 기록하기 위해 주문 구조의 ID 필드를 수정합니다. 참조하다exchange.GetOrder()여기서는 함수의 주문 ID에 대한 설명은 반복하지 않습니다.

위치 구조

이 업데이트는 Position 구조에 Symbol 필드를 추가합니다. 이 필드의 형식은 다음과 같습니다.exchange.GetTicker()함수의 기호 매개변수 형식은 정확히 동일합니다.

자금 조달 구조

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

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

5. 백테스팅 시스템

사용자 요구를 충족하기 위해 이 업그레이드는 먼저 실제 시장과 호환되고 백테스팅 시스템은 일주일 이내에 조정됩니다. 개별 전략 코드가 영향을 받는 경우 이 문서의 지침에 따라 변경 및 조정하십시오.

플랫폼 전략 API 인터페이스 업그레이드에 따라 플랫폼의 백테스팅 시스템의 API 인터페이스가 동기적으로 업데이트되었습니다. 또한 백테스팅 시스템에는 다음에 대한 지원이 추가되었습니다.

  • 더 많은 거래소 백테스팅 데이터를 지원합니다.
  • 모든 유형의 거래소에 대한 백테스팅 데이터를 지원합니다.
  • U 기반, 통화 기반 인도, 영구 계약의 혼합 거래.
  • 선물 거래 객체는 백테스팅 중에 거래 쌍을 전환하는 것을 지원합니다.
  • 백테스팅 시스템은 GetTickers 함수, GetMarkets 함수와 같은 새로운 함수에 대한 지원을 추가합니다.

추가 업데이트

1. 계정 구조에 Equity 및 UPnL 필드 추가

선물거래 객체를 위한 멤버 함수GetAccount반품Account구조는 분야별로 확장되었습니다.

  • Equity 현재 마진 자산 통화의 총 자본입니다. 이 필드를 지원하지 않는 몇몇 선물 거래소를 제외하고 대부분 거래소가 이 필드를 지원합니다. 주로 실시간 계좌 증거금 손익을 계산하는 데 사용됩니다.
  • UPnL 현재 마진 자산 통화로 보유한 모든 포지션의 실현되지 않은 손익. 대부분의 선물 거래소는 이 분야를 지원하지만, 지원하지 않는 거래소는 몇 군데 있습니다.

2. SetMarginLevel 함수는 심볼 매개변수 지원을 업그레이드합니다.

선물 거래 객체의 멤버 함수 SetMarginLevel이 업그레이드되어 매개변수 symbol이 추가되었습니다.

테스트 예제:

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 구조에 CtValCcy 필드를 추가합니다.

  • 전지CtValCcy계약의 가치 단위를 기록합니다. 계약의 가치 단위는 BTC, USD, ETH 등일 수 있습니다.
  • 전지CtVal이 거래 상품의 한 계약의 가치를 거래소에서 단위로 기록합니다.CtValCcy현장 레코드의 통화입니다. 예를 들어:CtVal0.01입니다CtValCcy“BTC”는 1계약이 0.01 BTC의 가치를 가지고 있음을 의미합니다.