前言
详细的开通渠道请看后记
ptrade量化是以事件触发为基础,通过几个事件来完成每日交易任务的!
主要可以分成4个事件,初始化事件(initialize),盘前事件(before_trading_start)、盘中事件(handle_data)、盘后事件(after_trading_end)。
初始化主要用于初始化一些全局变量,这个是必备的一个结构,是我们选择股票的事件!
盘前事件是在每天开始交易前被调用,是一个可选事件
盘中事件可以做日线级别、分钟级别、tick级别的盘中处理,但是需要注意的是tick级别的盘中处理则需要通过tick_data或者run_interval来实现。这个是必须事件!
盘后事件是交易结束后被调用的,同样是个可选事件!
一、initialize
该函数用于初始化一些全局变量,是策略运行的唯二必须定义函数之一。
该函数只会在回测和交易启动的时候运行一次
示例
def initialize(context):
#g为全局对象
g.security = '600109.SS'
set_universe(g.security)
def handle_data(context, data):
order('600109.SS',100)
二、before_trading_start(可选)
这个函数主要是每天开始交易前调用一次,是用来添加每天都要初始化的信息的,如果说你的策略没有盘前初始化的需求,是不需要定义的!
注意事项:
1、在回测中,该函数在每个回测交易日8:30分执行。
2、在交易中,该函数在开启交易时立即执行,从隔日开始每天9:10分(默认)执行。
3、当在9:10前开启交易时,受行情未更新缘故在该函数内调用实时行情接口会导致数据有误。可以通过在这个函数内sleep到9:10分或者调用实时行情接口(比如l2行情)改为run_daily执行等方式来避免。
示例
def initialize(context):
#g为全局变量
g.security = '600109.SS'
set_universe(g.security)
def before_trading_start(context, data):
log.info(g.security)
def handle_data(context, data):
order('600109.SS',100)
三、handle_data(必选)
这个是用于处理交易的主要模块,可以看着整个策略的主体,可以根据策略保存时候的周期参数分钟级和日线级,tick级的话要是用其他函数,后续会讲到!
注意事项:
1、该函数每个单位周期执行一次
2、如果是日线级别策略,每天执行一次。股票回测场景下,在15:00执行;股票交易场景下,执行时间为券商实际配置时间。
3、如果是分钟级别策略,每分钟执行一次,股票回测场景下,执行时间为9:31 -- 15:00,股票交易场景下,执行时间为9:30 -- 14:59。
4、回测与交易中,handle_data函数不会在非交易日触发(如回测或交易起始日期为2015年12月21日,则策略在2016年1月1日-3日时,handle_data不会运行,4日继续运行)。
示例
def initialize(context):
#g为全局变量
g.security = '600109.SS'
set_universe(g.security)
def handle_data(context, data):
order('600109.SS',100)
data:一个字典(dict),key是标的代码,value是当时的SecurityUnitData对象,存放当前周期(日线策略,则是当天;分钟策略,则是这一分钟)的数据;
注意:为了加速,data中的数据只包含股票池中所订阅标的的信息,可使用data[security]的方式来获取当前周期对应的标的信息;
四、after_trading_end(可选)
该函数只会执行一次,执行时间为由券商配置决定,一般为15:30。
示例
def initialize(context):
#g为全局变量
g.security = '600109.SS'
set_universe(g.security)
def handle_data(context, data):
order('600109.SS',100)
def after_trading_end(context, data):
log.info(g.security)
后记
ptrade的渠道可以通过《ptrade开通详则》来获取,感谢看到这里,如果有更多疑问欢迎在评论区支出!