stock_data = Functions.merge_with_index_data(stock_data, index_data) stock_data = stock_data[[ 'date', 'code', 'open', 'high', 'low', 'close', 'change' ]] concat = pd.DataFrame() for i in range(14, 19): df = TA_strategy.adx(stock_data, i) df = df[df['date'] >= pd.to_datetime('2005-01-01')] # 采用2005年起的数据 df.reset_index(inplace=True, drop=True) # 在计算ADX之后,最早的一部分数据没有对应的值,需要重新排index # 当pdi上穿mdi,买入,信号为1;当pdi下穿mdi,卖空,信号为0 # 计算ADX指标并得到信号和仓位 df = Functions.cross_both(df, 'pdi', 'mdi') df = equity_cal.position(df) df = equity_cal.equity_curve_complete(df) # df = df[['date', 'code', 'open', 'high', 'low', 'close', 'change', 'volume', 'equity']] df['ADX_' + str(i)] = df['equity'] df.set_index(keys='date', inplace=True) concat = pd.concat([concat, df['ADX_' + str(i)]], axis=1, join='outer') stock_data = stock_data[stock_data['date'] >= pd.to_datetime('2005-01-01')] stock_data['benchmark'] = (stock_data['change'] + 1).cumprod() * 1000000.00 stock_data.set_index(keys='date', inplace=True) concat = pd.concat([concat, stock_data['benchmark']], axis=1, join='inner') fig = plt.figure(figsize=(16, 5)) for i in range(14, 19): plt.plot(concat['ADX_' + str(i)], label='ADX_' + str(i))
'code', 'start', 'param', 'stock_rtn', 'stock_md', 'strategy_rtn', 'strategy_md', 'excessive_rtn' ]) i = 0 for p in range(16, 18, 2): for q in range(20, 21): df = TA_strategy.emv(stock_data, n=p, m=q) df = df[df['date'] >= pd.to_datetime('2005-01-01')] # 采用2005年起的数据 df.reset_index(inplace=True, drop=True) # 在计算emv之后,最早的一部分数据没有对应的值,需要重新排index # EMV大于MAEMV时,买入,信号为1;当EMV小于MAEMV时,卖出,信号为 0 # 计算EMV指标并得到信号和仓位 df = Functions.cross_both(df, 'emv', 'maemv') df = equity_cal.position(df) df = equity_cal.equity_curve_complete(df) df = df[[ 'date', 'code', 'open', 'high', 'low', 'close', 'change', 'volume', 'equity' ]] df['capital_rtn'] = df['equity'].pct_change(1) df.ix[0, 'capital_rtn'] = 0 df['capital'] = (df['capital_rtn'] + 1).cumprod() df_stock = stock_data.copy() # 股票的年化收益 rng_stock = pd.period_range(df_stock['date'].iloc[0], df_stock['date'].iloc[-1], freq='D')