700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 金融量化-技术分析策略和交易系统_CCI指标的策略实现

金融量化-技术分析策略和交易系统_CCI指标的策略实现

时间:2020-04-19 10:28:33

相关推荐

金融量化-技术分析策略和交易系统_CCI指标的策略实现

技术分析策略和交易系统_CCI指标的策略实现

CCI指标详解及实战用法

import numpy as npimport pandas as pdimport talib as taimport tushare as tsimport matplotlib as mplimport matplotlib.pyplot as pltimport seaborn as snsplt.style.use('seaborn')%matplotlib inline# 确保可以显示‘-’号mpl.rcParams['axes.unicode_minus']=False# 确保中文显示正常mpl.rcParams['font.sans-serif'] = ['SimHei']

1. 数据获取和数据处理

# 获得历史数据并按时间升序排序stock = ts.get_h_data('600030', '-06-01', '-06-30')stock.sort_index(inplace=True)stock.head()

# 计算CCI,取时间周期为20stock['cci'] = I(np.asarray(stock['high']), np.asarray(stock['low']), np.asarray(stock['close']), timeperiod=20)

stock.tail()

# 绘制cci指标图plt.subplot(2, 1, 1)plt.title('600030 CCI指标图')plt.gca().axes.get_xaxis().set_visible(False) # 只用一个坐标轴stock['close'].plot(figsize = (10,8))plt.legend()plt.subplot(2, 1, 2)stock['cci'].plot(figsize = (10,8))plt.legend()plt.show()

2. 交易信号和策略逻辑

2.1 产生交易信号;

# 产生开仓信号时应使用昨日及前日cci,以避免未来数据stock['yes_cci'] = stock['cci'].shift(1)stock['daybeforeyes_cci'] = stock['cci'].shift(2)

# 产生开平仓信号# 开多信号:当前日cci小于-100,昨日cci大于-100则记为开多信号stock['signal'] = np.where(np.logical_and(stock['daybeforeyes_cci']<-100, stock['yes_cci']>-100), 1, 0)# stock['signal'] = np.where((stock['daybeforeyes_cci']<-100) & (stock['yes_cci']>-100), 1, 0)# 开空信号:当前日cci大于100, 昨日cci小于100则记为开空信号stock['signal'] = np.where(np.logical_and(stock['daybeforeyes_cci']>100, stock['yes_cci']<100),-1, stock['signal'])

plt.subplot(3, 1, 1)plt.title('600030 CCI开仓图')plt.gca().axes.get_xaxis().set_visible(False)stock['close'].plot(figsize = (10,8))plt.legend(loc='upper left')plt.subplot(3, 1, 2)stock['cci'].plot(figsize = (10,8))plt.legend(loc='upper left')plt.gca().axes.get_xaxis().set_visible(False)plt.subplot(3, 1, 3)stock['signal'].plot(figsize = (10,8),marker='o',linestyle='')plt.legend(loc='upper left')plt.show()

2.2 计算持仓

# 如果当天没有交易信号,设置为nan,如果有,取原来信号stock['signal'] = np.where(stock['signal']==0, np.nan, stock['signal'])# 通过前向填充生成持仓记录stock['position'] = stock['signal'].fillna(method='ffill')

plt.subplot(3, 1, 1)plt.title('600030 CCI持仓图')plt.gca().axes.get_xaxis().set_visible(False)stock['close'].plot(figsize = (12,12))plt.legend(loc='upper left')plt.subplot(3, 1, 2)stock['cci'].plot(figsize = (12,12))plt.legend(loc='upper left')plt.gca().axes.get_xaxis().set_visible(False)plt.subplot(3, 1, 3)stock['position'].plot(marker='o', figsize=(10,8),linestyle='')plt.legend(loc='upper left')plt.show()

3. 收益计算和净值绘制

# 计算策略收益# 计算股票每日收益率stock['pct_change'] = stock['close'].pct_change()# 计算策略每日收益率stock['strategy_return'] = stock['pct_change'] * stock['position']# 计算股票累积收益率stock['return'] = (stock['pct_change']+1).cumprod()# 计算策略累积收益率stock['strategy_cum_return'] = (1 + stock['strategy_return']).cumprod()

stock.head()

# 将股票累积收益率和策略累积收益率绘图stock[['return', 'strategy_cum_return']].plot(figsize = (12,6))plt.title('600030 CCI收益图')plt.legend(loc='upper left')plt.show()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。