一、前言
所謂滾動止盈是我瞎起的名字,簡單來說就這么個流程:
1)基於某個價格A下N手單,每單間隔M。比如AP001當前價格是7555,那我就連下十手買單,並且價格遞減:
第一手價格:7555 第二手價格:7554 第三手價格:7553 第四手價格:7552 ... 第十手價格7546
2)當合約的價格發生震盪,比如先持續下跌,會導致我們下的單依次成交,每當成交一手就自動提交一個止盈單比如
第一手成交后自動提交一個7556的賣出單
第二手成交后自動提交一個7555的賣出單
第三手成交后自動提交一個7554的賣出單
...
第十手成交后自動提交一個7557的賣出單
3)然而若是止盈單撞大運成交了,立即又補一個買入單。
7556的賣出單若成交就下一個7555的買入單
依次類推
如此就實現了所謂的滾動止盈,在震盪行情下可以來回收割一點點利潤。
二、代碼解析
我們在量化啟動時就立即掛單,所以不取歷史數據,這里有個坑,代碼中設置只取即時行情觸發,但啟動時窗口中勾選着“K線觸發”,結果是即時行情和K線都觸發。所以要把啟動時窗口中的“K線觸發”取消勾選。如果不取消勾選會發生什么呢?K線觸發會優先於即時行情,導致先觸發一個歷史行情,如此量化啟動后的批量下單就不是真下單了,變成了歷史回測。
這里使用A_SendOrder函數下單,並將返回的下單編號存起來。
接着使用A_OrderStatus輪詢訂單狀態,如果發現有已經成交的訂單,就反向下一個賣出單,並將已成交的訂單號剔除出輪詢的list。另外還要記錄下新的反向訂單號。
接着遍歷反向的訂單號,如果發現又成交了,又下一個買入單,並添加到前面的買入訂單list中。同樣要將已成交的訂單從list中剔除。
最后停止策略時需要將所有委托撤單,如果需要也可以把持倉都平掉。
三、回顧
其實整個過程挺簡單的,完整代碼:https://share.weiyun.com/5ovI5aG