摘要
Dual Thrust 是一個經典的趨勢策略,眾所周知,趨勢策略在震盪行情下表現很不好。 如果改造成一個多品種的策略,是否會有好的表現呢?
策略架構
策略原理很簡單,我們僅僅是研究如何把一個單品種的策略改造成一個多品種策略,在發明者量化交易平台上,編寫這樣的策略也並不復雜。首先,商品期貨策略經典的架構是:

我們無非是需要把 Dual Thrust 策略的邏輯迭代 到每個設置的合約下去執行。 這樣我們就要先構造策略要執行哪些合約,並且設置每個合約在執行Dual Thrust 策略邏輯時的參數。 不了解 Dual Thrust 策略的小伙伴可以先看下這個策略:
策略參數設計
可以看到原版的Dual Thrust 策略中,和交易邏輯相關的參數為:

這樣我們把策略的參數寫在策略代碼中,當然這樣是為了方便理解策略參數在代碼中的體現形式,在自己實際開發策略時也可以把策略參數配置成為策略界面上的參數,這里為了讓策略和界面無關,索性直接把策略參數寫入代碼中。
可以看到我們將在策略代碼中聲明一個全局變量 _Symbols 用來儲存策略參數,這個_Symbols變量是一個數組結構,其中每個元素都是一個對象,作為 Dual Thrust 交易邏輯 即將執行的合約品種的參數。
可迭代的交易邏輯
接下來重點的就是我們如何實現一個可迭代的 Dual Thrust 策略交易邏輯。 觀察了原版的Dual Thrust 策略的全局變量,我們發現,策略下單是通過「商品期貨交易類庫」構造的交易控制對象下單。 我們的策略依然使用商品期貨交易類庫封裝好的函數下單,所以聲明一個全局變量 manager。
- manager.OpenShort : 開空倉
- manager.OpenLong : 開多倉
- manager.Cover : 平倉
聲明三種狀態:
- State : 持倉狀態
- LastBarTime : K線數據中,最后一個K線bar的時間戳
- UpTrack : 上軌數值
- DownTrack : 下軌數值
最后,就剩下編寫出迭代交易邏輯的部分。

可以看到我們用了一個函數封裝了交易邏輯,函數名為: DualThrustProcess 。 函數參數就傳入 我們上邊定義好的 參數數組 _Symbols 這個函數調用就寫在上文「策略架構」中講的主循環中。
策略地址
回測


這樣一個多品種的 Dual Thrust 策略就完成了,當然為了學習主要邏輯,這個策略減去了很多狀態信息,日志輸出, 有興趣的可以增加上收益統計,圖表顯示,狀態欄實時顯示等功能。 在發明者量化交易平台上開發,改寫策略,是非常便捷、迅速的。 各種策略思路、創新的交易方法等你來發現、實現。