大宗商品&商品股票联动策略
策略思想:
策略思想来自中信期货研究报告,外盘大宗商品价格和A股黄金概念板块的价格存在很强的相关性
策略规则
- 商品收盘价格突破m周期最高价买入;
- 从买入信号发生的次日开始计算净值,默认假设以第二天开盘价进行买入;
- 单笔交易自净值最高点下跌超过一定比例则平仓,移动止损;
- 忽略持仓期间重复出现的开仓信号.
策略实现
读取数据
读入商品和股票数据,并计算伦敦金的每日收益率
1 |
commodity_df = pd.read_csv('data/XAU.csv', index_col=0, parse_dates=True)['2007':] |
黄金板块股票的每日收益率:
1 |
stock_df.head() |
计算开仓信号
当今天黄金收盘价高于过去10日平均时发出开仓信号:
1 |
long_signal_period = 10 |
计算持仓信号
每天判断账户净值水平,当账户离当前交易下的最高净值下跌10%时移动止损或止盈:
1 |
holding = False |
计算组合净值
计算组合累积净值
1 |
stock_df['portfolio_return'] = stock_df.equity_return * stock_df.holding_signal # 投资组合收益率 |
benchmark 净值计算
分别计算黄金板块股票和大宗商品黄金的累积收益
1 |
stock_df['stocks'] = (stock_df.equity_return + 1).cumprod() # 黄金板块股票累积收益 |
生成净值曲线
1 |
import seaborn |
策略评价
Sharpe Ratio
1 |
p_return = stock_df.portfolio_return |
得到Sharpe Ratio:1.2354358698026058
最大回撤
1 |
stock_df['cum_max'] = stock_df.portfolio.cummax() |
得到最大回撤:0.38804582454916203