10年12倍收益的动量轮动策略(附代码实现)

·
论文 | Meta contrastive label correction for financial time series
·
·

本文介绍的策略在黄金、纳指、创业板和沪深300之间进行轮动,在最近10年的回测周期中总收益率为1243%,年化复合收益率为19.89%,夏普比率1.24,Sortino比率1.85,最大回季度胜率大于60%,年度胜率大于90%。
图片

资产选

轮动资产选择黄金(ETF基金:518880),纳指(ETF基金:513100),创业板(ETF基金:159915)和沪深300(ETF基金:510300)。

  • 黄金(ETF基金:518880):黄金是一种避险资产,通常在经济不稳定或通货膨胀高企时表现较好。它的价格与股票和其他金融资产的表现通常存在负相关关系,因此可以用来对冲股票市场风险。黄金还被认为是一种通胀对冲资产,因为它的价格通常会在通货膨胀上升时上涨。
  • 纳指(ETF基金:513100):纳斯达克指数代表了美国科技股市场的表现。科技股通常具有高增长性和高估值,是投资组合中增长部分的重要组成部分。与其他股票市场(如沪深300)相比,纳斯达克指数的波动性通常更高。因此,它可以通过与其他股票市场的组合来实现资产组合的多样化。
  • 创业板(ETF基金:159915):创业板指数代表了中国创新型企业的表现。创业板股票通常具有高估值和高风险,但也具有高增长潜力。与沪深300等传统股票市场相比,创业板通常更具有成长性和波动性。因此,它可以用来增加投资组合的成长性和风险。
  • 沪深300(ETF基金:510300):沪深300指数代表了中国A股市场的表现。它是中国境内最具代表性的股票指数之一,包括了中国境内市值较大的300家公司。沪深300通常被认为是中国股票市场的重要代表,与创业板等股票市场相比,波动性相对较低。因此,它可以用来实现投资组合的稳健性和多样化。

黄金、纳指、创业板和沪深300代表了不同类型、风格和市场的资产,它们之间具有一定的互补性。通过将这些资产组合在一起,可以实现投资组合的多样化和风险分散。在选择资产时,需要考虑到资产的特性和风险收益特征,以及投资者的风险偏好和目标。

策略描

该策略的基本思想是始终持有过去一段时间涨幅大(动量强)的资产,在4种资产间进行轮动。构建步骤如下:

  1. 每日计算每个ETF过去21个交易日(含计算当日)的涨跌幅作为动量。
  2. 比较动量,选择动量更大的ETF作为投资标的,以当日收盘价买入对应的ETF基金。
  3. 持有所购买的ETF基金,直到下一个调仓日。
  4. 每个调仓日重复以上步骤,根据涨幅更大的指数进行轮动投资。

代码实现

# pip install akshare quantstats

import warnings
warnings.filterwarnings('ignore')
import time
import akshare as ak
import numpy as np
import pandas as pd
import quantstats as qs
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker


def calculate_etf_performance(etf_symbols, window, html_file=None):
    # 获取 ETF 历史数据
    etf_data = {}
    for symbol in etf_symbols:
        etf_df = ak.fund_etf_hist_em(symbol=symbol, period="daily", adjust="hfq")[["日期","收盘"]] \
                    .rename(columns={"日期":"date","收盘":f"{symbol}"}).set_index("date")
        etf_data[symbol] = etf_df

    # 合并数据
    data = pd.concat(list(etf_data.values()), axis=1).dropna().iloc[:]
    data.index = pd.to_datetime(data.index)

    # 计算每日涨跌幅和滚动收益率
    for symbol in etf_symbols:
        column_name = f"{symbol}"
        data[f"{column_name}_day_return"] = data[column_name].rolling(2).apply(lambda x:(x[-1]-x[0])/x[0])
        data[f"{column_name}_return"] = data[column_name].rolling(window=window).apply(lambda x: x[-1]/x[0])
        data[f"{column_name}_ma"] = data[column_name].rolling(window=window).mean()

    # 去掉缺失值
    data = data.dropna()

    data["signal"] = data[[f"{symbol}_return" for symbol in etf_symbols]].idxmax(axis=1).str.split("_").str[0]
    data["signal"] = data["signal"].shift(1)
    data = data.dropna()
    data["signal_return"] = (np.cumprod(data.apply(lambda row: row[f'{row["signal"]}_day_return'], axis=1) + 1) * 100)
        

    for symbol in etf_symbols:
        column_name = f"{symbol}_return"
        data[column_name] = (100/data[f"{symbol}"].values[0]) * data[f"{symbol}"]

    # 绘制曲线图
    fig, ax = plt.subplots(figsize=(156))
    ax.set_xlabel('Time')
    ax.set_ylabel('Return')

    for symbol in etf_symbols:
        column_name = f"{symbol}_return"
        ax.plot(data[column_name].index, data[column_name].values)

    ax.plot(data["signal_return"].index, data["signal_return"].values)
    ax.legend(etf_symbols + ["signal_return"])

    ax.xaxis.set_major_locator(ticker.MultipleLocator(500))

    # 计算策略表现指标
    result = {}
    for symbol in etf_symbols + ["signal",]:
        column_name = f"{symbol}_return"
        result[column_name] = []
        for stat in ["avg_return""volatility""sharpe""max_drawdown""win_rate"]:
            r = getattr(qs.stats, stat)(data[column_name])
            result[column_name].append(r)

    result = pd.DataFrame(result, index=["avg_return""volatility""sharpe""max_drawdown""win_rate"])

    return result

# 构建轮动策略进行回测
etf_symbols = ["518880""513100""159915""510300"]
window = 21
result = calculate_etf_performance(etf_symbols, window, "out.html")
print(result)

回测结

该策略的表现非常优秀。在策略执行期间,该策略的总收益率为1243.01%,年化收益率为19.89%,意味着该策略在长期投资中表现非常优秀。此外,该策略的夏普比率为1.24,Sortino为1.85,最大回撤24.78%,季度胜率大于60%,年度胜率大于90%。综合来看,该策略的收益率较高,风险适度,且稳定性较强,是一种值得考虑的投资策略。
图片
图片
需要注意的是,上述策略的回测过程未计算调仓手续费和滑点对策略收益产生的影响。且过去的表现并不能保证未来的表现,市场风险和不确定性永远存在。

注 | 本文仅为知识分享,不构成任何投资理财建议。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/110986
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 1小时前
下一篇 1小时前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注