近五年年化41.3%,卡玛1.69的基于ATR的波动率全球资产轮动(指标+策略代码)

原创内容第800篇,专注量化投资、个人成长与财富自由。

今天的策略是基于波动率(通过归一化的ATR平均波幅)来选择ETF。

ATR可以帮助交易者判断市场是处于趋势状态还是盘整状。

  • 趋势市场:当ATR上升时,表明市场波动性增加,可能是趋势延续的信号。交易者可以考虑在ATR上升时进入趋势方向的交易。

  • 盘整市场:当ATR下降时,表明市场波动性降低,交易者可能选择避免交易或采用区间交易策略。

图片

图片

TR的计算方法如下:
首先计算每个周期的真实波幅(TR),TR是以下三者之间的最大值:
当期最高价与最低价之差(High - Low)
当期最高价与前一收盘价之差的绝对值(|High - Previous Close|)
当期最低价与前一收盘价之差的绝对值(|Low - Previous Close|)
然后,计算一定周期(通常为14天)内所有TR的平均值,即为ATR。

由于talib安装比较麻烦,因此我让deepseek用pandas直接写:

@calc_by_symbol
def ATR(high, low, close, timeperiod=14):
    # 计算前一日收盘价,第一个元素为NaN
    prev_close = close.shift(1)

    # 计算三个波动值
    tr1 = high - low
    tr2 = (high - prev_close).abs()
    tr3 = (low - prev_close).abs()

    # 计算真实波幅TR,当prev_close为NaN时(首日),仅取tr1
    tr = pd.Series(
        np.where(prev_close.isna(), tr1, np.maximum(np.maximum(tr1, tr2), tr3)),
        index=high.index
    )

    # 初始化ATR为TR的滚动平均值
    atr = tr.rolling(window=timeperiod, min_periods=timeperiod).mean()

    # 使用Wilder's平滑方法计算后续ATR
    for i in range(timeperiod, len(tr)):
        if pd.isna(atr.iloc[i]):
            prev_atr = atr.iloc[i - 1]
            current_tr = tr.iloc[i]
            atr.iloc[i] = (prev_atr * (timeperiod - 1) + current_tr) / timeperiod

    return atr

完整的策略代码如下:

from bt_algos_extend import Task, Engine


def ranking_ETFs():
    t = Task()
    t.name = '均线能量行业轮动'
    # 排序
    t.period = 'RunDaily'
    t.weight = 'WeighEqually'
    t.order_by_signal = 'ATR(high,low,close,10)/close'
    t.start_date = '20210101'

    t.symbols = [
        '162411.SZ',  # 华宝油气LOF'
        '159981.SZ',  # 能源化工
        '159980.SZ',  # 有色
        '518880.SH',  # 黄金
        '161226.SZ',  # 白银
        '159985.SZ',  # 豆粕
        # 跨境
        '164824.SZ',  # 印度
        '159920.SZ',  # 恒生
        '513100.SH',  # 纳指
        '513080.SH',  # 法国CAC40
        '513030.SH',  # 德国30
        '513520.SH',  # 日经
    ]
    t.benchmark = '510300.SH'
    return t


from config import DATA_DIR_QUOTES_INDEX

res = Engine(path='quotes').run(ranking_ETFs())
import matplotlib.pyplot as plt

print(res.stats)
from matplotlib import rcParams

rcParams['font.family'] = 'SimHei'
# res.plot_weights()
(res.prices.pct_change()+1).cumprod().plot()
plt.show()

ATR一般是用于计算止损位置,不过高波动率也是市场趋势判断的状态之一,因此,这个策略就是使用ATR来判断趋势方向,效果还不错。

代码在如下位置 :

图片

下载地址:AI量化实验室——2025量化投资的星辰大海

吾日三省吾身

01 

重刷完《流星花园》,再刷一下《匆匆那年》对冲一下。

《流星花园》是懵懂青春,是公主和王子,梦幻的世界。

情啊爱啊,如此纯粹。

回过头看,青春啊,热血啊,普通人破局何其难。

《匆匆那年》就是一群普通人,一群热血少年,到普通中年的故事。

“不悔梦归处,只恨太匆匆”。

那些年,还没有来得及说的话,也许这辈子也不会再说了。

年少时,总觉得未来很好,有那么一天,以胜利者的姿态,王者归来。

蝴蝶飞不过沧海,是沧海那边没有了等待。

欲买桂花同载酒,终不似,少年游。

02

无论是deepseek还是《哪吒2》的成功,都深刻体现出一个道理:做生产者的时代来临。

不必费心去连接,你修炼好自己的内功,然后做出自己作品,自然会被人看到,就是这样。

认知的提升完全可以通过海量阅读、深度思考来获得。

这对于i人是一个巨大的利好。

不必要什么口齿伶俐,所谓情商高,会说话之类的,将不是核心技能,把心思放在长期主义,能力提升和创造上。

代码和数据下载:AI量化实验室——2025量化投资的星辰大海

AI量化实验室 星球,已经运行三年多,1400+会员。

aitrader代码,因子表达式引擎、遗传算法(Deap)因子挖掘引等,支持vnpy,qlib,backtrader和bt引擎,内置多个年化30%+的策略,每周五迭代一次,代码和数据在星球全部开源。

图片

扩展  •  历史文章   

EarnMore(赚得更多)基于RL的投资组合管理框架:一致的股票表示,可定制股票池管理。(附论文+代码)
deap系统重构,再新增一个新的因子,年化39.1%,卡玛提升至2.76(附python代码)

deap时间序列函数补充,挖掘出年化39.12%的轮动因子,卡玛比率2.52

年化19.3%,回撤仅8%的实盘策略,以及backtrader整合CTPBee做实盘(附python代码和数据)

近四年年化收益19.3%,而最大回撤仅8%,卡玛比率2.34,投资应该是一件简单的事情。(附python代码+数据)

aitraderv4.2开发计划,整合QMT。年化39.9%的因子与年化19.3%的策略哪个优?

年化18%-39.3%的策略集 | backtrader通过xtquant连接qmt实战

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI量化投资实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值