[TOC]

Inventor Quantitative Trading Platform は 9 年間の技術的反復を経て、何度も再構築されてきましたが、ユーザーとしてはそれに気付いていないかもしれません。過去 2 年間で、プラットフォームは UI インターフェースの包括的なアップグレード、一般的に使用される定量取引ツールの強化、バックテスト データのサポートの追加など、ユーザー エクスペリエンスの面で多くの最適化とアップグレードを行ってきました。
戦略設計をより便利にし、取引ロジックをより明確にし、初心者が簡単に始められるようにするために、プラットフォームは戦略で使用される API インターフェースをアップグレードしました。これらの新機能を有効にするには、ホストの最新バージョンを使用してください。プラットフォームは、可能な限り、古いインターフェースへの呼び出しとの互換性を維持します。新しい API インターフェース機能に関する情報が、Inventor Quantitative Trading Platform の API ドキュメントに更新されました。
それでは、どのインターフェースがアップグレードされたか、古い戦略を現在の API と互換性を持たせるためにどのような変更が必要かを簡単に見てみましょう。
多品種戦略と完全な市場状況監視戦略を設計するため。この集約された市場インターフェースは、戦略の開発を容易にし、車輪の再発明を避けるために不可欠です。発明者の定量取引プラットフォームは、取引所のこのような API をカプセル化します。
取引所にこのインターフェースがない場合(個々の取引所)、exchange.GetTickers()エラー メッセージが報告されます: サポートされていません。
この関数にはパラメータがなく、取引所の集約された市場インターフェースにあるすべての種類のリアルタイム市場データを返します。簡単に言えば、次のようになります。
exchange.GetTickers()機能はexchange.GetTicker()関数の完全バージョン (2 つの関数名の違いは単数形と複数形です)。
テストには 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
}

新しいexchange.CreateOrder()このアップグレードでは機能に重点が置かれています。exchange.CreateOrder()この関数の最も重要な機能は、関数のパラメータで注文のタイプと方向を直接指定することです。このようにして、取引ペア、契約コード、取引方向などの現在のシステム設定に依存しなくなります。
複数商品の取引注文シナリオおよび同時実行シナリオでは、設計の複雑さが大幅に軽減されます。exchange.CreateOrder()この関数の4つのパラメータはsymbol、side、price、amount。
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)
}

たった3回で完了exchange.CreateOrder()この関数呼び出しは、異なる種類と方向の 3 つの先物注文を配置します。
新しいexchange.GetHistoryOrders()この関数は、特定の商品の取引注文履歴を取得するために使用されます。この機能には、取引所インターフェースのサポートも必要です。
過去の注文を照会する場合、さまざまな取引所によって実装されるインターフェースは大きく異なります。
このようなインターフェースは最高レベルの互換性でカプセル化されており、実際の使用においては、戦略の要件と期待を満たすかどうかに注意を払う必要があります。
詳細な関数の説明はここでは繰り返さないので、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) + "`")
}

位置データ取得機能の旧バージョンは次のとおりです。exchange.GetPosition()。関数の命名セマンティクスをより適切に一致させるために、このアップグレードでは位置を取得するための新しい関数が追加されました。exchange.GetPositions()。同時に、GetPosition 関数との互換性/アップグレードも維持されています。
2 つの関数名は末尾の s のみが異なることに注意してください。GetPositions の方が意味的に正しいため、今後は GetPositions を使用することをお勧めします。
exchange.GetPositions()関数呼び出しには 3 つの形式があります。
exchange.GetPositions() パラメータが渡されない場合、現在の取引ペア / 契約コード現在の次元内のすべての品種の位置データを要求します。
exchange.GetPositions(“ETH_USDT.swap”)
特定の商品情報を指定する場合(ETH_USDT.swap 形式は FMZ プラットフォームによって定義されます)、特定の商品の位置データを要求します。
例:BTC_USD.swap、ETH_USDT.swap、ETH_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:Futures_Deribit取引所のCFDの組み合わせ。 USD.futures_ff:Futures_Craken取引所の混合証拠金受渡契約。 USD.swap_pf: 先物_Kraken取引所のハイブリッドマージン永久契約。
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) + "`")
}

着信時exchange.GetPositions()関数のパラメータはETH_USDT.swapETH U ベースの永久契約を使用すると、ETH U ベースの永久契約の位置データを取得できます。
輸入されていない場合exchange.GetPositions()この関数をパラメータとして使用すると、取引所に上場されているすべてのUマージン永久契約のポジションデータを取得できます(現在の取引ペアはBTC_USDTで、契約はスワップであるため、リクエストは現在の取引ペアに基づいており、契約ディメンションの範囲)。これは、exchange.GetPositions("USDT.swap")、リクエストスコープを指定します。
新しく追加された GetFundings 関数を使用すると、先物取引所の永久契約の資金調達率を取得できます。この関数は 1 つのパラメータ シンボルを取ります。この関数は、Funding 構造体の配列を返します。
BTC_USDT.swap。パラメータが渡されないか、関数に範囲が渡された場合、シンボル パラメータがサポートされていないことを示すエラー メッセージが表示されます。市場機能exchange.GetTicker()このアップグレードでは主にシンボルパラメータが追加されます。この機能を使用すると、現在の取引ペアや契約コードに関係なく、パラメータで指定された商品情報に従って市場データを直接要求できます。コード作成プロセスを簡素化します。同時に、パラメータを渡さない呼び出し方法との互換性も維持されており、古いプラットフォーム戦略との互換性も最大限に保たれています。
パラメータsymbol交換対象物exchangeスポット/先物にはさまざまな形式があります。
AAA_BBBAAA は baseCurrency、つまり取引通貨を表し、BBB は quoteCurrency、つまり価格設定通貨を表します。通貨名はすべて大文字です。
例: 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
}

指定されたシンボルの市場データのバッチ要求がはるかに簡単になりました。
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"))
}

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

このアップグレードは、exchange.Go()関数がプラットフォーム API インターフェイスを同時に呼び出す場合、製品情報を指定するためにシンボル パラメータが渡されます。
今回、GetRecords 関数は大幅に調整され、要求された K ライン データの型情報を直接指定するためのシンボル パラメータがサポートされました。 K ラインの期間を指定するために元の期間パラメータが保持され、要求時に予想される K ラインの長さを指定するための制限パラメータが追加されます。また、期間パラメータのみを渡す GetRecords 関数の古いバージョンとも互換性があります。
exchange.GetRecords()関数を呼び出す方法:
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)
}

GetOrders関数は、symbolパラメータを使用すると、特定の製品を指定して、その製品の未完了注文 (保留中の注文) を照会できます。また、指定したディメンション範囲内のすべての製品の未完了注文 (保留中の注文) を照会することもできます。
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", "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) + "`")
}
ETH_USDT.swapパラメータ、ETH の USDT 証拠金永久契約の未約定注文 (保留中の注文) を要求します。"USDT.swap"USDT 証拠金永久契約のすべての未処理注文 (保留中の注文) を要求します。従来の位置取得関数の命名との互換性は維持されており、さらに、要求された特定の位置データの型情報を指定できるシンボル パラメータも追加されています。機能の使用法とexchange.GetPositions()完全に一貫しています。
のためにexchange.IO("api", ...)関数呼び出しメソッドがアップグレードされ、すべての交換オブジェクトの完全な要求アドレスを直接渡すことがサポートされるようになりました。
たとえば、OKX インターフェースを呼び出す場合は、次のようにします。
GET https://www.okx.com /api/v5/account/max-withdrawal ccy: BTC
ベースアドレスへの直接書き込みをサポートhttps://www.okx.comIO 関数を呼び出す前にベース アドレスを切り替える必要はありません。
OKX先物シミュレーション環境を使用してテストします。
function main() {
exchange.IO("simulate", true)
return exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
}

このアップグレードは主にexchange.GetOrder(id)関数パラメータidid パラメータは、元の取引所注文 ID から取引の種類を含む文字列形式に変更されます。 FMZ プラットフォーム上のパッケージ化された注文 ID はすべてこの形式です。
例えば:
123456
このアップグレードの前は、GetOrder関数を呼び出す場合、渡される注文IDは123456。BTC-USDT。
ここで言及されているのは、FMZ プラットフォームによって定義された取引ペアではなく、取引所によって命名された取引商品コードであることに注意してください。このアップグレード後、exchange.GetOrder(id)関数が渡す必要があるパラメータ ID の形式は次のように調整されます。BTC-USDT,123456。
まず、なぜこのデザインが行われたのか説明しましょう。 今回、CreateOrder 関数がアップグレードされ、商品を直接指定して注文できるようになりました (注文した商品は、現在設定されている取引ペアや契約コードと異なる場合があります)。そのため、返される注文 ID に商品情報が含まれていない場合、そうすると、この注文 ID は使用できなくなります。注文を確認するときに、その注文がどのような種類(契約)のものか分からないからです。ほとんどの取引所では、注文の確認とキャンセル時に、商品コードを説明するパラメータを指定する必要があります。
この効果と互換性を持つ方法: exchange.IO 関数を使用して取引所の注文インターフェースを直接呼び出して注文を出す場合、戻り値には通常、取引所の元のシンボル (製品コード) と元の注文 ID が含まれます。次に、2 つを英語のカンマで連結すると、FMZ プラットフォームで定義された注文 ID が得られます。 同様に、FMZプラットフォームによってカプセル化された注文インターフェースを使用して注文を行う場合、注文IDの先頭は取引商品コードであるため、元の注文IDを使用する必要がある場合は、商品コードを削除してコンマ。
このアップグレードは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.GetPositions() が追加され、動作はまったく同じです。
旧定義: exchange.GetPosition() 関数。パラメータを指定せずに呼び出されると、現在の取引ペアと契約コードによって設定された特定の契約のポジション データを取得します。
調整と変更後の新しい定義は、exchange.GetPosition() 関数です。パラメータを指定せずに呼び出すと、現在設定されている取引ペアと契約コードによって決定されるディメンション範囲内のすべての品種のポジションを取得します。
たとえば、現在の取引ペアは BTC_USDT で、契約コードは swap です。この時点で電話してください:
exchange.GetPosition() // 等价于调用 exchange.GetPosition("USDT.swap")
この関数は、すべての通貨の U マージン永久契約のポジション データを要求します。
古い定義: exchange.GetOrders() 関数。パラメータを指定せずに呼び出されると、現在の取引ペアのすべての未処理の注文が取得されます。
調整と変更後の新しい定義は、exchange.GetOrders() 関数です。パラメータを指定せずに呼び出すと、すべてのスポット取引ペアの未完了の注文が取得されます。
古い定義: exchange.GetOrders() 関数。パラメータを指定せずに呼び出されると、現在の取引ペアと契約コードによって設定された特定の契約の未完了の注文がすべて取得されます。
調整と変更後の新しい定義は、exchange.GetOrders() 関数です。パラメータを指定せずに呼び出すと、現在設定されている取引ペアと契約コードによって決定されるディメンション範囲内のすべての未完了の注文が取得されます。
たとえば、現在の取引ペアは BTC_USD で、契約コードは quarter です。この時点で電話してください:
exchange.GetOrders() // 等价于调用 exchange.GetOrders("USD.futures")
この関数は、すべてのコイン証拠金先物契約の未決済注文データを要求します。
このアップデートにより、Ticker 構造に Symbol フィールドが追加され、現在の Ticker 構造の製品の市場情報が記録されます。このフィールドの形式はexchange.GetTicker()関数のシンボルパラメータ形式はまったく同じです。
このアップデートでは、注文構造にシンボルフィールドが追加されます。このフィールドの形式は、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 %
}
ユーザーのニーズを満たすために、このアップグレードはまず実際の市場と互換性があり、バックテストシステムは1週間以内に適応されます。個々の戦略コードが影響を受ける場合は、この記事の指示に従って変更と適応を行ってください。
プラットフォーム戦略 API インターフェースのアップグレードに従って、プラットフォームのバックテスト システムの API インターフェースが同期的に更新されました。さらに、バックテスト システムには次のサポートが追加されました。
先物取引オブジェクトのメンバー関数GetAccount戻るAccount構造がフィールドで拡張されました。
先物取引オブジェクトのメンバー関数 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)
}
CtValCcy契約の価値単位を記録します。契約の価値単位は、BTC、USD、ETH などです。CtValこの取引商品の1契約の価値を取引所で記録します。CtValCcyフィールド レコードの通貨。例えば:CtVal0.01、CtValCcy「BTC」は、1 つの契約の価値が 0.01 BTC であることを意味します。