首页 > 编程知识 正文

金融量化交易决策平台,cci指标使用技巧

时间:2023-05-05 07:54:51 阅读:251560 作者:3333

技术分析策略和交易系统_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', '2016-06-01', '2017-06-30')stock.sort_index(inplace=True)stock.head() openhighcloselowvolumeamountdate2016-06-0116.0016.1415.7915.78116695922.01.949830e+092016-06-0215.7915.9315.8215.6577142114.01.278391e+092016-06-0315.8616.0915.8415.71115413775.01.920685e+092016-06-0615.8715.9215.6915.6555176173.09.119408e+082016-06-0715.7415.8615.7215.6659436762.09.817197e+08 # 计算CCI,取时间周期为20stock['cci'] = ta.CCI(np.asarray(stock['high']), np.asarray(stock['low']), np.asarray(stock['close']), timeperiod=20) stock.tail() openhighcloselowvolumeamountccidate2017-06-2616.6217.0816.9416.58211319532.03.640808e+09229.5889262017-06-2716.9316.9616.7916.7492402416.01.585190e+09172.3621792017-06-2816.7616.9516.7716.6987105025.01.494473e+09135.4652452017-06-2916.7616.8716.7716.6666834132.01.140796e+09107.8912902017-06-3016.7016.7916.7016.5075109183.01.274741e+0973.369026 # 绘制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()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。