股票量化分析(10)——第一个策略(rsi强度策略)

这里的策略是:小于20为超卖,则买入,大于80则为超买,则卖出。另外以6天的强度和24天的强度作为黄金与死亡交叉,最后把二者的策略结合起来考虑。

直接放代码吧:

import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import talib

df=ts.get_hist_data('601328',start='2015-01-01',end='2015-12-31')
df=df.sort_index()
df.index=pd.to_datetime(df.index,format='%Y-%m-%d')
close = df.close
# 6日的强度指标、24日的强度指标
df['RSI_6'] = talib.RSI(np.array(close), timeperiod=6)
df['RSI_24'] = talib.RSI(np.array(close), timeperiod=24)

#买卖信号
#6日的超买和超卖
sig1=[]
for i in df.RSI_6:
    if i>80:
        sig1.append(1)
    elif i<20:
        sig1.append(-1)
    else:
        sig1.append(0)

df['sig1']=sig1
df.RSI_6[7]
#交易信号2:黄金交叉与死亡交叉
sig2=pd.Series(0,index=df.index)
lagrsi6=df.RSI_6.shift(1)
lagrsi24=df.RSI_24.shift(1)
for i in range(0,len(lagrsi6)):
    if (df.RSI_6[i]>df.RSI_24[i])&(lagrsi6[i]1
    elif (df.RSI_6[i]lagrsi24[i]):
        sig2[i]=-1

df['sig2']=sig2     
#合并交易信号
signal=sig1+sig2
signal[signal>=1]=1
signal[signal<=-1]=-1
signal=signal.dropna()

df['signal']=signal

#买卖信号出现一天后交易
tradSig=signal.shift(1)
ret=df.p_change/100
#求买入交易收益率
ret=ret[tradSig.index]

buy=tradSig[tradSig==1]
buyRet=ret[tradSig==1]*buy

#求卖出交易收益率

sell=tradSig[tradSig==-1]
sellRet=ret[tradSig==-1]*sell

#求出买卖交易合并收益率
tradeRet =ret*tradSig
#收益累计
cumStock=np.cumprod(1+ret)-1
cumTrade=np.cumprod(1+tradeRet)-1

plt.rcParams['font.sans-serif']=['SimHei']

plt.subplot(211)
plt.plot(cumStock)
plt.ylabel('cumStock')
plt.title('股票本身收益')

plt.subplot(212)
plt.plot(cumTrade)
plt.ylabel('cumTrade')
plt.title('策略收益')

股票量化分析(10)——第一个策略(rsi强度策略)_第1张图片
从最后结果来看,对于这只股票来说,这个策略的效果一般般,有待改进。

你可能感兴趣的:(量化分析)