一、前言
最近有个童鞋反应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中执行价格查询,这就有一点怪怪的感觉。一般的习惯是继承一个类,然后直接在新类中实现功能,但现在还说不上那个方法更好,需要更进一步的体验。
完整代码可以关注公众号“零基础爱学习”,回复“LH4”获取。
原文地址:https://www.cnblogs.com/cation/p/12383299.html