【零基础】极星量化入门四:实现条件单功能

一、前言

  最近有个童鞋反应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

 

posted @ 2020-03-02 10:09  布兰姥爷  阅读(1159)  评论(0编辑  收藏  举报