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

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

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

[TOC]

img

전문

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

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

문법 설명서:https://www.fmz.com/syntax-guide사용자 설명서:https://www.fmz.com/user-guide

그럼 이 글을 통해 어떤 인터페이스 업그레이드 업데이트가 있는지, 그리고 현재 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 함수를 호환/ 업그레이드합니다.

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

  • exchange.GetPositions (역주) 어떤 매개 변수도 전달되지 않을 때, 현재 거래 쌍/계약 코드 설정에 따라 저장 데이터를 요청한다.
  • exchange.GetPositions (ETH_USDT.swap) 특정 품종 정보를 지정할 때 (ETH_USDT.swap라는 형식이 FMZ 플랫폼에 의해 정의됩니다) 특정 품종에 대한 보유 데이터를 요청합니다.
  • exchange.GetPositions (("") 거래소의 화물 인터페이스에서 얻을 수 있는 현재 차원의 모든 화물 데이터를 요청하십시오.

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

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

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

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

    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-비트 상속 계약 보유 데이터를 얻을 수 있습니다.

img

그리고 그 후exchange.GetPositions()함수의 매개변수는 빈 문자열입니다.""이 경우, 모든 계약의 보유 데이터를 얻을 수 있습니다.

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) BTC의 USDT 상속 계약에 대한 모든 미완성 주문을 검색하십시오.
  • exchange.GetOrders (("") 거래소에서 현재 차원 분할된 모든 미완성 주문을 검색합니다.

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

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

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

    // 写入图表
    var tbls = []
    for (var symbol of ["null", "ETH_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) +  "`")
}

img

패러미터가 전달되지 않을 때, 기본적으로 현재 BTC_USDT 거래 쌍, 스 상속 계약의 모든 미완성 화물 목록을 요청합니다.

img

매개 변수 지정ETH_USDT.swap이 매개 변수는 ETH_USDT 트레이드 쌍에 대한 모든 미완성 종속 계약을 요청합니다.

img

빈 문자열을 입력합니다.""모든 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

4 구조조정

티커 구조물

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

Order 구조물

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

위치 구조물

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

5. 리코딩 시스템

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

추가 업데이트

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

더 많은

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

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

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

세그전선 포토그래프

와-엠안녕하세요

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

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

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

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

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

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

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