
量化策略开发,高质量社群,交易思路分享等相关内容
『正文』
ˇ
大家好,我是乌克兰剑圣。
我们发现历史策略里没有用到boll指标构建的策略,今天发布的专享策略10是基于boll指标、boll极限、极限宽指标构建的。策略有两个版本,第一个版本是对布林策略的魔改,第二个版本是Boll+BB+BBW指标群的组合使用。
首先我们来了解一下这三个指标:
1.Bollinger Bands (布林带) 是一种技术指标,用于衡量价格波动的波动性和潜在的价格趋势。它由三条线组成:
import numpy as np
def bollinger_bands(close_prices, window=20, std_dev=2): """ 计算布林带指标的函数。
参数: close_prices: 收盘价序列,类型为列表或数组。 window: 移动平均线的窗口大小,默认为20。 std_dev: 标准差的倍数,默认为2。
返回值: middle_band: 中轨线序列。 upper_band: 上轨线序列。 lower_band: 下轨线序列。 """ close_prices = np.array(close_prices) middle_band = np.convolve(close_prices, np.ones(window)/window, mode='valid') std = np.std(close_prices[-window:]) upper_band = middle_band + std_dev * std lower_band = middle_band - std_dev * std return middle_band, upper_band, lower_band
# 示例收盘价数据close_prices = [100, 105, 110, 115, 120, 125, 130, 135, 140, 145]
# 计算布林带middle_band, upper_band, lower_band = bollinger_bands(close_prices)
# 打印结果print("中轨线:", middle_band)print("上轨线:", upper_band)print("下轨线:", lower_band)
2.布林极限指标(%BB)是从布林线(Bollinger Bands,简称BB)衍生出来的,主要用于辅助布林带指标辨别股价的买卖点。
其中,%BB 表示布林极限指标,收盘价是当日的收盘价格,布林线上轨价格和布林线下轨价格分别是布林带指标的上轨线和下轨线价格。
这个指标的取值范围一般在0到1之间,当 %BB 值接近1时,表示股价接近布林带的上轨,可能表明市场处于超买状态,可能出现回档调整,发出卖出信号;当 %BB 值接近0时,表示股价接近布林带的下轨,可能表明市场处于超卖状态,可能出现反弹,发出买入信号。
import numpy as np
def bollinger_band(close_prices, upper_band, lower_band): """ 计算布林极限指标(%BB)的函数。
参数: close_prices: 收盘价序列,类型为列表或数组。 upper_band: 布林带上轨线序列,类型为列表或数组。 lower_band: 布林带下轨线序列,类型为列表或数组。
返回值: bb_percentage: 布林极限指标(%BB)序列。 """ close_prices = np.array(close_prices) upper_band = np.array(upper_band) lower_band = np.array(lower_band) bb_percentage = (close_prices - lower_band) / (upper_band - lower_band) return bb_percentage
# 示例收盘价数据close_prices = [100, 105, 110, 115, 120]upper_band = [110, 112, 115, 118, 120]lower_band = [90, 92, 95, 98, 100]
# 计算布林极限指标bb_percentage = bollinger_band(close_prices, upper_band, lower_band)
# 打印结果print("布林极限指标(%BB):", bb_percentage)
3.布林极限宽度指标(Bollinger Band Width)是基于布林带的一个衡量指标,用于量化布林带的宽度。它是布林带上轨线和下轨线之间距离的一种度量,通常以标准差倍数的形式表示。布林带宽度指标提供了市场波动性的度量,当带宽收窄时,表示市场波动性较低,可能预示着趋势即将出现;而当带宽扩大时,表示市场波动性较高,可能预示着价格的大幅度波动。因此,布林极限宽度指标可用于识别市场波动性的变化。
def bollinger_band_width(upper_band, lower_band, middle_band): """ 计算布林带宽度指标的函数。
参数: upper_band: 上轨线序列,类型为列表或数组。 lower_band: 下轨线序列,类型为列表或数组。 middle_band: 中轨线序列,类型为列表或数组。
返回值: band_width: 布林带宽度序列。 """ upper_band = np.array(upper_band) lower_band = np.array(lower_band) middle_band = np.array(middle_band) band_width = ((upper_band - lower_band) / middle_band) * 100 return band_width
# 示例数据upper_band = [110, 112, 115, 118, 120]lower_band = [90, 92, 95, 98, 100]middle_band = [100, 102, 105, 108, 110]# 计算布林带宽度band_width = bollinger_band_width(upper_band, lower_band, middle_band)# 打印结果print("布林带宽度:", band_width)
OK,下面我们来介绍专享10的两个策略版本,第一个BOLL魔改版本:
布林线指标本身是一个非常棒的指标,它用最简单的思路把趋势,波动率,区间突破描述了出来,只要稍加修改就能取得不错的收益。它也有一些缺点,比如区间策略常见的弊病“假突破”,正如下图:

从上图中,我们可以肉眼观察到的信息是,波动率收窄,穿透破脚,即使肉眼可以识别是震荡,但是指标却不能”自我认识“到这个行情是震荡。因此我们需要通过松鼠Quant专享09的算法,可变均线的思路来修改布林的上中下轨道线。正如下图:

我们发现这样修改后,布林的上中小轨道变成了平直的横线,这样我们就可以描述震荡了,即前值等于当前值即为震荡,那么问题来了,这不就是普通的高低点区间吗?当然不是!如果是简单的轨道算法,那么上图里面的突破为什么不开仓呢?,我们使用了轨道线序列的历史值来过滤震荡,请看下图:


经过简单的魔改,无需增加参数即可减少原版布林线假突破的次数,加强过滤震荡的效果。方法普适性强,可以将这个思路转移到你自己的策略里使用,且不需要额外参数,是基于条件逻辑实现。

BB指标它是一个基于KDJ的算法改编的摆动指标,一般是低于20做多,高于80做空。但是这个是做震荡的思路,如果碰到趋势就会长期在正负50以上,甚至经常出现背离,如果我们按照震荡思路去做趋势的话,是肯定不行的嘛。但还有一种简单的用法,这个指标不建议单独使用,我们可以将它作为一个趋势强度的辅助指标,就是大于50%做多,小于50%做空。也就是要与趋势指标共振。
布林极限宽度指标
这个指标很有意思,简单来说就是去判断布林带什么时候“开口”,如下图:

当极限指标被压缩到很低的值的时候,就预示着下一步要张口了,这个和我们用ATR计算波动率的策略松鼠Quant的SF22,算法8很类似。它可以作为一个波动率的监控指标,不指示方向。仅仅是观察波动率收窄和放大的极限,有一定的预测能力,有兴趣的朋友可以把它做一个选股指标,寻找高波动机会的品种。
好的,专享10的策略思路介绍完了,源码提供了TBquant和python两个版本,我们来看看它的全品种绩效:




螺纹

豆粕

苹果

玻璃

国际铜

玉米

棉纱

白银

豆油

沪锌

IM

国债

原油

Vn.py版本(python)
默认螺纹钢888,无参数优化的绩效,拿到源码后可以自己调优。回测螺纹数据使用松鼠数据库后复权主连数据,数据格式如下:

结语
专享10是在09的基础上迭代的策略,其中过滤的方法我觉的适用于很多趋势类策略。描述趋势较为容易,让每个人头疼的是如何避开震荡或减少震荡中的交易信号,历史策略里也有很多过滤的思路借鉴。我认为不增加参数和复杂算法来达到过滤的目的是普适性较好的方法。专享09和10正是这样的大道至简的思路来构建的策略,喜欢量化的小伙伴可以着重参考一下思路。感谢支持松鼠Quant,我们会继续分享有趣的思路,俱乐部的小伙伴有问题可以私信我。
使用python的朋友可以直接从松鼠数据库下载每日更新的期货数据用于研究,复盘。
欢迎加入2024松鼠俱乐部,获得量化需要的策略源码,培训视频,行情数据。
1.原创策略源码,每月至少1期新策略源码。
2.专属数据库(国内商品数据每日更新)
3.个性化工具类-波动率跟踪
4.松鼠分享会(培训视频每月1期)

本策略仅作学习交流使用,实盘交易盈亏投资者个人负责,内容受原创保护,未经授权禁止转发、倒卖策略源码。