一、前言
最近有個童鞋反應A_SendOrder()自帶的條件單功能不是很好用,主要是觸發后的報單價格不靈活,於是我就想仿照9.3實現一個條件單的功能。主要的功能如下:
1、設置一個觸發條件和委托價格
2、達到觸發條件后按委托價格提交委托,返回訂單編碼
整個邏輯是很簡單的,主要解決的問題是觸發后的委托價問題。
二、代碼解析
1、簡述
為了便於使用,我定義了一個類,除了初始化,一共只有兩個函數。
class ConditionOrder(object):
#初始化
def __init__(self,contractID='',userNo='',orderType=0,qty=1,triggerPriceStr='',orderPriceStr=''):
#發送訂單,返回訂單編碼
def sendOrder(self):
#行情觸發時執行此函數
def handle(self):
使用方式很簡單:
參數釋義:
contractID 合約編號
orderType 買賣類型,0 買、1 賣、2 平空、3 平多
qty 買賣的數量,默認1
triggerPriceStr 觸發條件
last >= 100 最新價大於等於100(將>處理為>=)
bid <= 100 買一價小於等於100 (將<處理為<=)
ask = 100 賣一價等於100
orderPriceStr 委托價格
limit=100 限價100
market 市價(漲跌停價)以漲跌停價報單
opposite+1 對盤價+1*最小變動價
working-2 掛單價-2*最小變動價
last+3 最新價+3*最小變動價
2、__init__初始化函數
初始化僅將設置的參數記錄下來,不做其他工作
3、handle函數
handle函數根據觸發條件對價格做比較,若達到觸發價就執行sendOrder函數。
由於極星量化的特性,每次行情觸發會執行handle_data接口,所以將條件單的handle函數放到handle_data中,每次有行情變化就執行一次價格比較。
4、sendOrder函數
在handle函數中,若發現價格達到觸發條件就會調用sendOrder函數,sendOrder對委托價的設置進行解析,並使用A_SendOrder函數發送委托。最后將委托的訂單號返回。
三、回顧
整個思路還是挺簡單的,但由於極星量化的接口特性,只能在handle_data中執行價格查詢,這就有一點怪怪的感覺。一般的習慣是繼承一個類,然后直接在新類中實現功能,但現在還說不上那個方法更好,需要更進一步的體驗。
完整代碼:
https://share.weiyun.com/5I6sily