社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python量化策略:基于Hull移动平均线和SuperTrend指标的择时策略

灵度智能 • 5 月前 • 221 次点击  

免责声明:本文所有内容‬仅用于交流学习‬,不构成任何投资建议!投资有风险,入市需谨慎!

策略介绍


Hull 移动平均线(HMA)


Hull 移动平均线由澳大利亚数学家艾伦·赫尔(Alan Hull)设计,旨在减少传统移动平均线的滞后性,同时保持曲线平滑。其核心原理是通过加权计算和平方根周期来提升响应速度。计算步骤如下:


  • 计算收盘价的加权移动平均(WMA),分别取半周期(周期/2)和全周期。

  • 利用公式:差值 = 2 × WMA(半周期) − WMA(全周期),得到初步序列。

  • 对上述序列再取WMA,周期为平方根值(如全周期20,则取√20≈4.47,舍入为4)。


HMA能快速捕捉价格趋势转折,减少虚假信号,常用于判断多空转换点。当价格上穿HMA时,可能预示上涨趋势;下穿则可能暗示下跌。


SuperTrend 指标


SuperTrend 是一种基于平均真实波幅(ATR)的趋势跟踪指标,通过动态计算上下轨来识别市场方向。其计算过程如下:


  • 确定中轨:通常取收盘价的简单移动平均(SMA)或最高最低均价。

  • 计算上下轨:

    • 上轨 = 中轨 + 倍数 × ATR

    • 下轨 = 中轨 − 倍数 × ATR

    • 其中倍数常取2-3,ATR周期一般为10-14。

  • 生成信号:当价格低于上轨时,指标显示为下轨值,标识为上涨趋势(通常用绿色线);当价格高于下轨时,显示为上轨值,标识为下跌趋势(红色线)。


SuperTrend 直观展示趋势强弱,能有效过滤盘整行情,适用于趋势跟踪策略。


策略开发:HMA与SuperTrend结合


结合两者优势,可构建一个趋势跟随与过滤共振的策略:


入场条件:

  • 做多:HMA向上拐头且价格突破SuperTrend上轨(由红转绿),确认上升趋势启动。

  • 做空:HMA向下拐头且价格跌破SuperTrend下轨(由绿转红),确认下降趋势启动。


出场条件:

  • 多头持仓中,若价格跌破SuperTrend下轨或HMA拐头向下,则平仓。

  • 空头持仓中,若价格突破SuperTrend上轨或HMA拐头向上,则平仓。


风险控制:

  • 使用ATR动态设置止损,如多单止损置于入场价下方1.5倍ATR处。

  • 可结合时间周期过滤(如仅交易日线级别信号),避免短时噪音。


该策略通过HMA提前感知趋势变化,SuperTrend确认趋势强度,从而提高信号可靠性。回测需优化参数(如HMA周期、SuperTrend倍数),并注意在震荡市中可能连续止损,建议辅以波动率过滤或仓位管理规则。


策略实现


【 扫描文末二维码加入星球获取完整源码 


Hull 移动平均线计算



SuperTrend 指标计算



策略回测



回测效果


经过 25 年的回测(2000 年 1 月至 2025 年 12 月),策略表现如下:


HMA + SuperTrend 策略:

  • 总收益率:1889%

  • 最大回撤:47%

  • 总交易次数:54 次

  • 胜率:81%

  • 盈亏比:7.90


买入持有策略:

  • 总收益率:1289%

  • 最大回撤:55%


策略不仅在收益率上超越了买入持有,还降低了最大回撤。更重要的是,25 年间只交易了 54 次,平均每年不到 3 次,这种低频交易大大降低了交易成本和操作难度。



▌关于我们

我们致力于人工智能、量化交易领域前沿研究,分享前沿论文、模型代码、策略实现。如有相关需求,请私信与我们联系。

▌商务合作

请加微信“LingDuTech163”,或公众号后台私信“联系方式”。


关注【灵度智能】公众号,获取更多AI资讯。




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/191762