传统策略的可视化开发

新手专区
标签: #<Tag:0x00007fc576f69d50>

(iQuant) #1

很多朋友都面临这样一个问题,平台从最初的传统策略的代码开发,到可视化模块化开发再到模拟交易,所有的模块都在不停升级。那么在可视化模块化交易中能否兼容原来学院中的传统策略开发呢?


其实,只要理解了平台的几个模块就可以实现平台功能的整合,通过可视化也能实现传统策略的开发需求。
context可以理解为一个全局变量,会被传递给策略中所有其他的方法,是最重要的变量之一。在传统策略开发中我们经常用到以下模块:
1、prepare(context):准备数据函数 运行过程中只调用一次,在 initialize 前调用,涉及的变量:
context.start_date ,
context.end_date,
context.instruments
context.options
该模块常用来计算技术指标,比如MA,通过context传递给handle模块。
2、initialize(context):初始化函数,整个回测中只在最开始时调用一次,用于初始化一些账户状态信息和策略基本参数,涉及的变量:
context.portfolio
context.trading_calendar
该模块常用来设置股票持有天数、股票只数等变量,通过context传递给handle模块。
3、handle_data(context, data) 如果按天回测,则每天调用一次, 通过对象data获取单只股票或多只股票的时间窗口价格数据,涉及的变量:
context.portfolio
context.trading_calendar
data (包括data.current_dt 最新日期 data.can_trade(symbols(‘000001.SZA’)) 可否交易)
该模块用来设置买入、卖出行为,周期执行、止盈止损逻辑
4、before_trading_start(context, data) 即每日开盘前调用一次,涉及的变量:
context.portfolio
context.trading_calendar
data (包括data.current_dt 等)
该模块可以用来设置昨日未成交单的处理、或是需要每日开盘前执行的逻辑
这些模块分别对应了可视化开发中trade模块的数据准备函数,初始化函数,主函数和盘前处理函数。
image

最后,模拟交易是通过每日收盘后更新context.enddate并重新运行代码实现的,只要涉及到时间的数据选取或是逻辑判断中使用了context.enddate,那么我们的策略就可以进行模拟交易运行并推送策略信号,很多老的策略无法实现信号的推送经常是由于在回测数据选取的过程中end_date写成了固定的日期而没有关联context.enddate,造成end_date无法更新的原因。使用可视化开发相比传统代码模式而言在模拟交易的设置上更方便,更模块化规范化。此外,在未来模块升级过程中由于数据的读取等命令都封装在了可视化模块中,因而可以减少由于命令变更或模块升级带来的代码修改量。

针对宽客学院中的传统策略,本文给出可视化方案开发样例:
1、可视化事件驱动策略
2、可视化价值选股策略(全市场选股)
3、可视化多头排列回踩买入策略(全市场选股)
4、可视化小市值策略(全市场选股)
5、可视化海龟策略(单股票)
6、可视化配对交易策略
7、可视化金叉死叉策略(单股票)
8、可视化Talib指标策略(单股票)


[量化学堂-策略开发]金叉死叉策略
(iQuant) #2

(iQuant) #3