[TOC]
FMZ Quant Trading Platformは9年間の技術的な繰り返しを経て,ユーザーとしては気づいていないかもしれませんが,何度も再構築されています.過去2年間で,プラットフォームはユーザー体験の観点から,UIインターフェースの包括的なアップグレード,一般的に使用される定量取引ツールの強化,より多くのバックテストデータサポートの追加を含む多くの最適化およびアップグレードを行いました.
戦略設計をより便利,取引論理をより明確,初心者より簡単に始めるために,プラットフォームは戦略で使用する API インターフェースをアップグレードしました.最新のバージョンを使用するドーカーは,これらの新しい機能を有効にすることができます.プラットフォームは,古いインターフェースコールと最大限に互換性があります. API インターフェースの新しい機能に関する情報は,FMZ Quant Trading Platform の API ドキュメンテーションに更新されています:
構文ガイド:https://www.fmz.com/syntax-guideユーザーガイド:https://www.fmz.com/user-guide
では,どのインターフェースがアップグレードされ,古い戦略を活用して,現在のAPIと互換化するために,どのような変更が必要かを簡単に見ていきましょう.
多製品戦略と完全な市場モニタリング戦略の設計には,総合的な市場インターフェースが不可欠です.戦略の開発を容易にし,イベントの再発明を避けるために,FMZ Quant Trading Platformは,このタイプの取引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()
機能は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
バイナンス・スポット・トレード環境でテストしました
function main() {
var orders = exchange.GetHistoryOrders("ETH_USDT")
// Write to chart
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つの呼び出し形式があります.
交換.GetPositions (位置を取得する) パラメータが通過されていない場合,現在の寸法のすべての品種の位置データは,現在の設定に従って要求されます.トレーディングペア / 契約コード.
exchange.GetPositions ((BTC_USD.swap
, ETH_USDT.swap
, ETH_USDT.quarter
など
BTC_USD.swap: BTC
交換.GetPositions ((
特別取引契約の部分:
USDT.futures_combo: デリビット取引所によるフューチャー・コンクリート・スプレッド
USD.futures_ff: フューチャーズ_Kraken exchange
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.swap
, ETHのUベースの永続契約の位置データは入手できます.
測定した場合exchange.GetPositions()
取引所でリストされているすべてのUベースの永続契約の位置データは取得できます (現在の取引ペアがBTC_USDTであり,契約はスワップなので,リクエストは現在の取引ペアと契約寸法範囲に基づいています). これは,呼び出しに相当しますexchange.GetPositions("USDT.swap")
要求範囲を指定します
市場機能の主要なアップグレードexchange.GetTicker()
この機能は,現在の取引ペアとコントラクトコードなしでパラメータによって指定された製品情報に従って直接市場データをリクエストすることができます. コード書き込みプロセスを簡素化します. 同時に,パラメータを通過せずにコール方法と互換性があり,古いプラットフォーム戦略と最大限に互換性があります.
パラメータsymbol
交換対象のスポット/フューチャーに異なるフォーマットがあります.exchange
:
AAA_BBB
, AAA は baseCurrency,つまり取引通貨,BBB は quoteCurrency,つまり価格設定通貨を表します.通貨名はすべて大文字で書かれています.
例えば,BTC_USDTのスポット取引ペアです.AAA_BBB.XXX
, AAA は baseCurrency,つまり取引通貨,BBB は quoteCurrency,つまり価格設定通貨,XXX は永久契約スワップなどの契約コードを表します.通貨名はすべて大文字で,契約コードは小文字で書かれています.
例えば: BTC_USDT.swap,BTCvar 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()
この機能は,シンボルのパラメータも追加します.これは深度データを要求するときに直接シンボルを指定することができます.
バイナンス・フューチャーズのライブ環境でテストしました
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()
この機能は,シンボルのパラメータも追加します. これにより,市場取引データを要求するときに直接シンボルを指定できます.
バイナンス・フューチャーズのライブ環境でテストしました
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) + "`")
}
このアップグレードは,また,Symbol Parameterによって指定されたexchange.Go()
プラットフォーム API インターフェースを同時に呼び出すときの機能です
このとき,GetRecords関数は大きく調整された.要求されたK線データのタイプ情報を直接指定するためのシンボルパラメータをサポートすることに加えて,K線期間を指定するために元の周期パラメータが保持され,要求時に期待されるK線長さを指定するために制限パラメータが追加されている.同時に,周期パラメータにのみ通過するGetRecords関数の古いバージョンと互換性がある.
呼び出す方法exchange.GetRecords()
機能は
バイナンス・フューチャーズのライブ環境でテストしました
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 time difference between adjacent bars:", r1[1].Time - r1[0].Time, "Milliseconds, Bar length:", r1.length)
Log("r2 time difference between adjacent bars:", r2[1].Time - r2[0].Time, "Milliseconds, Bar length:", r2.length)
Log("r3 time difference between adjacent bars:", r3[1].Time - r3[0].Time, "Milliseconds, Bar length:", r3.length)
Log("r4 time difference between adjacent bars:", r4[1].Time - r4[0].Time, "Milliseconds, Bar length:", r4.length)
Log("r5 time difference between adjacent bars:", r5[1].Time - r5[0].Time, "Milliseconds, Bar length:", r5.length)
}
GetOrders 関数も追加します.symbol
パラメータは,特定のシンボルを指定し,そのシンボルの未完了注文 (待機注文) をクエリするために使用できます.また,指定された寸法範囲内のすべてのシンボルの未完了注文 (待機注文) をクエリすることもサポートします.
についてexchange.GetOrders()
この関数は次の方法で呼び出せる:
OKX フューチャーシミュレーション環境を用いたテスト:
function main() {
exchange.IO("simulate", true)
exchange.SetCurrency("BTC_USDT")
exchange.SetContractType("swap")
// Write to chart
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.swap"
USDTベースの永続契約の未完了注文 (待機注文) が要求されます.
旧の位置取得機能の命名と互換性があり,特定の要求位置データのタイプ情報を指定できるシンボルパラメータも追加しています.
この関数の使い方は,exchange.GetPositions()
.
についてexchange.IO("api", ...)
完全なリクエストアドレスの直接転送をサポートするためにアップグレードされています.
OKX インターフェースを呼び出したい場合:
GET はhttps://www.okx.com/api/v5/アカウント/最大引き出口: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")
}
このアップグレードは主にパラメータに影響します.id
についてexchange.GetOrder(id)
id パラメータは,元の交換注文 id から,取引製品を含む文字列形式に変更されます.
FMZプラットフォーム上のすべてのオーダーIDは このフォーマットです
例えば:
123456
このアップグレードの前に,GetOrder関数を呼び出したい場合は,その中に渡されたオーダーIDは123456
.BTC-USDT
- わかった
これは,FMZプラットフォームで定義された取引ペアではなく,取引所によって命名された取引製品コードを指すことに注意してください.このアップグレード後,パラメータ id のフォーマットがexchange.GetOrder(id)
機能は以下のように調整されます.BTC-USDT,123456
.
まず このデザインの理由を 説明しましょう CreateOrder関数は,直接注文の種類を指定するためにアップグレードされているため (注文の種類は,現在設定されている取引ペアと契約コードとは異なる場合があります).戻された注文IDがタイプ情報を含まない場合,この注文IDは使用不能になります.注文をチェックするときに,注文の種類 (契約) が何であるかわからないため.ほとんどの取引所は,注文をチェックしキャンセルするときに,タイプコードを記述するパラメータの仕様が必要です.
この衝撃にどう対応するか:
薬剤を使用する場合は,exchange.IO交換オーダーインターフェースを直接呼び出し,注文を行うため,返される値は,通常,交換
このアップグレードがexchange.CancelOrder()
機能は,同じですexchange.GetOrder()
function.
このアップグレードがexchange.Buy()
機能は,同じですexchange.GetOrder()
機能
注文 ID が返されるexchange.Buy()
機能は新しい構造である.例えば,OKX取引所に先物注文を出すときに返されるIDは,LTC-USDT-SWAP,1578360858053058560
.
このアップグレードがexchange.Sell()
機能は,同じですexchange.GetOrder()
機能
注文 ID が返されるexchange.Sell()
機能は新しい構造である.例えば,OKX取引所に先物注文を出すときに返されるIDは,ETH-USDT-SWAP,1578360832820125696
.
この関数は先物交換のみがサポートする.位置データを取得するための exchange.GetPosition() 関数には,新しい exchange.GetPositions() 名前が追加され,両挙動はまったく同じです.
古い定義: exchange.GetPosition() 関数は,パラメータを指定せずに呼び出されると,現在の取引ペアとコントラクトコードによって設定された特定のコントラクトの位置データを取得します. 調整と変更の後,新しい定義: exchange.GetPosition (※) 関数は,パラメータを指定せずに呼び出されると,現在のセット取引ペアと契約コードによって決定された次元範囲内のすべての種類のポジションを取得します.
例えば,現在の取引ペアは BTC_USDTで,契約コードはスワップです.この時点で,コール:
exchange.GetPosition() // Equivalent to calling exchange.GetPosition("USDT.swap")
この関数は,すべての通貨のUベースの永続契約の位置データを要求します.
古い定義: exchange.GetOrders() 関数は,パラメータを指定せずに呼び出されると,現在の取引ペアのすべての未完了オーダーを取得します. 調整と修正後,新しい定義は: exchange.GetOrders (※) 関数,任意のパラメータを指定せずに呼び出されると,すべてのスポット取引ペアの未完了注文を取得します.
古い定義: exchange.GetOrders() 関数は,パラメータを指定せずに呼び出されると,現在の取引ペアとコントラクトコードによって設定された特定のコントラクトのすべての未完了オーダーを取得します. 調整と修正後,新しい定義は: exchange.GetOrders (※) 関数,任意のパラメータを指定せずに呼び出されると,現在の取引ペアと契約コードによって決定された次元範囲のすべての未完了オーダーを取得します.
たとえば,現在の取引ペアは BTC_USDで,契約コードは四半期です.この時点で,コール:
exchange.GetOrders() // Equivalent to calling exchange.GetOrders("USD.futures")
この機能は,すべてのコインベースの先物契約の未払い注文データを要求します.
この更新では,現在のティッカー構造の市場情報を記録する,シンボルのフィールドが追加されます.
このフィールドのフォーマットは,このフィールドのシンボルパラメータのフォーマットとまったく同じです.exchange.GetTicker()
function.
この更新では,Order構造に Symbol フィールドを追加し,このフィールドの形式は,Orderのシンボルパラメータ形式とまったく同じです.exchange.GetTicker()
機能
この更新では,注文構造のIdフィールドも変更され,新しい注文ID形式で製品情報と元の注文情報を記録します.exchange.GetOrder()
繰り返すつもりはない.
この更新では,位置構造にシンボルフィールドを追加します. このフィールドのフォーマットは,exchange.GetTicker()
function.
プラットフォーム戦略 API インターフェイスアップグレードによると,プラットフォームのバックテストシステムは同期更新されています. さらに,バックテストシステムは以下に対応しています.
農地についてAccount
構造が返されるGetAccount
フューチャー取引のオブジェクトのメンバー機能が拡張されています.
株式 現行のマーージン資産通貨の総株価.このフィールドをサポートしないいくつかの先物取引所を除き,ほとんどの取引所はこのフィールドをサポートしています.主にリアルタイムアカウントのマーージン利益と損失を計算するために使用されます.
UPnL 現行のマーージン資産通貨で保持されているすべてのポジションの未実現利益と損失.ほとんどの先物取引所は,このフィールドをサポートしません.
フューチャー取引オブジェクトのメンバー関数 SetMarginLevel がアップグレードされ,パラメータシンボルが追加されました.
試験例:
function main() {
exchange.SetCurrency("ETH_USDT")
exchange.SetContractType("swap")
// The current trading pair is ETH_USDT, the contract code is swap, and the leverage value is set to 10
exchange.SetMarginLevel(10)
// Directly specify the trading pair BTC_USDT, contract code swap, and set the leverage value to 20
exchange.SetMarginLevel("BTC_USDT.swap", 20)
}
フィールドCtValCcy
契約の価値単位を記録する.契約の価値単位は,BTC,USD,ETHなどである.
フィールドCtVal
取引所で取引される商品の契約の価値を記録し,単位は取引所に記録される通貨です.CtValCcy
例えば:CtVal
0.01 で,そしてCtValCcy