当前位置: 首页 > 后端技术 > Python

Python量化投资实战教程(四)——KDJ策略

时间:2023-03-26 19:12:32 Python

量化投资系列文章:Backtrader教程——Python量化投资实战教程(一)Python量化投资实战教程(二)——MACD策略(+26.9%)Python量化投资实战教程(三)——A股回测MACD策略Github仓库:https://github.com/Ckend/pythondict-quant今天我们将使用backtrader尝试另一种量化投资策略:KDJ策略,KDJ是最常用的一种指标一、其中文名称为“随机指标”。它利用统计原理,找出N个交易日内最高价、最低价和最新收盘价之间的比例关系,计算出随机值(RSV),然后根据加权移动平均法(EMA)计算K值、D值、J值。具体计算方法如下:RSV=(收盘价-N期最低价)/(N期最高价-N期最低价)*100K值=RSVD值的N期加权移动平均数=N-K值的周期加权变动平均J值=3_K-2_D一般来说RSV的N周期选择9,K和D的N周期选择3。基本概念大家都明白了,那么如何决定买卖根据KDJ值?当J值穿越K值时,就是买入信号,此时买入。当J值穿越K值时,就是卖出信号,所以此时卖出。这个策略有效吗?让我们试试看。1.在开始之前,您需要确保您的计算机上已经成功安装了Python和pip。如果没有,请访问这篇文章:超级详细的Python安装指南进行安装。如果使用Python进行数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手-AnacondaWindows环境打开Cmd(开始-运行-CMD),苹果系统环境请打开Terminal(命令+空格输入Terminal),准备开始输入命令来安装依赖。当然,我更推荐你使用VSCode编辑器,将本文代码复制,在编辑器下方的终端中运行命令安装依赖模块。多么惬意的一件事:Python编程的最佳搭档——VSCode详解指南。在终端输入如下命令安装我们需要的依赖模块:pipinstallbacktrader如果看到Successfullyinstalledxxx,则安装成功。Backtrader的基本使用可以参考我们之前的文章:Backtrader教程——实战量化投资教程(一)本文所有代码请在Python实战宝典后台回复:量化投资4下载。2.单一KDJ策略如果您之前从未使用过backtrader,请阅读:Backtrader教程-量化投资实战教程(一)进行学习,否则您会有些摸不着头脑。直接下载代码学习也是一种方式,但前提是你的自学能力足够强。首先,我们需要计算出K、D、J这三个值,之前我们也提到过它们的计算方法:RSV=(收盘价-N期最低价)/(N期最高价-N期最低价)*100K值=RSV的N期加权移动平均数D值=N期K值的加权移动平均数J值=3_K-2_D知道了计算方法,后面的工作就简单了:#9个交易日以来的最高价。high_nine=bt.indicators.Highest(self.data.high,period=9)#9个交易日内最低价self.low_nine=bt.indicators.Lowest(self.data.low,period=9)#计算rsv值self.rsv=100*bt.DivByZero(self.data_close-self.low_nine,self.high_nine-self.low_nine,zero=None)#计算rsv的3期加权平均值,即K值self.K=bt.指标。EMA(self.rsv,period=3)#D值=K值的3周期加权平均值self.D=bt.indicators.EMA(self.K,period=3)#J=3*K-2*Dself.J=3*self.K-2*self.D最后决定买点和卖点:#Python实用书defnext(self):self.log("Close,%.2f"%self.dataclose[0])ifself.order:returnifnotself.position:#J-Dvaluecondition1=self.J[-1]-self.D[-1]condition2=self.J[0]-self.D[0]ifcondition1<0andcondition2>0:self.log("BUYCREATE,%.2f"%self.dataclose[0])self.order=self.buy()else:condition=(self.dataclose[0]-self.bar_executed_close)/self.dataclose[0]如果条件>0.1或条件<-0.1:self.log("SELLCREATE,%.2f"%self.dataclose[0])self.order=self.sell()不过从卖出策略可以看出,我暂时没有使用J越过K值的方法卖出股票,而是使用涨跌10%的限制条件作为卖出信号,请参阅该策略的表现如何?这里和上篇文章一样。我们以10000元作为本金回测002859股票从2010年1月1日到2020年4月21日的走势:效果不是很好,本金10000元,最后剩下的9892元还是亏损。从盈亏来看,这个策略确实输的次数多,比赢的多一倍。但这是我们基于限制性销售的条件。如果J值穿过K值作为卖出信号怎么办?基于backtrader,我们做这样的买卖信号调整真的非常简单:#Python实战宝典defnext(self):self.log("Close,%.2f"%self.dataclose[0])if自己。order:returncondition1=self.J[-1]-self.D[-1]condition2=self.J[0]-self.D[0]ifnotself.position:#J-Dvalueifcondition1<0andcondition2>0:self.log("BUYCREATE,%.2f"%self.dataclose[0])self.order=self.buy()else:ifcondition1>0orcondition2<0:self.log("SELLCREATE,%.2f"%self.dataclose[0])self.order=self.sell()它是如何工作的?卧槽,你不靠谱,一万元本金只剩九千零二十九元。但这还不足以否定这一策略的价值。接下来我们尝试结合MACD策略使用。3、多策略回测通过回测得到的图表,我发现KDJ指标在判断买入信号时有很大的延迟,比MACD买入信号延迟要重很多,但是它的卖出信号很好,很灵敏。因此,我们可以考虑引入MACD策略,利用MACD来决定买入,利用KDJ信号来决定卖出。引入MACD策略相关变量:#MACD策略参数me1=EMA(self.data,period=12)me2=EMA(self.data,period=26)self.macd=me1-me2self.signal=EMA(self.macd,period=9)bt.indicators.MACDHisto(self.data)至于MACD策略为什么要这样计算,请看我们之前的文章:Python量化投资实战教程(二)——MACD策略(+26.9%).所以我们的文章是环环相扣的。如果你还没有看过,请记得稍后补上。从上面两张图可以看到两条变化非常大的线,就是两条3日均线的线。我们可以摆脱它们,因为它们没有太大价值。添加一个plot=False参数,让它们不显示:#计算rsv的3个周期加权平均值,即K值self.K=bt.indicators.EMA(self.rsv,period=3,plot=False)#DValue=3-periodweightedaveragevalueofKvalueself.D=bt.indicators.EMA(self.K,period=3,plot=False)根据MACD策略的买入信号买入,卖出KDJ策略的信号Sell:ifnotself.position:#BuybasedonMACDstrategycondition1=self.macd[-1]-self.signal[-1]condition2=self.macd[0]-self.signal[0]ifcondition1<0andcondition2>0:self.log('BUYCREATE,%.2f'%self.dataclose[0])self.order=self.buy()else:#SellbasedonKDJstrategycondition1=self.J[-1]-self.D[-1]condition2=self.J[0]-self.D[0]如果condition1>0或condition2<0:self.log("SELLCREATE,%.2f"%self.dataclose[0])self.order=self.sell()回测结果如下:最终结果为10057.06,赚了57元。.当然,总比单纯的KDJ策略不赚钱要好。但是这个策略还是有问题的。它在可以赚到很多钱的时候就把股票卖得太安全了,以至于亏损的次数实际上大于赚钱的次数。当然,我们无法仅从一只股票中看出该策略的整体质量。下一篇量化投资文章(2020/05/09左右),我们将随机抽取A股1000只个股来验证这个复合策略的整体收益。Python实战宝典最新更新,敬请期待。这是我们文章的结尾。如果喜欢我们今天的Python实战教程,请继续关注我们。如果对您有帮助,请在下方点赞/观看。有什么问题可以在下方评论留言,我们会耐心解答!Python实战宝典不只是合集欢迎关注公众号:Python实战宝典原文来自Python实战宝典:Python量化投资实战教程(四)—KDJ策略