股票量化分析(12)——第三个策略(kdj策略)

首先来看一下百度百科上kdj的策略:
股票量化分析(12)——第三个策略(kdj策略)_第1张图片
这里的kdj值采用talib的STOCH函数来计算,感兴趣的可以看看具体计算过程。理科生会发现经济学的学生的数学计算简直不能更简单。
直接放代码(这里将上面的策略稍微改了一下,j值太敏感,不考虑,k值大于D值的第二天买入该股票,另外d值要大于20,避免超卖):

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

df=ts.get_hist_data('600848',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
highPrice=df.high
lowPrice=df.low
#每天的股价变动百分率
ret=df.p_change/100
 # 调用talib计算MACD指标
df['k'],df['d']=talib.STOCH(np.array(highPrice),np.array(lowPrice),np.array(close),
  fastk_period=9,slowk_period=3,slowk_matype=0,slowd_period=3,slowd_matype=0)

sig_k=df.k
sig_d=df.d
sig_j=df.k*3-df.d*2

kdSignal=pd.Series(0,index=close.index)
#策略 k值大于d值,并且k小于85,d大于20
for i in range(10,len(close)):    
    if sig_k[i]>sig_d[i] and sig_d[i]>=20:
        kdSignal[i]=1

kdTrade=kdSignal.shift(1).dropna()
kdSignalRet=ret*kdTrade.dropna()

#累积收益表现
#股票累积收益率
cumStock=np.cumprod(1+ret[kdSignalRet.index[0]:])-1
#策略累积收益率
cumTrade=np.cumprod(1+kdSignalRet)-1
plt.rcParams['font.sans-serif']=['SimHei']
plt.plot(cumStock,label="cumStock",color='k')
plt.plot(cumTrade,label="kdjTrade",color='r',linestyle=':')
plt.title("股票累积收益率与kdj策略收益率")
plt.legend()

股票量化分析(12)——第三个策略(kdj策略)_第2张图片

从图中可以看出:该策略的收益大于该股本身的收益。从图中我们可以观察到,对于左侧快速上升的阶段,该策略的收益小于股票本身的收益,对于右侧缓慢上升的阶段,该股票的的收益小于策略的收益。

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