avatar of 发明者量化-小小梦 发明者量化-小小梦
フォロー ダイレクトメッセージ
4
フォロー
1271
フォロワー

古い戦略をWebSocketマーケットインターフェースにシームレスに接続する方法を段階的に説明します

作成日:: 2019-09-26 15:47:53, 更新日:: 2024-12-17 20:38:08
comments   3
hits   3531

古い戦略をWebSocketマーケットインターフェースにシームレスに接続する方法を段階的に説明します

古い戦略をWebSocketマーケットインターフェースにシームレスに接続する方法を段階的に説明します

Inventor定量取引プラットフォーム戦略スクエアインターネットには興味深い戦略がたくさんあります。当時、ほとんどのデジタル通貨取引所はrestプロトコルのAPIインターフェース、多くの戦略はこれに基づいていますrestインターフェース、市場の更新が遅くなることがあります。さらに、最近いくつかの取引所が登場した。restインターフェース障害が発生すると、ポリシーが使用できなくなります。ポリシーが変更された場合は、websocketインターフェースのサポートには、戦略コードへの特定の変更が必要であり、これは通常面倒です (戦略を変更するのは、それを書き直すよりもはるかに困難です)。 同じ戦略を変更せずに使用するにはどうすればよいですか?websocketマーケットインターフェースはどうですか? これは、Inventor Quantitative Trading Platform の強力な柔軟性を完全に実証しています。次のことが可能です。

  • 1. 「テンプレート ライブラリ」戦略を使用します。
  • 2. はいexchange.GetTicker マーケット情報を取得するための関数フック操作。

これにより、戦略はwebsocketマーケットインターフェースによって駆動されるデータが実行中です。 使用されるコーディング言語JavaScript言語。

分析戦略

たとえば、古典的な古い戦略「アイスブレーカー」を修正したいとします。

ポリシーアドレス

まず戦略コードを見て、この戦略がティック市場の状況によって駆動され、主にtickerデータではBuySellLastこれらの属性は、tickerデータは FMZ プラットフォームの API 関数から取得されます。exchange.GetTicker 得る。こうすれば目標は明確になります。exchange.GetTicker関数Hook必要なのは、操作(つまり、別のバージョンで書き直して置き換えること)だけです。 ただし、Icebreaker 戦略を書き換えると戦略に影響が出るため、書き換えることはできません。私たちが求めているのは、シームレスな接続です。 ! だから次の主人公が登場する必要がある。

テンプレートライブラリ機能とinit機能調整

「テンプレート ライブラリ」を作成し、名前を付けます。SeamlessConnWS、初期コードをクリアします。

古い戦略をWebSocketマーケットインターフェースにシームレスに接続する方法を段階的に説明します

そしてSeamlessConnWSテンプレートは2つのパラメータを設定します

  • IsUsedWebSocket
  • Hook_GetTicker@IsUsedWebSocket

古い戦略をWebSocketマーケットインターフェースにシームレスに接続する方法を段階的に説明します

有効か無効かを制御するために使用しますwebsocketインターフェース機能、特定の市場イ​​ンターフェースの開設を制御および指定します。この例では、スペースが限られているため、exchange.GetTickerインターフェースはフック操作を実行します。パラメータは有効になっているだけですGetTickerインターフェースは、Websocket モードの制御パラメータである Hook_GetTicker です。

テンプレートを作成したら、テンプレートにアクセスする特定の取引所を記述できます。websocketインターフェース、特定の見積もりをサブスクライブし、取引所がデータをプッシュするのを待ちます。具体的なコードはここでは繰り返しません。SeamlessConnWS コード (公開) と API ドキュメントを参照してください。注目すべきはテンプレートですinit関数とグローバル変数_DictConnectCreater_ConnMap

コード:

var _DictConnectCreater = {
    "Huobi" : WSConnecter_Huobi,
    "Binance" : WSConnecter_Binance,
}

var _ConnMap = {}

function init () {
    if (IsUsedWebSocket) {
        var connectCreater = null
        if (exchanges.length != 1) {
            Log("切换为ws接口只针对 exchange 交易所对象(即第一个添加的交易所对象)")
        }
        var isFound = false 
        for (var name in _DictConnectCreater) {
            if (exchange.GetName() == name) {
                connectCreater = _DictConnectCreater[name]
                isFound = true
            }
        }

        if (!isFound) {
            throw "没有找到实现"
        }
        
        if (Hook_GetTicker) {
            var symbol = exchange.GetCurrency()
            _ConnMap.GetTicker = connectCreater("GetTicker", symbol)
            exchange.GetTicker = function () {
                return _C(_ConnMap.GetTicker.Read)
            }
        }
        // ... 
        
    }
}

このテンプレートでは 2 つの交換のみが実装されていることがわかります。websocket市場インターフェースは Binance Spot と Huobi Spot です。initこの機能は、「アイスブレーカー」戦略を参照できるようにするものですSeamlessConnWSテンプレートを作成した後、実際のディスクを実行するときに最初に実行するのは、init自動的にexchange.GetTicker関数の内容を次のように置き換えます。websocketシームレスな接続を実現するためのインターフェースコードの実装websocket引用文。

SeamlessConnWS テンプレート アドレス

使い方

とても簡単です!バンドルSeamlessConnWSテンプレートを独自の戦略ライブラリにコピーした後は、図に示すように、「Icebreaker」戦略でそれを参照するだけで済みます。

古い戦略をWebSocketマーケットインターフェースにシームレスに接続する方法を段階的に説明します

確認して保存すれば完了です。

「Icebreaker」戦略のリアルタイム ロボットを作成し、取引所として Binance を選択します 古い戦略をWebSocketマーケットインターフェースにシームレスに接続する方法を段階的に説明します 。 開けるSeamlessConnWSテンプレートのパラメータを制御します。 古い戦略をWebSocketマーケットインターフェースにシームレスに接続する方法を段階的に説明します

実行します: 古い戦略をWebSocketマーケットインターフェースにシームレスに接続する方法を段階的に説明します

プッシュされたデータを見やすくするために、取引所によってプッシュされたデータを出力する print ログ コード 157 行目に追加しました。 古い戦略をWebSocketマーケットインターフェースにシームレスに接続する方法を段階的に説明します

ロボットのログには次のように表示されます: 古い戦略をWebSocketマーケットインターフェースにシームレスに接続する方法を段階的に説明します

このようにして、戦略コードを 1 行も変更する必要はなく、Websocket マーケット インターフェイスと戦略のシームレスな統合が実現されます。

この例は使用目的のみexchange.GetTicker市場インターフェース機能の戦略について説明します。他の市場インターフェースとしては、exchange.GetDepthexchange.GetTradesexchange.GetRecordsいつもと同じルーチンです!サンプルテンプレートSeamlessConnWSさらに拡張することも可能です。

テンプレート内の特定のリンクの場合websocket実装ではDial必要に応じて調整できる機能 (API ドキュメントのダイヤル機能を参照)。例えば、read()関数指定パラメータ-2つまり、戻るだけですwebsocket接続はバッファ内の最新のデータを受信します。

読んでくれてありがとう