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

半自動量的な取引ツールを迅速に導入する

作者: リン・ハーン優しさ, 作成日:2020-08-30 10:11:02, 更新日:2023-10-08 19:54:06

Quickly implement a semi-automatic quantitative trading tool

半自動量的な取引ツールを迅速に導入する

商品先物取引では,間間仲介は一般的な取引方法である.この種の仲介はリスクフリーではない.一方的なスプレッドの方向性が拡大し続けると,仲介ポジションは浮動損失状態になる.しかし,仲介ポジションが適切に制御されている限り,それは依然として非常に運用可能であり実行可能である.

この記事では,完全に自動化された取引戦略を構築する代わりに,他の取引戦略に切り替えるように試みます. 商品先物取引における間期間仲介を容易にするために,インタラクティブな半自動量的な取引ツールを実現しました.

開発プラットフォームは,FMZ Quantプラットフォームを使用します.この記事の焦点は,インタラクティブな機能を持つ半自動戦略を構築する方法です.

インターテンポラル・アービタージは とてもシンプルな概念です

インターテンポラル・アービタージの概念

  • ウィキペディアからの引用


# Strategy Design

The strategy framework is as follows:

機能のメインは 本当だ If(exchange.IO(status)) { // CTPプロトコルの接続状態を決定する. LogStatus ((_D(), 既にCTPに接続されている!) //市場開業時間,ログイン接続は正常です. { \ ⌒ \ ⌒ \ ⌒ \ } LogStatus ((_D(), CTP接続されていません!) // トレーディングフロントエンドにログインしていません. { \ pos (192,220) } { \ pos (192,220) } { \ pos (192,220) }


If the CTP protocol is connected properly, then we need to set up the trading contract and then get the market quote. After obtaining the quotes, we can use the FMZ Quant platform build-in "line drawing" library to draw the difference.

機能のメインは 本当だ If(exchange.IO(status)) { // CTPプロトコルの接続状態を決定する. exchange.SetContractType ((rb2001) // 月間契約を設定する Var tickerA = exchange.GetTicker ((() // 遠隔月間の契約の報定データ わかった exchange.SetContractType ((rb1910) //近月の契約を設定する Var tickerB = exchange.GetTicker ((() // ほぼ月間の契約価格のデータ わかった Var diff = tickerA.Last - tickerB.Last ティッカーB.ラスト $.PlotLine ((diff, diff)

LogStatus ((_D(), 既にCTPに接続されている!) //市場開業時間,ログイン接続は正常です. { \ ⌒ \ ⌒ \ ⌒ \ } LogStatus ((_D(), CTP接続されていません!) // トレーディングフロントエンドにログインしていません. { \ pos (192,220) } { \ pos (192,220) } { \ pos (192,220) }


Get the market data, calculate the difference, and draw the graph to record. let it simply reflects the recent fluctuations in the price difference.
Use the function of "line drawing" library ```$.PlotLine```

 ![Quickly implement a semi-automatic quantitative trading tool](/upload/asset/6e286fea238b8266dd13.png) 

# Interactive part

On the strategy editing page, you can add interactive controls directly to the strategy:

 ![Quickly implement a semi-automatic quantitative trading tool](/upload/asset/6e9b91112616d444b964.png) 

Use the function ```GetCommand``` in the strategy code to capture the command that was sent to the robot after the above strategy control was triggered.

After the command is captured, different commands can be processed differently.

The trading part of the code can be packaged using the "Commodity Futures Trading Class Library" function. First, use ```var q = $.NewTaskQueue()``` to generate the transaction control object ```q``` (declared as a global variable).

var cmd = GetCommand (取得命令) if (cmd) { は if (cmd == plusHedge) { Q.pushTask (交換, rb2001, sell, 1,機能 (タスク, ret) { ログ (タスク) if (ret) { について Q.pushTask (交換, rb1910, buy, 1, 123, 機能 (タスク, リ) { ログ ((q,タスク.desc,ret,タスク.arg) (笑) { \ pos (192,220) } (笑) } else if (cmd == マイナスヘッジ) { Q.pushTask (交換, rb2001, buy, 1, 機能 (タスク, リターン) { ログ (タスク) if (ret) { について Q.pushTask (交換, rb1910, sell, 1, 123, 機能 (タスク, レット) { ログ ((q,タスク.desc,ret,タスク.arg) (笑) { \ pos (192,220) } (笑) } でなければ (cmd == coverPlus) { Q.pushTask (交換, rb2001, closesell, 1, 機能 (タスク, ret) { ログ (タスク) if (ret) { について q.pushTask ((交換, rb1910, closebuy, 1, 123,機能 ((タスク,ret) { ログ ((q,タスク.desc,ret,タスク.arg) (笑) { \ pos (192,220) } (笑) } else if (cmd == coverマイナス) { Q.pushTask (交換, rb2001, closebuy, 1, 機能 (タスク, ret) { ログ (タスク) if (ret) { について Q.pushTask (交換, rb1910, closesell, 1, 123, 機能 (タスク, ret) { ログ ((q,タスク.desc,ret,タスク.arg) (笑) { \ pos (192,220) } (笑) { \ pos (192,220) } { \ pos (192,220) } q.poll (投票) `


関連コンテンツ

もっと見る