
本文先容的计谋在黄金、纳指、创业板和沪深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种财富间进行轮动。构建智商如下:
逐日辩论每个ETF畴昔21个往返日(含辩论当日)的涨跌幅看成动量。比较动量,礼聘动量更大的ETF看成投资标的,以当日收盘价买入对应的ETF基金。握有所购买的ETF基金,直到下一个调仓日。每个调仓日访佛以上智商,凭据涨幅更大的指数进行轮动投资。代码收场# pip install akshare quantstatsimport warningswarnings.filterwarnings('ignore')import timeimport akshare as akimport numpy as npimport pandas as pdimport quantstats as qsimport matplotlib.pyplot as pltimport matplotlib.ticker as tickerdef 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=(15, 6)) 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 = 21result = calculate_etf_performance(etf_symbols, window, 'out.html')print(result)回测成果
该计谋的证实绝顶优秀。在计谋引申本事,该计谋的总收益率为1243.01%,年化收益率为19.89%,意味着该计谋在耐久投资中证实绝顶优秀。此外,该计谋的夏普比率为1.24,Sortino为1.85,最大回撤24.78%,季度胜率大于60%,年度胜率大于90%。概述来看,该计谋的收益率较高,风险罢休,且默契性较强,是一种值得探求的投资计谋。
图片
图片
需要矜重的是,上述计谋的回测经由未辩论调仓手续费和滑点对计谋收益产生的影响。且畴昔的证实并不可保证未来的证实,市集风险和不笃定性永久存在。注 | 本文仅为学问共享,不组成任何投资承诺忽视。
END本站仅提供存储作事,扫数试验均由用户发布,如发现存害或侵权试验,请点击举报。