VNPY中,大多策略都是基于bar分钟级别;国内tick是一秒两笔,频率不算太高。这里尝试做了一个Tick基本准高频交易策略,只是为了实现思路。可以回测,不要直接用。。
回测时候记得把回测模式改为TICK_MODE, 数据库改为TICK_DB_NAME,还有setStartDate时候initdays设为0,不需要回读历史天数,只需要当天数据; 另外TICK回测超过一天系统就报错内存不够, 所以最好一天就够。
还有,把
currentTime改为开盘时间, 因为策略只在开盘时间运行,收盘前会自动平仓。
入场:
每次读
Tick
,分析过去
10
个
tick
的的总计,如果买量大于卖量,开多单
;反之空单
下单价格是当前tick市价;
止损:下单同时开反向2个价位的阻止单;
离场:下次TICK读取时候,如果已经是买入价格正向3个点,再次判断买卖量比,如果已经不符合,市价卖出;如果还是符合原来量比就极小持有,清掉之前阻止单,改挂当前价位反向2个点阻止单。
7
-24
更新,具体代码更新等验证后更新:
更改
stoporder
止损单为
limit order
限价单,这样更为快速;放在
ontrade()
,一旦主动交易确认发生后,发出这个止损
limit order
在
onorder()
加入,一旦发现发出交易没有完成,还在挂单,取消
新增一个类全局变量级别的锁,当有
order
挂单或者没有
order
发出单没有返回信息时候,这个锁关闭,不再开新单;避免多个单同时阻塞。
# encoding: UTF-8
from __future__ import division
from vnpy.trader.vtGateway import *
from datetime import datetime, time
from vnpy.trader.vtObject import VtBarData
from vnpy.trader.vtConstant import EMPTY_STRING
from vnpy.trader.app.ctaStrategy.ctaTemplate import (CtaTemplate,
BarGenerator,
ArrayManager,
TickArrayManager)
########################################################################
class TickOneStrategy(CtaTemplate):
"""基于Tick的交易策略"""
className = 'TickOneStrategy'
author = u'BillyZhang'
# 策略参数
fixedSize = 1