量化交易ptrade开通攻略与实操:如何做好仓位的控制?

有很多小伙伴有了良好的交易策略,却没有好的仓位控制的方法,今天就来教一下大家,ptrade中仓位如何控制?

文章比较长,先点个关注哦!

如下有一个均线策略,买入卖出规则如下:

当前价高于5日均价或20日则全仓买入;当前价同时低于5日和20日则全仓卖出。

其中initialize函数是策略初始化的时候由Ptrade的引擎自动调用一次,并且传入了context变量,我们目前还没有用到这个变量

handle_data函数也是由Ptrade的引擎,在开盘的时间段内,每隔一定频率自动调用一次(比如每分钟调用一次),并传入了两个变量context和data,context可以看成是一个环境变量,我们也用来获取了账号的可用现金,data存放的是当前时间的各个股票行情数据,比如开盘价、收盘价等!

“def handle_data(context, data): ”是函数的申明,注意最后有个英文的冒号,函数申明换行后就是这个函数的具体代码逻辑,注意前面有几个空格,这个空格数量是统一的,比如2个空格,那么其余在同一个层级的代码前面应该都是2个空格,看起来要是对齐的

同样,对于条件判断"if"、"elif"这样的语句后面跟着条件,条件最后也有一个英文的冒号,换行后同样是条件满足后需要执行的逻辑,同一个层级的逻辑前面的空格数量也需要一致,看起来也要是对齐的。

前面带上"g."申明的变量,是全局的变量,在策略的所有函数中都可以用,如果没有带上"g." 那么只有在申明所在的函数中使用。当然只有在当前函数中变量申明之后才能使用,总不能还没有变量就直接用吧

增加仓位控制的需求

作为一个“资深韭菜”,怎么看全仓买入和全仓卖出都有点“虎”了,我们可以根据经验完善如下:

在尾盘14:50分的时候进行交易

当前价高于5日均价并且高于20日均线则全仓买入

当前价高于5日均价或者高于20日均线则半仓买入或者卖出半仓

当前价同时低于5日和20日则清仓

自然语言实现买入卖出规则

拿到过去5日的收盘价的数据(由于尾盘交易,所以需要算上当前价格作为今天收盘价)

求过去5日的平均收盘价(由于尾盘交易,所以需要算上当前价格作为今天收盘价)

拿到过去20日的收盘价数据(由于尾盘交易,所以需要算上当前价格作为今天收盘价)

求过去20日的平均收盘价(由于尾盘交易,所以需要算上当前价格作为今天收盘价)

拿到当前价格

当前价高于5日均价和20日均价则全仓买入

当前价高于5日均价或者20日均价则半仓买入或卖出

同时低于5日和20日则清仓

代码实操

前面说了一大堆,现在我们来展示一下代码如何实现:

关键点解析

context.current_dt:使用context变量得到当前的时间,这里从context中拿到current_dt属性获取到当前时间,直接记住就行

current_dt.hour和current_dt.minute分别拿到当前时间的"小时"和"分钟",因为context.current_dt这个时间内容已经赋值给了current_dt变量,所以可以这样拿"小时"和"分钟";

get_history这个接口默认不包含当天的数据,所以需要先拿前4天,后面再结合当天价格一起算平均;

(df1['close'].sum() curr_price) / 5 这里的sum表示"求和"的意思,先求出前4天的和,再加上当前价格,一起除以5就是5天(包含当天)的平均收盘价了

order_target_value这个接口是Ptrade提供的,调整股票持仓市值到指定的价值context.portfolio.portfolio_value表示获取当前账户的总价值,包括变成股票市值的和可以现金的总和

最后那个"else" 一般是放在条件判断的最后,表示其它情况,注意后面有个英文冒号,这个语句后面就不能跟条件了,因为已经是排除上面的所有条件之后的其它情况了,就是不满足上面两个"if"和"elif"之后的其它情况

回测结果演示

上图可以看到,即使如此简单的一个策略,在3个月的回测中,效果同样惊人

策略收益:20.6%最大回测:7.60%夏普比率:2.45年化收益率:103.68%胜率:50%盈亏比:456.39%

总结

关注"叩富问财"公众号,回复"资深吴经理",联系专属客户经理开通量化交易权限!

立即行动:打开微信,搜索"叩富问财",在对话框中输入"资深吴经理",开启你的量化交易之旅!



温馨提示:投资有风险,选择需谨慎。

相关文章