股票量化分析(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]<lagrsi24[i]):
        sig2[i]=1
    elif (df.RSI_6[i]<df.RSI_24[i])&(lagrsi6[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('策略收益')

这里写图片描述
从最后结果来看,对于这只股票来说,这个策略的效果一般般,有待改进。

  • 0
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值