[TOC]
発明者による量化取引プラットフォームは,9年間の技術革新を経て,ユーザーとしては気づいていないかもしれませんが,何度も再構築された.過去2年間で,プラットフォームはユーザー体験の面では,UIを全面的にアップグレードし,よく使われる量化取引ツールを増やし,より多くの回転データサポートを追加した.
策略の設計を容易にし,取引の論理をより明確にし,初心者向けに使いやすいようにするために,プラットフォームは策略を使用するAPIインターフェースをアップグレードした. 最新バージョンのホストを使用してこれらの新しい機能を有効にすることができる. プラットフォームは古いインターフェースの呼び出しを最大限にサポートしている. APIインターフェースの追加機能などの情報は,発明者の量化取引プラットフォームの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()
この関数の四つの参数は,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")
// 写入图表
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関数も対応/アップグレードします.
Note: 2つの関数名には"s"が終わっているだけで,GetPositionsがよりセミント的に一致しているため,次のいずれもGetPositionsを使用することをお勧めします.
exchange.GetPositions()
函数には3つの呼び出し形式があります.
exchange.GetPositions (交換.ゲットポジション) 実行する場合は,この2つのパラメータを取引は / 契約コードこの設定は,現在の次元ですべての品種を保持するデータを要求します.
exchange.GetPositions ((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.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) + "`")
}
感染する時exchange.GetPositions()
この関数のパラメータはETH_USDT.swap
恒久契約の保有データを入手できます.
伝達されない場合exchange.GetPositions()
関数のパラメータでは,取引所が上線したすべてのU位永続契約の保有データを取得できる (現在の取引対はBTC_USDTであり,契約は現在の取引対,契約範囲要求に応じてスワップ) この時点でコールに等価である.exchange.GetPositions("USDT.swap")
要求範囲を指定します.
新しいGetFundings関数は,フューチャー取引所の永続契約の資金率を取得する. 関数は参数 symbol を持っている. 関数はFunding構造の配列を返します.
BTC_USDT.swap
〔パラメータを伝達しないこと,または伝達範囲関数がエラーを返します. symbolパラメータはサポートされていません〕行政関数exchange.GetTicker()
このアップグレードの主な目的は,シンボルパラメータを追加することである. この機能は,現在の取引対から切り離すことができる. 契約コードはパラメータ指定された種類情報を直接パラメータに従って要求する. コード作成プロセスを簡素化. 同時に,非伝達型呼び出し方式を最大限に互換性のあるプラットフォームの古い戦略を保持する.
パラメータsymbol
取引所についてexchange
商品は現貨/先物で,以下の形式があります.
AAA_BBB
AAAはベース通貨,BBBはクォート通貨.通貨名はすべて大文字で書かれています.
例えば:BTC_USDT 現金取引ペア.AAA_BBB.XXX
AAAはベース通貨,BBBはクォート通貨,XXXは契約コード,例えば永続契約スワップである.通貨名はすべて大文字で,契約コードは小文字で書かれています.
例えば:BTC_USDT.swap,BTCのU位永続契約.テストは,BTCの現場環境で行われます.
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
}
特定の品種の市場データ設計を要求することは,よりシンプルになります.
この関数は,この関数と同じです.exchange.GetDepth()
この関数は,シンボルパラメータも追加した. 深いデータを要求するときに直接品種を指定することが実現された.
テストは,BTCの現場環境で行われます.
function main() {
exchange.SetCurrency("LTC_USD")
exchange.SetContractType("swap")
Log(exchange.GetDepth())
Log(exchange.GetDepth("ETH_USDT.quarter"))
Log(exchange.GetDepth("BTC_USD.swap"))
}
この関数は,この関数と同じです.exchange.GetTrades()
この関数には symbol 参数も追加されている.市場取引データを要求するときに直接品種を指定することが可能である.
テストは,BTCの現場環境で行われます.
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は,Symbol参数で直接要求されるK線データの種類情報をサポートするほか,K線周期を指定する元のperiod参数を維持し,要求期間を指定する望ましいK線長さを指定するlimit参数を追加した.また,旧バージョンのGetRecords関数で Period周期参数のみを伝達する呼び出し方法に対応している.
exchange.GetRecords()
函数への呼び出し方法:
テストは,BTCの現場環境で行われます.
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の永続契約の未完成の注文をすべて要求します.また,Symbol パラメータを追加し,特定の要求されたスタッキングデータの種類情報を指定することができます.exchange.GetPositions()
完全に一致している.
についてexchange.IO("api", ...)
函数呼び出し方式は,すべての取引所のオブジェクトにアップグレードされ,完全なリクエストアドレスの機能を直接転送するサポートが提供されています.
OKX のインターフェースを呼び出す場合:
GEThttps://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")
}
このアップグレードは主に影響しています.exchange.GetOrder(id)
関数のパラメータid
,idパラメータは,元の取引所の注文idから,取引品種を含む文字形式に変更された. FMZプラットフォーム上のすべてのパッケージされた注文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.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位永続契約の保有データを要求します.
1 貨幣取引所について:
旧定義:exchange.GetOrders (※) 関数は,任意の参数を指定せずに呼び出すとき,現在の取引対のすべての未完了注文を取得します.
変更後,新定義:exchange.GetOrders (※) 函数,任意のパラメータを指定せずに呼び出すとき,すべての即時取引の品種に対する未完了注文を取得する.
2 期貨取引所について:
古い定義:exchange.GetOrders (※) 関数は,任意のパラメータを指定せずに呼び出すとき,現在の取引対,契約コード設定の特定の契約のすべての未完了注文を取得します.
変更後,新定義:exchange.GetOrders (※) 機能は,任意のパラメータを指定せずに呼び出すとき,現在の設定取引対,契約コードで定義された次元範囲内のすべての未完了注文を取得します.
例えば,現在の取引対はBTC_USDで,契約コードはquarterです.
exchange.GetOrders() // 等价于调用 exchange.GetOrders("USD.futures")
この関数は,すべての通貨のコイン本位換算比率に関する未完了注文データを要求します.
この更新により,Ticker構造に Symbol フィールドが追加され,現行のTicker構造がどの種類であるかを記録する.exchange.GetTicker()
函数のシンボル参数形式は完全に一致している.
この更新では,Order構造体に Symbol フィールドが追加されました.exchange.GetTicker()
この更新では,Order構造体の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
取引品の取引所における契約の対価を記録する単位CtValCcy
記入された通貨は,例えば:CtVal
メディアは,CtValCcy
"BTC"とは,0.01BTCの契約を意味します.ワ-エムン返信IDは,取引の名前も付いており,長い研究を経て,注文後,ログの情報が表示されない,そして管理者が更新したためでしょうか.
張小宝郎/upload/asset/2ffc0f961149326b78aed.png この問題は,このインターフェースアップデートによって引き起こされたのでしょうか?
エクネムース 希望exchange.Buy函数能增加开止损单的功能。。
ナンセグ前列の概要
ワ-エムンいいわ
発明者 量化 - 微かな夢このページでは,この問題について詳しく説明します.
ワ-エムンextMsg1は表示されていません.
発明者 量化 - 微かな夢こんにちは,オーダーIDは,直接品種指定の注文をアップグレードしたため,必須の変更です. オーダーIDには品種情報が含まれなければなりません. そうでなければ,このオーダーがどの品種であるか確認することはできません. あなたは,下記の命令の後に表示されないメッセージ,つまり:exchange.Buy ((price, amount, extMsg1, extMsg2) を呼び出すとき,extMsg1, extMsg2 はログに表示されないのですか?
発明者 量化 - 微かな夢こんにちは,現在の取引所設定,取引ペア,契約コード設定を送信してください.
発明者の量化テストコードとコンフィギュレーションの詳細を 工事書に送信してください エンジニアはすぐにご連絡ください
発明者 量化 - 微かな夢取引所の条件化メカニズムなどの違いは大きく,支持度も異なりますが,この間調査してみましょう.
発明者 量化 - 微かな夢サポートありがとうございました. 使用問題がある場合は,お問い合わせやメッセージを送信してください.