資源の読み込みに... 荷物...

コモディティ・フューチャーズのTick受領制限を突破する方法

作者: リン・ハーンルービー作成日: 2018-08-27 15:58:30, 更新日:

ティックとは? 例えば,トランザクションデータは川として想像され,Tickは川の部分のデータである.国内先物最細の粒子は1秒あたり2回である.つまり,国内先物では500ミリ秒で1つのTickまで送信する.

この記事では中国を意味する) ソフトウェアが Tick を入手する方法は?

その場合,500ミリ秒間に1回以上の取引が行われ,その特定の状況が完全にブラックボックスである.特に高周波の商品先物取引戦略では,ティック市場の受信速度は戦略の収益性に決定的な影響を与える.

市場にあるほとんどの取引フレームワークはコールバックモードを使用しており,理想的な状況では最大500ミリ秒間に1つのTickがあることを意味します. onBar/onTickの実際の状況では,Tickを逃さないことが良いです.なぜですか?多くの時間を費やす onBar/onTick関数内のコードロジック全体に対処しなければならないからです.あなたがそれを望んでも望まなくても,あなたの戦略ロジックは中断されなければなりません.あなたはこのような状態を無効で使用する必要があります:

How to break through the Tick receiving limit of commodity futures

より高度なメカニズム

FMZ定量取引プラットフォームは,このバックワードコールバックメカニズムを採用せず,戦略論理を中断しない主な機能メカニズムを採用し,ユーザーがより自然に戦略流れを制御できるようにします. C++ と Golang を戦略基盤レベルとして使用し,戦略の上層レベルは論理問題を処理するためにJavaScript / Python を使用します. イベントトリガーメカニズムと組み合わせると,戦略は最初に最も速い速度で市場を処理するためにも使用できます.

スクリプト言語が遅いとは言わないで,ニューラルネットワークのトレーニングのために使わない限り,そうだったとしても,Jit hot compilation を追加した後にいつでも使用できます.入門レベルの戦略はここで書かれていません.そして,フューチャー高周波のTick の合成について話します.例えば,私たちがフューチャー企業に接続した場合,私たちはこのフューチャー会社の市場しか受信できません.私たちの受信の速度と品質は,私たちのネットワークに関連しており,フューチャー会社のフロントエンドマシンの負荷にも関係しています.

FMZ Quantの戦略モデルでは,さまざまな先物会社の口座を簡単に操作し,その価格を組み合わせて最速のスピードで注文を処理することができます.通常の状況では,先物会社から1秒間に2つのTickを得ることができますが,MA801を例として市場を組み合わせる技術によって,毎秒最大6回,繰り返しの無いTickを得ることができます.

How to break through the Tick receiving limit of commodity futures

コードデモ

このコードは実用市場でのみ使用でき,バックテストはできません. FMZ Quant プラットフォームで使わない場合は,原則のみ参照できます. 取引所を追加する際に,多くの先物会社を追加して市場の同時融合処理を行うことができます.ここで,表示するために2つの取引所を追加します:

How to break through the Tick receiving limit of commodity futures

コードは次のとおりです

How to break through the Tick receiving limit of commodity futures

デモ効果

How to break through the Tick receiving limit of commodity futures

上記のように,21時24分44秒には,最初の先物会社のデータが2つ目の会社よりも早い. 2つの先物会社の追加が効果を示せる. 5つ以上の先物会社の合併を加えると,基本的にはTickを逃す可能性がなくなる. 高周波取引戦略を開発している場合は,Tickの受信の速度と安定性という非常に重要で決定的なステップを解決しました.

完全なコードを取得:

function main() {
    log("Prepare to connect to the exchange and subscribe to the market")
    //step 1:All futures front-end machines are starting to subscribe to the variety
    _.each(exchanges, function(e){
        /*Waiting to connect to the exchange. The strategy is running without 
          interruption, and it is not the logic of the event callback. */
        while(!e.IO("status"))Sleep(1000);
        /*Use _C function to troubleshoot network errors. If subscribe to the market just 
        after connecting to exchanges, there may be a CTP unprepared error. */
        _C(e.SetContractType, "MA801")
        /*Switch the market receiving mode to the immediate return mode instead of the 
          event trigger mode. Refer to the API documentation on FMZ website. */
        e.IO("mode", 0)
    })
    Log("start fusing the data")
    //step 2: the important part begins
    var preVolume = 0
    while (true) {
        var ts = new Date().getTime()
        //Return if any exchanges occur tick event
        var ret = exchange.IO("wait_any")
        //Reset Volume at the right time
        if (ret.Nano/1000000 - ts > 60000) {
            preVolume = 0
        }
        //Target the exchange where the event occurred
        var e = exchanges[ret.Index]
        //Get ticker,  because of switching mode as return before, so here is the updated market, and GetTicker won't fail
        //Only the Tick with increasing volume is displayed. It no need to compare actual process, just process it.
        var ticker = e.GetTicker()
        if (ticker.Volume >= preVolume){
            Log(ret,ticker.Last, ticker.Volume)
            preVolume = ticker.Volume
        }
    }
}   



もっと見る