大家好,我是橙哥!在现代投资市场中,量化交易凭借其依靠数据和算法来做出理性决策的优势,成为了越来越多投资者的核心工具。今天,我们将结合一个实际的量化交易策略,向你展示如何通过
真实强度指数(TSI)
和
指数移动平均线(EMA)
来构建一个有效的趋势跟踪策略,并通过回测结果来验证其可行性。
惊人的回测结果:策略回报爆炸性增长
在回测过程中,我们采用了从
2020年1月2日到2024年12月31日
的数据进行模拟交易。最初的投资金额为
100,000元
,最终的资金达到了
2,990,064元
,也就是赚取了
2890.06%
的回报!
请在文末获取本文完整源代码和回测结果。
不仅如此,策略的
最大回撤
为
37.53%
,虽然回撤在某些市场条件下较大,但回报的增长明显高于风险,展示了这个策略的强大盈利潜力。接下来,我们将逐步介绍如何通过代码构建这个策略,每一部分代码的功能和背后的逻辑。
一、数据预处理:保证数据质量
在构建量化交易策略时,数据质量至关重要。为了确保后续的分析不受数据错误或缺失的影响,我们需要先对数据进行清洗和处理。具体来说,我们需要确保数据是数值类型,且没有缺失值,日期格式也要符合要求。
这段代码首先将数据框中的
开盘价(Open)
、
最高价(High)
、
最低价(Low)
、
收盘价(Close)
和
成交量(Volume)
转换为数值型数据,确保在后续计算中不会因为数据类型不匹配导致出错。使用
errors='coerce'
选项,无法转换的值会被处理为缺失值(NaN),然后通过
dropna()
删除这些缺失值。最后,我们将数据的索引列转换为日期时间格式,以便后续的时间序列处理。
二、计算 TSI 和 EMA:核心技术指标的计算
在量化交易策略中,技术指标是帮助我们做出买卖决策的关键工具。在这个策略中,我们使用
真实强度指数(TSI)
和
指数移动平均线(EMA)
作为核心指标。TSI 用于衡量市场的动量,EMA 用于识别趋势。
在这段代码中,我们通过自定义的
calculate_tsi()
函数计算了 TSI 指标,
long_period
和
short_period
分别是 TSI 的长期周期和短期周期参数。然后,通过
calculate_ema()
函数计算 EMA 指标,
ema_period
是 EMA 的周期参数。
-
TSI:
当 TSI 为正时,表示市场动量向上,适合买入;当 TSI 为负时,表示市场动量向下,适合卖出。
-
EMA:
EMA 是一个加权的移动平均线,它能
够平滑价格数据,帮助我们判断价格是否处于上涨或下跌趋势。
三、生成买入和卖出信号:策略的核心逻辑
一旦我们计算出 TSI 和 EMA,就可以根据这两个指标来生成买入和卖出信号。具体规则如下:
在这里,我们根据 TSI 和 EMA 的值生成了入场和退出信号。具体而言,当 TSI 为正并且收盘价高于 EMA 时,策略发出买入信号;当 TSI 为负且收盘价低于 EMA 时,策略发出卖出信号。这种基于趋势的信号有助于我们在正确的时间进场并及时退出。
四、回测:验证策略的效果
在我们生成了交易信号后,接下来就是验证策略是否有效的关键步骤——回测。通过回测,我们能够看到这个策略在历史数据中的表现,判断它是否能够在真实市场中盈利。
在这段代码中,我们使用了网格搜索的方法,对
TSI
和
EMA
的多个参数组合进行了测试。
tsi_long_range
、
tsi_short_range
和
ema_range
分别定义了 TSI 长期周期、短期周期和 EMA 周期的不同取值范围。通过遍历这些参数组合,我们可以找到表现最好的参数配置,从而优化策略的回报。
五、回测结果:评估策略表现
回测结果提供了策略在历史数据上的详细表现。最终的回测结果显示,通过采用
10 周期的 TSI 长期周期
、
5 周期的 TSI 短期周期
和
30 周期的 EMA
配置,策略在过去几年中实现了