本文共 2110 字,大约阅读时间需要 7 分钟。
基于VNPY编写策略
策略运行逻辑 讲解策略在vnpy中的运行逻辑,包括tick级别、分钟级别、混合等
- bar内运算:tick运算,高频,cta,r-break,也是ticket.止损也是bar内
- bar外运算:
- onorder:看做每笔
- ontrade:交易结束有,单一标的和onorder一样
- 套利双合约情况下,会有差异,onorder一条,ontrade两条
策略模板 讲解策略模板,如何扩展策略模板实现自己的想法。
模板=基类,包括:
具体策略继承模板,在其基础上扩展自己的逻辑
模板-策略-实现(参数差异)
策略初始化 讲解策略的初始化要注意哪些,有那些手段
-
策略(实例)加载/启动
- 人工操作:vn.trader->算法->CTA策略->加载策略,启动策略
- 无人值守:
- mainEngine.ctaEngine.loadSetting() # 加载cta的配置
- mainEngine.ctaEngine.initStrategy(u‘S22_DEMO’) # 初始化策略实例,如果多个,则需要逐一初始化多个
-
初始化顺序:
- CtaTemplate.init()
- Strategy.init()
- Strategy.Init()
-
初始化的内容:
- 初始化各类参数
- 加载前置数据,推送到OnTick或者OnBar
- 加载上一状态的持久化数据(从本地JSON文件加载或 catEngine.loadPosition()
运行数据持久化 如何应对各种运行风险,数据如何持久化和重载
- 策略运行的风险
- 程序异常(代码报错/gateway异常/Python环境崩溃)
- 成交不一致
- 人为干预
- 数据持久化
- 保存至本地Json文件(策略实例名.json)
- 保存内容:持仓数量、开仓价格、止损价格等必要数据
- 保存至MongoDB。ctaEngine. savePosition()
- 其他数据
- Bar数据(传统的k线/自定义的Renko Bar/RangeBar等)
- 特殊的策略配置(policy,网格)
策略风控 如何针对单一策略,单一实例进行风控,如何与账号风控共同协作
- 单一策略:
- 增加最大仓位数量
- 开仓前检查剩余可开仓数
- 动态根据配置参数/ATR/VAR等更新最大开仓数
- 资金风控
策略状态监控 讲解状态监控的原理,如何扩展自己的策略状态
- 状态包括
- 仓位:合约/今仓/昨仓
- 动态参数:最大仓位/ATR
- 连续亏损次数
- 添加状态
- VarList.append(变量名)
- 变量须是策略内部的变量名
- 更新变量的频率
- Self.putEvent()
日内策略逻辑 针对日内策略,给出实现的逻辑建议
- 经典的日内策略
- 策略初始化
- 获取日线级别数据,计算各个阈值
- 重新初始化当日tick数据(任意时点初始化)
- 开盘时刻
- 波动较大,可自定义openWindow来进行特殊处理
- 收盘时刻
- 自定义closeWindow,撤销开仓单,强制平仓
隔日策略逻辑 针对隔日策略,给出实现的逻辑建议,如何避开假期?
- 一般是15分钟周期以上,持仓超过1天
- 期货合约换月风险
- 配置中,预先设置策略合约的开启、结束日期
- 到达日期后,进行合约更换,平近期合约,开远期合约
- 更新止损位、开仓价等
- 期货假期保证金/波动风险
- 预先配置假期、仓位降低比例
- 到达日期时,执行仓位降低
- 假期结束后,调整仓位比例
- 股票复权风险
- 可参考ricequant的策略模板:
- before_Trading()
- after_Trading()
- scheduler.run_daily()
回测策略
回测数据准备 本地、云端和外部供应商的数据选取,tick数据,分钟数据
- Tick数据回测
- 保证是日期和时间连续
- 单一合约,主力合约?
- 文件tick:先循环日期,寻找对应合约文件后加载;先日盘,再到夜盘
- 数据库:分批提取,分批灌送
- 标准套利合约tick:先生成套利tick,再推送
- 分钟以上级别数据回测
- 通过供应商接口获取并导出csv
- 回测程序导入csv,分批灌送
- 注意分钟数据的datatime:是bar开始时间/结束时间?
回测原理 讲解回测原理
- 撮合方式
- 下一根Bar/下一个Tick
- crossLimitOrder() 撮合限价单
- crossStopOrder() 撮合停止单
- onBar()/onTick() 推送到策略
回测陷阱 如何理解回测中的陷阱
- 采用主力合约回测时,跨月产生的利润/亏损,是不真实的。
- 若资金规模大,要考虑下单时的成交量是否满足。
回测优化 介绍若干中回测优化的手段与实例
- 策略中,使用资金比例来实时计算仓位,
- 回测引擎需支持实时计算realtimeCalculate()
- getAccountInfo()
- 策略中,需要区别回测和实盘的微妙处理
- 交易分析
- 导出交易记录exportTradeResult()
- K线回放交易记录
转载地址:http://eeyws.baihongyu.com/