照片由 rc.xyz NFT画廊 (https://unsplash.com/@moneyphotos) 拍摄,来自 Unsplash (https://unsplash.com/)
突出显示- 文章难度:★★★☆☆
- 介绍SuperTrend指标以及ADX(平均趋向指数)。
- 解释SuperTrend策略,并说明如何通过ADX指标优化该策略。
- 使用TQuant Lab回测SuperTrend策略,并观察其捕捉市场波动性的效果。
超趋势指标是一种技术分析工具,用于识别金融市场的趋势。它帮助投资者确定市场波动期间的相对高点和低点,从而帮助他们做出买入和卖出的决定。这使得超趋势指标特别适合那些需要帮助辨别市场方向或经常过早退出交易,错失潜在收益的投资者。然而,超趋势指标的一个缺点是,在市场整理阶段表现不佳。为了解决这个问题,本文将使用平均方向指数(ADX)来优化超趋势策略的应用。
ADX指标是由J. Welles Wilder于1978年开发的,用于衡量趋势的强度,其值范围在0到100之间,数值越高表示趋势越强劲。通过结合使用SuperTrend指标和ADX,我们可以更有效地区分趋势和区间整理阶段。这使我们能够构建一个SuperTrend策略,并且利用TQuant Lab对其进行回测,来评估它捕捉市场波动的表现。
超趋势指标和ADX指标注:ADX代表平均方向指数。来自TradingView的超级趋势指标图(TradingView是一个提供金融市场数据和图表的网站)。
上面的图表展示了应用于价格图表的超级趋势指标。我们可以观察到,超级趋势指标有效地识别了上升趋势阶段;然而,在整理阶段会产生杂讯,从而导致信号不够可靠。为了缓解这个问题,我们将超级趋势指标与ADX结合使用,帮助我们确定趋势的强度。这种组合让我们能够构建一个更稳健的超级趋势策略。下面我们将解释超级趋势和ADX指标背后的公式,以展示它们的内部运作。
超趋势指标公式虽然超级趋势指标在图表上看起来像一根直线,但它实际上由两条带构成。当收盘价突破上带时, ,这预示着可能的上升趋势,此时下带则成了新的支撑位置。相反,当收盘价跌破下带时,则可能意味着下降趋势,此时上带则成了新的阻力位置。我们看到的超级趋势指标是通过上升趋势中的支撑位(下带)和下降趋势中的阻力位(上带)来形成的。
计算超趋势线的上界和下界,我们需要按照以下三个步骤来做:
第一步:计算ATR
ATR(平均真实波动幅度)基于TR(真实范围),而TR表示特定时期内的最大价格波动范围。TR通常由以下三种差值中的最大绝对值来决定:
- 当日最高价和最低价之间的差价。
- 上一个交易日的收盘价和今天最高价之间的差价。
- 上一个交易日的收盘价和今天最低价之间的差价。
ATR的计算方法是通过对TR(通常为14个交易日)计算移动平均值来获得的。
附注:ATR的更多用法可参考:TQuant Lab 规避亏损策略 — 平均真实范围。
第二步:计算基本上下界限
基本的上轨和下轨的计算公式如下:
- 基本上限 = ( 最高 + 最低 ) / 2 + 乘数 × ATR
- 基本下界 = ( 最高 + 最低 ) / 2 − 乘数 × ATR
这个乘数是用来调整频带之间距离的,通常设为2或3。
第三步:计算最终上轨和下轨线
- 最终的上界:如果新的基础的上界低于之前的最终的上界,或者如果前一日的收盘价高于之前的上界,则使用新的基础的上界。否则,保留之前的最终的上界。
- 最终下界:如果新的基础的下界高于之前的最终下界,或者如果前一日的收盘价低于之前的下界,则使用新的基础的下界。否则,保留之前的最终下界。
ADX指标的数值可以从0到100之间变化,其解释如下:
- ADX < 25:市场趋势较弱,表示市场正处于整理阶段。
- 25 < ADX < 50:市场正在形成中等程度的趋势。
- ADX > 50:市场已经确立了较强的趋势。
计算ADX(平均方向指数)涉及四个步骤:
第一步:算出ATR
ATR的计算方式与SuperTrend指标一样。
第二步:计算+DM和-DM(正方向动量和负方向动量)
- +DM :如果(今天最高价 - 昨天最高价) > (昨天最低价 - 今天最低价),则 +DM = 较大值(今天最高价 - 昨天最高价, 0)。否则,+DM = 0。
- -DM :如果(昨天最低价 - 今天最低价) > (今天最高价 - 昨天最高价),则 -DM = 较大值(昨天最低价 - 今天最低价, 0)。否则,-DM = 0。
接下来计算+DI和-DI(多空指标)
- +DI :100 × ( +DM 的移动平均线 / ATR )
- -DI :100 × ( -DM 的移动平均线 / ATR )
第4步:计算ADX
DX 可以表示为 100 乘 ( |+DI — (-DI)| / |+DI + (-DI)| ),其中DX 表示正方向动量和负方向动量的差的绝对值除以它们的和的绝对值的100倍。
ADX是通过对DX值进行移动平均计算并在指定周期内获得的。
以下展示了我们将如何利用TQuant Lab来生成超趋势策略所需的交易信号。
超趋势策略 编程环境和模块需求这篇文章是在Windows 11和Jupyter Lab上写的。
import os
import numpy as np
import pandas as pd
# 存储TEJAPI密钥
tej_key = 'your key'
api_base = 'https://api.tej.com.tw'
os.environ['TEJAPI_KEY'] = tej_key
os.environ['TEJAPI_BASE'] = api_base
一个选股的股票池
根据超级趋势指标的特性,我们的目标是选择具有增长潜力且倾向于形成趋势的股票。因此,我们使用get_universe
函数来获取2018年底时已经上市的电子行业股票,并使用TEJ Tool API
按市值筛选出市值最大的10家公司。
from zipline.sources.TEJ_Api_Data import get_universe
pool = get_universe(start='2018-12-28',
end='2018-12-28',
mkt_bd_e='TSE', # 台湾证券市场
stktp_e='普通股',
main_ind_c='M2300 电子工业' # (电子工业)
) # 也可以使用 `main_ind_e = M2300 Electronics`
import TejToolAPI
mktcap_data = TejToolAPI.get_history_data(start = '2018-12-28',
end = '2018-12-28',
ticker = '股票池',
columns = ['市值(美元)']
)
tickers = mktcap_data.nlargest(10, '市值(美元)')['公司ID'].tolist()
交易数据导入:
将回测时间段设置为2019年1月1日至2024年7月1日,这段时间里,我们导入了所选10只股票的价格和交易量数据,并将台湾证券交易所加权指数全收益版(IR0001)作为绩效基准。
start = '2019-01-01'
end = '2024-07-01'
os.environ['mdate'] = start + ' ' + end # 设置环境变量'mdate',值为开始和结束日期
os.environ['ticker'] = ' '.join(tickers) + ' ' + 'IR0001' # 设置环境变量'ticker',值为股票代码列表加上'IR0001'
!zipline ingest -b tquant # 使用zipline命令将数据导入到tquant中
处理交易数据
手握价格和成交量数据后,我们可以使用CustomFactor
函数来构建超级趋势指标和ADX指标的上下带。为了更好地检测趋势并减少短期波动的影响,我们将超级趋势指标的ATR计算周期设为50天,乘数设为4。ADX的计算周期为14天,以实现及时评估趋势强度。
CustomFactor
函数的详细构造可以在GitHub源代码中找到:该项目位于TQuant Lab SuperTrend Strategy(TQuant 实验室超级趋势策略)。
此外,通过Pipeline
函数,我们可以快速集成多个股票的量化指标和价量数据。比如,在这种情况下,我们用它来处理。
- 导入每日的收盘价格。
- 计算超趋势指标的最终上下轨。
- 计算ADX值。
这些从管道得到的结果数据将被用来制定我们的战略
创建SuperTrend策略如文章开头所述,我们旨在使用ADX指标来识别足够强劲的趋势,在进入交易前,以此来减轻SuperTrend指标在识别整理阶段时的劣势。然而,在构建买入信号时,我们并不回避整理阶段,因为这些阶段可以被视作市场的休息期,在此期间市场积累能量,是进入仓位的理想时机。另一方面,在下跌趋势开始前,我们结合使用ADX指标来确保卖出仓位,以避免错过之前上升趋势带来的收益。
超趋势策略的买卖规则如下所述:买入和卖出的具体规则如下:
- 长入场信号:当收盘价突破最终上轨时,这可能表示上升趋势,因为价格突破了阻力,导致整个股票池出现相应的买入行为。
- 短入场信号:如果收盘价跌破最终下轨,并且 ADX > 50,这可能表示下降趋势,因为价格跌破了支撑,导致持仓被卖出。
通过TQuant Lab提供的zipline
函数,我们可以。
请根据您需要的具体功能或操作补充完整句子。
- 添加流动性滑点和交易费用,并将台湾证券交易所总报酬指数的回报率设定为基准。
- 将计算出的流水线结果整合到交易流程中。
- 启用超级趋势策略并记录交易细节。
我们使用 run_algorithm()
函数来执行配置的 SuperTrend 策略(SuperTrend 策略由 SuperTrend 指标决定),交易期间从 2019-01-01 到 2024-07-01,初始资金为 1,000,000 新台币。输出,即 结果 ,将展示每日表现和详细交易记录。
交易细节
使用Pyfolio: 进行绩效分析回测表现与基准的对比。
如上表所示,SuperTrend策略实现了25.88%的年化收益率,同时具有相对较低的年化波动率(大约13%)。进一步分析其表现指标,夏普比率是1.84,索提诺比率是2.82,表明SuperTrend策略在有效规避下行风险的同时,能够获得超额收益,并且在控制风险方面表现优异。观察收益曲线,尽管该策略没有显著超越市场表现,在2021年初达到高点后,收益率保持稳定直到2022年中期,成功避开了2022年的熊市。此外,在2023年后呈现出良好的恢复趋势,展示了SuperTrend策略在上涨趋势中锁定利润并提前规避下行风险的能力,这一特性使得它在市场波动中表现稳健。
水下情节
水下图显示,两次最大的回撤幅度发生在新冠疫情期间的2020年初和2022年的熊市。然而,与更广泛的市场而言在这两个时期经历的30%回撤相比,SuperTrend策略而言经历的16%和14%回撤相比之下较小。
使用超级趋势策略的个股表现使用run_algorithm()
生成的管道结果表格和交易详情,我们还创建了一个graph()
函数,以便更好地理解超趋势策略下的各个股票表现。
graph()
的构建方式可以参考来自GitHub源码:TQuant Lab SuperTrend Strategy,该源码位于上述链接。
台积电TSMC超趋势策略表现图
在上图中,红色点表示进场点,绿色点表示出场点。我们可以看到,SuperTrend策略体系在2019年至2020年的上升趋势中成功获利。然而,在2021年的盘整期和2022年的下跌趋势中,显示出在相对较高的价位买入的情况,显示出策略失效的现象。幸运的是,ADX指标优化后的卖出点帮助限制了部分损失,而2023年的买入点成功捕捉到直到2024年7月的获利。
结尾:这一策略受到SuperTrend指标的启发。鉴于该指标在整理阶段表现不佳,我们使用了ADX指标来优化这一策略并减少短期交易中的噪音。通过Pyfolio生成的性能分析图表,我们观察到这一策略有效避免了下跌风险。我们还分析了TSMC在这一策略下的表现,发现它能有效捕捉到趋势收益。
请投资者注意,本文中的策略构建包括选择股票池以及指标计算的参数设定。不同的股票池和参数设定可能会影响表现结果。有兴趣尝试这一策略的投资者可以尝试不同的参数设置,构建最适合的投资策略。
请注意,本文中讨论的策略和目标仅供参考,并不构成任何具体商品或投资的推荐。未来,我们将介绍如何利用TEJ数据库构建各种指标,并回测其表现情况。因此,我们欢迎对感兴趣的交易策略感兴趣的读者通过量化金融解决方案购买相关解决方案。您可以构建符合您需求的交易策略。
TQuant Lab|一站式量化研究,打造屬於你的投資研究利器。TQuant Lab提供高品質的資料與分析工具,搭配全方面策略回測引擎與專業因子分析工具,快速產生視覺化報表,是您在量化投資之旅中不可或缺的一大利器。tquant.tejwin.com源代码
更多阅读 关于我们共同學習,寫下你的評論
評論加載中...
作者其他優質文章