ティックとは? 例えば,トランザクションデータは川として想像され,Tickは川の部分のデータである.国内先物最細の粒子は1秒あたり2回である.つまり,国内先物では500ミリ秒で1つのTickまで送信する.
この記事では中国を意味する) ソフトウェアが Tick を入手する方法は?
その場合,500ミリ秒間に1回以上の取引が行われ,その特定の状況が完全にブラックボックスである.特に高周波の商品先物取引戦略では,ティック市場の受信速度は戦略の収益性に決定的な影響を与える.
市場にあるほとんどの取引フレームワークはコールバックモードを使用しており,理想的な状況では最大500ミリ秒間に1つのTickがあることを意味します. onBar/onTickの実際の状況では,Tickを逃さないことが良いです.なぜですか?多くの時間を費やす onBar/onTick関数内のコードロジック全体に対処しなければならないからです.あなたがそれを望んでも望まなくても,あなたの戦略ロジックは中断されなければなりません.あなたはこのような状態を無効で使用する必要があります:
より高度なメカニズム
FMZ定量取引プラットフォームは,このバックワードコールバックメカニズムを採用せず,戦略論理を中断しない主な機能メカニズムを採用し,ユーザーがより自然に戦略流れを制御できるようにします. C++ と Golang を戦略基盤レベルとして使用し,戦略の上層レベルは論理問題を処理するためにJavaScript / Python を使用します. イベントトリガーメカニズムと組み合わせると,戦略は最初に最も速い速度で市場を処理するためにも使用できます.
スクリプト言語が遅いとは言わないで,ニューラルネットワークのトレーニングのために使わない限り,そうだったとしても,Jit hot compilation を追加した後にいつでも使用できます.入門レベルの戦略はここで書かれていません.そして,フューチャー高周波のTick の合成について話します.例えば,私たちがフューチャー企業に接続した場合,私たちはこのフューチャー会社の市場しか受信できません.私たちの受信の速度と品質は,私たちのネットワークに関連しており,フューチャー会社のフロントエンドマシンの負荷にも関係しています.
FMZ Quant
コードデモ
このコードは実用市場でのみ使用でき,バックテストはできません. FMZ Quant プラットフォームで使わない場合は,原則のみ参照できます. 取引所を追加する際に,多くの先物会社を追加して市場の同時融合処理を行うことができます.ここで,表示するために2つの取引所を追加します:
コードは次のとおりです
デモ効果
上記のように,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
}
}
}