Ptrade量化交易实战:如何设置止盈和止损机制?

今天,我们要为策略添加一块拼图——止损和止盈机制,让你的"股票收割机"真正具备风险控制和利润锁定能力!

文章很长,耐心观看哦,记得点个关注!

​前置代码如下:

这个策略已经具备了基本的趋势跟踪能力和仓位控制逻辑,但还缺少一个关键要素——如何保护利润和控制亏损。

为什么需要止损止盈?

作为一个"资深韭菜",你一定经历过这样的痛苦:

买入后股价下跌,因为没有止损,结果越亏越多;

买入后股价上涨,因为没有止盈,结果利润回吐甚至转亏。

止损和止盈机制就是解决这两个痛点的利器:

止损:当亏损达到预设比例时自动卖出,防止亏损扩大;

止盈:当盈利达到预设比例时自动卖出,锁定利润。

如果是自然语言应该怎么做:

找到持仓的所有股票;

逐个的找到每一个持仓的股票;

获取到股票的持仓成本价;

获取股票的当前价格计算收益率:(当前价 - 成本价) / 成本价;

如果收益率超过止盈比例或低于止损比例,则清仓。

策略添加止损止盈逻辑:

让我们在initialize函数中添加止损止盈比例的全局变量:

并在handle_data函数中添加止损止盈检查逻辑:

关键点解析:

我们可以从handle_data函数由ptrade传进来的context变量中一层层地拿到我们的持仓股票的数据:context.portfolio.positions.items(),参考ptrade的帮助文档如下:

由于持仓的股票可能有多只,在自然语言中描述的逐个找到每一个持仓股票,在python代码中使用for ... in ... 语法实现。

注意:类比if语法,for... in语法最后也有个英文冒号,具体循环中执行的逻辑在换行之后,也需要注意空格对齐,如下:

注意:从context一层层地拿到持仓变量positions,这个变量是一个字典类型,字典在显示生活中比如,页码1对应的是一个内容,页面2对应另外一个内容,所以字典应该有两个信息,类比页码和对应的内容,在程序中就用key和value两个变量表示,那么如下for ... in ...语法。

下面进行完整的代码展示:

回测结果演示:

上图可以看到,在3个月的回测中,效果也很不错,总体收益和年化收益比较高,总体来看,各个指标相比没有添加止盈和止损之前都要好一些。止损和止盈比例可以结合自己风险偏好和实际情况进行调整:

策略收益:21.22%、最大回测:7.01%、夏普比率:2.85、年化收益率:105.03%、胜率:50.0%、盈亏比:172.84%。

今天就到这里啦,欢迎关注,我们下期再见!



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

相关文章