专享策略11 | 震荡MACD与沙夫趋势(STC)
点击此处查看最新的网赚项目教程
量化策略开发,高质量社群,交易思路分享等相关内容
『正文』
ˇ
得益于行情好,上半年发布的专享09和10自发布日起已经创出新高,这两个策略逻辑性强,代码简单,参数少非常适合新手学习及使用。专享08盘口策略比较特殊,实盘1个多月后处于亏损状态,目前下架,回炉重做。需要加一些价格因子进去做择时,同时对订单流量能指标的使用有了新的认识,敬请期待它重新上线吧。俱乐部是以策略源码开发,教学及实战为主,我们会继续提高产品质量和社群品质,欢迎多提意见。
今天发布的专享策略11是基于MACD指标的魔改指标,借鉴沙夫公式修改为摆动指标,我们来说一下它的指标源码:
TV上有人写好了这个指标,语言是pine,它的地址是
首先需要重写MACD,如下公式。它和传统的MACD计算很不一样,主要是通过计算相关系数、波动幅度让MACD变成一个相对指标。
calculateMACD(source, fastLength, slowLength) =>
var macd = 0.
var lag = (9 - 1) / 2
var a1 = 2 / (fastLength + 1)
var a2 = 2 / (slowLength + 1)
r2 = .5 * math.pow(ta.correlation(close, bar_index, length), 2) + .5
K = r2 * ((1 - a1) * (1 - a2)) + (1 - r2) * ((1 - a1) / (1 - a2))
macd := (close - close[1]) * (a1 - a2) + (-a2 - a1 + 2) * nz(macd[1]) - K * nz(macd[2])
ema = ta.ema(macd, 9)
macd
接下来是STC(沙夫趋势指标)计算,其实就是对上面的MACD进一步的归一化和二次平滑处理。
calculateSTC(lengthInput, fastLength, slowLength) =>
var normalizedMACD = 0.0
var smoothedMACD = 0.0
var smoothedNormalizedMACD = 0.0
var STCValue = 0.0
MACDValue = calculateMACD(close, fastLength, slowLength)
lowestMACD = ta.lowest(MACDValue, lengthInput)
highestMACD = ta.highest(MACDValue, lengthInput) - lowestMACD
normalizedMACD := highestMACD > 0 ? (MACDValue - lowestMACD) / highestMACD * 100 : nz(normalizedMACD[1])
smoothedMACD := na(smoothedMACD[1]) ? normalizedMACD : smoothedMACD[1] + smoothingFactor * (normalizedMACD - smoothedMACD[1])
lowestSmoothedMACD = ta.lowest(smoothedMACD, lengthInput)
highestSmoothedMACD = ta.highest(smoothedMACD, lengthInput) - lowestSmoothedMACD
smoothedNormalizedMACD := highestSmoothedMACD > 0 ? (smoothedMACD - lowestSmoothedMACD) / highestSmoothedMACD * 100 : nz(smoothedNormalizedMACD[1])
STCValue := na(STCValue[1]) ? smoothedNormalizedMACD : STCValue[1] + smoothingFactor * (smoothedNormalizedMACD - STCValue[1])
[STCValue-50, MACDValue]
[STCValue, MACDValue] = calculateSTC(lengthInput, fastLength, slowLength)
MACDValue := (MACDValue) / (ta.ema(high - low, slowLength)) * 100
MACDValue := ((MACDValue) - ta.ema(MACDValue, 9))/2
得到如下图:
我用tbquant和python实现了一下这个指标,如下图:
调整smoothingFactor参数可以改变STC的平滑度,然后设置红点和绿点,这两个信号是波段底部和顶部的提示,如果你有开发震荡策略的需求,可以参考一下这个指标。
这个指标有几个用法,如下代码:
alertcondition(ta.crossover(STCValue, STCValue[1]), "STC Moving Up")
alertcondition(ta.crossunder(STCValue, STCValue[1]), "STC Moving Down")
alertcondition(ta.crossover(STCValue, 0), "STC Crossover Zero")
alertcondition(ta.crossunder(STCValue, 0), "STC Crossunder Zero")
alertcondition(ta.crossover(MACDValue, 0), "Histogram Crossover Zero")
alertcondition(ta.crossunder(MACDValue, 0), "Histogram Crossunder Zero")
alertcondition(ta.crossover(MACDValue, MACDValue[1]), "Histogram Moving Up")
alertcondition(ta.crossunder(MACDValue, MACDValue[1]), "Histogram Moving Down")
用法1:当STC与前值交叉,形成图中的红点绿点。
用法2:STC大于小于0来判断趋势。
用法3:自适应MACD金叉死叉0.
用法4:MACD当前值大于小于前值。
OK,到这里我们介绍完了这个指标。现在该说说如何使用和修改这个指标,它的优点和缺点是什么。首先,优点是它能量化出短波段的波峰波谷,这个是我想利用它的最重要的地方。缺点也是这个,在趋势中不断的出现这种反手信号。
看上图的两个多头信号,我来解释这个策略的核心逻辑。副图里MACD频繁出现波峰波谷信号,这个时候我们需要用趋势模块过滤,同时用一个简单的区间模块过滤。最重要的是小区间模块和MACD波峰波谷“共振”,前一步需要把副图的红点绿点从一个点状态转化为一个序列状态。OK,当出现波谷,然后后面确实创出了小范围的新高,那么这个条件就成立了。如果出现了做空的信号,但是小范围内没有实质的下跌,那么条件就不成立。
核心:小区间模块和MACD波峰波谷产生共振。
这样做有两个好处:1.可以过滤部分震荡。2.启动点相对靠前。2-3个不相关的模块产生共振,而不是单独依赖一个模块。
核心条件:
所有品种的MACD计算参数都是默认的12,26,9。
增加趋势指引的模块,可以用均线,MACD,BOLL等趋势指标,无所谓效果都差不多。
增加小区间,主要这个“小”字,比如这个小区间仅仅是5-50周期内的高低点。
保存MACD的红点绿点信号,让它从交叉的“点”状态变成序列状态。
正反手+动态出场。
Tbquant组合绩效展示
参数优化留最近3个月样本外:
样本外3个月的绩效走势:
部分品种曲线图:
EC
LH
SA
BC
EB
AG
SN
AP
Vn.py版本(python)
默认螺纹钢888,无参数优化的绩效,拿到源码后可以自己调优。回测螺纹数据使用松鼠数据库后复权主连数据,数据格式如下:
欢迎加入2024松鼠俱乐部,获得量化需要的策略源码,培训视频,行情数据。
1.原创策略源码,每月至少1期新策略源码。
2.专属数据库(国内商品数据每日更新)
3.个性化工具类-波动率跟踪
4.松鼠分享会(培训视频每月1期)
本策略仅作学习交流使用,实盘交易盈亏投资者个人负责,内容受原创保护,未经授权禁止转发、倒卖策略源码。
咨询详情
长按下方二维码
加客服“小松鼠-松鼠宽客”
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: qs62318888
主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网