分类
期权交易指南

典型价格水平通道指标

用 Python 在股票交易中实现布林带策略

Python中文社区 于 2021-09-14 07:24:21 发布 450 收藏 1

我们可以根据它来开发许多不同的算法策略进行测试。下面,我们将介绍 4 种不同的交易策略,这些策略依赖于均值回归和趋势跟踪的波段。

布林带和均值回归

对于标准布林带设置,我们查看典型价格的 20 天移动平均线。如果典型价格遵循正态分布,则它有大约 5% 的机会将 2 个或更多标准差从均值移开。换句话说,我们有 1/20 的机会到达标准布林带的边缘。

均值回归交易者看到这一点,并希望押注价格将在短期内回到 SMA(TP)。因此,如果我们触及上布林带 (UBB),我们就会做空,如果我们触及下布林带 (LBB),我们就会做多并持有,直到我们到达 SMA(TP)。

这将从 典型价格水平通道指标 YFinance 雅虎财经 获取我们需要的数据并计算所有必要的中间值,然后输出典型价格 (TP)、SMA(TP) (TP_SMA)、上布林带 (UBB) 和下布林带 (典型价格水平通道指标 LBB)。除了我们的数据之外,它还需要我们在计算中使用的周期数(periods)和标准差数 (m)。我还添加了一个可选的标签参数,它将更新数据中的键,因为我们将研究的某些策略使用两组布林带,并且我们不希望在进行计算时覆盖这些值。

当价格移动到 LBB 时,该策略将做多,当价格到达 UBB 时做空。如果价格穿过 SMA(TP),它将卖出。我们通过寻找收盘价和 SMA(TP) 之间的差异从一天到下一天的迹象变化来做到这一点。

最后,你会看到我们不是简单地返回数据,而是将它包装在一个 calcReturns 函数中。这是一个辅助函数,可以轻松获得我们的策略和买入并持有基准的回报,我们将以此为基准进行回测。

现在只需要输入我们的数据,就可以看看这个策略是如何执行的。我将只从标准普尔 500 指数中获取一些数据,并在 2000 年至 2020 年的 21 年间对其进行测试。

我们的均值回归模型要么非常厉害,要么非常差劲。从 2003 年到 2009 年,它只是年复一年地以可怕的速度增加损失,使其不可能再回来。此外,我们可以看到这只股票以及策略具有非常高的波动性——对于这些策略来说,这通常是一件好事——但它经常被误入歧途。

布林带突破交易

这个策略只是通过将起始资本乘以 37 倍来打破基线!夏普比 和 索提诺比率 的比率看起来也很合理。然而,最重要的是,该策略在 2018 年飙升并在随后的几年中几乎全部收回后出现了大幅回撤。

在上图中,我们看到 2018 年对于该模型来说几乎是完美的一年。当标的证券价格上涨 3 倍时,我们的模型几乎在每笔交易的右侧,并且能够从低点到高点将其净值增加 3 倍。它从 10 月下旬的峰值回落了一点,当时空头头寸逆向移动并带走了一点利润。

在 2019 年,我们的模型无法进行任何操作。它下跌了很多,因为它在年初的一系列虚假突破中不断亏损。大约在2020年年中,它发生了变化,一次又一次地向下行方向亏损。它在今年晚些时候出现了两次不错的上涨趋势,但这还不足以弥补迄今为止所遭受的损失。

双布林带突破

对于下一个策略,我们将在模型突破设定为 1σ 的内带时买入,但如果价格超出第二个带 2σ 则卖出。我们想要捕捉突破模型的优势,但在它们逆转我们之前进行平仓。

正如所希望的那样,与买入并持有以及之前的突破模型相比,该模型确实降低了我们的波动性。然而,我们的总回报有所下降 —— 仍然优于买入并持有模型和均值回归方法。令人惊讶的是,我们还降低了与突破模型相比的 Sortino 比率,但确实增加了我们的夏普比率。

交易带宽

John Bollinger 推荐的一种依赖于带宽的策略,是通过取 UBB 和 LBB 典型价格水平通道指标 之间的差异并除以 SMA(TP) 来计算的。

我不知道这种趋势是否发生或可能是一个可交易的信号,所以让我们一起制定一个可以测试的策略。无论在这里是否有效,都不能证明或反驳 Bollinger 的主张——我们正在对单一证券进行简单的矢量化回溯测试,以演示如何将这些信号用于更完整的策略中。因此只需将结果作为数据点并进行自己的调查(对于我们正在运行的所有这些简单的回测也是如此)。

无论如何,为了测试这一点,我们将布林带宽度中的一个低点与 EMA 交叉相结合,以获得一个方向信号。为什么是 EMA?例如,它比 SMA 对最近的价格变化更敏感,因为对最后一个价格给予了更大的权重。如果我们看到在低点之后波动性增加,我们可以交易,那么我们会想要快速跳上它,而 EMA 将更有可能选择那起来。

接下来,我们需要对策略进行完整定义。我们将使用 20 天和 2σ 的标准布林带设置。我们将在带宽中寻找 20 天的低点,看看我们是否会得到一个短期的 10 典型价格水平通道指标 天 EMA 以高于长期的 30 天 EMA 来做多。如果我们在带宽和短期 EMA 中找到一个低点以低于长期 EMA,我们将做空。每当短期 EMA 穿越长期 EMA 时,我们就会平仓。

该策略在时间范围内损失了大部分启动资金,并以执行大多数其他策略而告终。我们看到的问题之一是 20 天的时间可能不够具有显著性。例如,有时带宽会上升(例如 2003、2008、2009),因此 20 天的最小值最终会升高。

扫描本文最下方二维码获取全部完整源码和Jupyter Notebook 文件打包下载。

长按扫码获取完整源码