学习笔记_vnpy实战培训day04

基于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(变量名)
    • 变量须是策略内部的变量名
  • 更新变量的频率
    • onBar
    • onOrder
    • onTimer
  • Self.putEvent()

日内策略逻辑 针对日内策略,给出实现的逻辑建议

  • 经典的日内策略
    • R-Breaker
    • Dual-Thrust
  • 策略初始化
    • 获取日线级别数据,计算各个阈值
    • 重新初始化当日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()
  • 策略中,需要区别回测和实盘的微妙处理
    • 使用self.backtesting:今仓昨仓
  • 交易分析
    • 导出交易记录exportTradeResult()
    • K线回放交易记录

你可能感兴趣的:(量化_量化投资,量化_vnpy学习记录)