之前学习了随机指标(KDJ)策略,在社区中发了KDJ(金叉死叉)。建立了KDJ的金叉死叉策略,但是回测后发现出现了很多错误的买卖点,因此在其基础上对策略进行了改进。当股价经过一段很长时间的低位盘整行情并且K、D都处于50线以下时,一旦K线向上突破D线,表明股市即将转强,股价跌势已经结束,将止跌朝上,可以开始买进股票。当股价经过前期一段很长时间的上升行情后,一旦K线在高位(80以上)向下突破D线时,表明股市即将由强势转为弱市,股价将大跌,这时应卖出。
1. KDJ原理
随机指标(KDJ)一般是根据统计学的原理,通过一个周期内出现过的最高价、最低价及最后一个计算日的收盘价及这三者之间的比例关系,来计算最后一个计算日的未成熟随机值RSV,然后根据平滑移动平均线的方法来计算K值、D值与J值,并绘成曲线图来判断股票走势。
2. KDJ伪码
Input:当前仓位,时间点T
Output:仓位比例
1: 获取股票T日收盘价X
2: 计算周期的未成熟随机值RSV(n)=(Ct-Ln)/(Hn-Ln)×100,
其中:C为当日收盘价,Ln为N日内最低价,Hn为N日内最高价,n为基期分别取5、9、19、36、45、60、73日。
3: 计算K值,当日K值=(1-a)×前一日K值 a×当日RSV
4: 计算D值,当日D值=(1-a)×前一日D值 a×当日K值。
若无前一日K值与D值,则可分别用50来代替,a为平滑因子,不过目前已经约定俗成,固定为1/3。
5: 计算J值,当日J值=3×当日K值-2×当日D值
6: if 当日K值<50 and 当日D值 <50 and 前一日K值<前一日D值 and 当日K值>今日D值:
7: 全仓以T 1日开盘价买入
8: if 当日K值>80 and 当日D值 >80 and K前一日K值>前一日D值 and 当日K值<今日D值:
9: 空仓以T 1日开盘价卖出
3. KDJ策略回测
这里我选择了下表中的标的进行回测
回测时间段 :2005年1月5日至2015年10月8日(和股票上市实际时间段的交集)
回测频率 :按日回测
回测资金:50万
手续费:每笔交易时的手续费是, 买入时万分之八,卖出时千分之1.3, 每笔交易最低扣5块钱。
回测结果如下表
4.简单分析
我从上证50、沪深300各挑选了一只股票,还选了上证50和沪深300的ETF。600196(复星医药,沪深300)、601318(中国平安,上证50)、510300(沪深300ETF)、510050(上证50ETF)四只标的的股价走势如下图
我在回测结果统计表对比了之前的KDJ金叉死叉策略和本次的KDJ低位金叉高位死叉策略,发现在600196(复星医药,沪深300)的回测中累计收益有了大幅度提高,510300(沪深300ETF)累计收益也有了一定程度的提高。但是使用KDJ时601318(中国平安,上证50)、510300(沪深300ETF)、510050(上证50ETF)明显不如使用指数平滑均线策略(可以参考社区中指数平滑均线帖子)。因此我选择参数为5日的KDJ低位金叉高位死叉策略对随机选择的30只沪深300股票进行了回测,可以看出有20只(共30只,占66.67%)股票超过了基准收益率!!!用MACD进行回测时只有11只(共24只,占45.83%),但是回撤依旧有些大这是需要注意的。结果如下表