Python量化交易——股票择时到底能否赚钱?技术指标大比拼——STOCH指标

45 篇文章 5 订阅
30 篇文章 43 订阅

Python量化交易——STOCH技术指标的有效性研究

背景介绍

技术指标是股票交易中最常用的技术手段之一,几乎所有的技术文章或股票分析文章都离不开通过MACD等各种指标来判断一支股票的买点和卖点,做量化的也会经常接触TA-Lib中提供的各种技术指标。从股评人的文章里看,似乎这些指标都有指哪打哪的能力,但是,我们既然做量化交易,就必须用数据说话,一个技术指标到底好不好,有没有用,不是靠嘴说的,是靠数据来验证的。因此,我这个系列文章的目标,就是把TA-Lib中的技术指标全都拿出来溜一溜,做一个横向大评比。俗话说,是骡子是马拉出来溜溜,通过大数据分析,我们就应该对指标的有效性有一个大致的了解。

为此,我通过一个系列文章,来综合评测33种TA-Lib中的技术指标的有效性,详情请点击这里

STOCH技术指标介绍

STOCH指标(Stochastic Oscillator)向我们展示了有关动量和趋势强度的信息。正如我们将很快看到的,该指标分析价格变动,并告诉我们价格变动的速度和力度。STOCH指标计算K和D两条线,都在0~100之间波动。

指标用法建议

  1. 从取值方面考虑,80以上为超买区,20以下为超卖区,STOCH超过80就应该考虑卖了,低于20就应该考虑买入了;
  2. KD指标的交叉方面考虑,K上穿D是金叉,为买入信号,金叉的位置应该比较低,是在超卖区的位置,越低越好。交叉的交数以2次为最少,越多越好;
  3. KD指标的背离方面考虑 当KD处在高位,并形成两个依次向下的峰,而此时股份还在一个劲地上涨,这叫顶背离,是卖出的信号。 当KD处在低位,并形成一底比一底高,而股价还继续下跌,这构成底背离,是买入信号。

入场时机的判断

  • 当stoch随机指标下行穿破20并且抵达10之后,指标便开始出现反转,快线上行穿破慢线回到了20的上面的话,就是买进的机会。
  • stoch随机指标上行穿破80到达90一点之后,转头向下,快线穿破慢线下跌至80的下面,就是比较好的卖出的信号。

出场时机的判断

  • 如果是买单的话,当stoch随机指标上升到80之后,投资人应该及早获利了结;卖单的话,stoch随机指标到达20之后则投资人可以选择平仓。 [1]

qteasy中内置了STOCH交易策略

这里使用qteasy作为回测评测的工具。

qteasy是本人正在开发的一个快速量化交易工具包,使用这个工具包,可以快速灵活地生成各种量化交易策略,生成历史数据并回测策略的表现,有针对性地优化策略的性能;还能模拟实盘自动化交易。qteasy目前最新版本为v1.0.14,可以通过pip安装,Github项目地址在这里

qteasy 的安装方法:

python -m pip install qteasy

qteasy中有一个内置策略是基于STOCH指标创建的,其创建规则如下:

交易策略:
策略参数:
fk: int, 快速均线计算周期
sk: int, 慢速K均线计算周期
skm: int, 慢速K均线类型,取值范围0~8
sd: int, 慢速D均线计算周期
sdm: int, 慢速D均线类型,取值范围0~8
信号规则:
按照规则计算k值和d值,根据k值生成比例买卖交易信号:
1, 当k > 80时,产生逐步卖出信号,每周期卖出持有份额的30%
2, 当k < 20时,产生逐步买入信号,每周期买入总投资额的10%
3, 当k和d发生背离的时候,不会产生信号,用户须自行设置

上述规则是qteasy内置策略的定义,用户完全可以根据自己的理解重新定义交易规则,或者选用其他策略参数。详细用法参见qteasy文档

433支股票五年回测结果

下面使用qteasy进行技术指标的回测
使用qteasy回测所有433支股票的回测结果,每次回测的时间跨度都是5年,从2015年1月1日开始投资于一个股票,在技术指标发出买入信号时全仓买入,在发出卖出信号后全仓卖出,一直到2019年21月31日为止,最后综合计算每个技术指标的指标强度适应性,通过两个数字来反映技术指标的有效性。关于计算方法的详细介绍,请参见这里

首先放出结果:STOCH策略的强度为

-72.15% ——该指标平均产生-72.15%的超额收益

result_df.describe()
return 策略收益率benchmark 基准收益率mdd 最大回撤sharp 夏普率alpha 超额收益diff
count288288288288288288
mean34.29%106.44%33.99%-inf%-25.32%-72.15%
std47.65%178.18%13.46%nan%38.41%158.13%
min-65.20%-57.14%9.70%-inf%-190.67%-1324.76%
25%4.23%-11.96%24.49%5.93%-43.93%-107.18%
50%30.14%40.12%31.86%37.35%-14.67%-15.29%
75%61.72%156.31%41.57%74.88%2.19%22.90%
max198.06%1420.35%75.90%161.23%80.72%183.14%

288支股票的平均收益率是106.44%,而策略平均收益为34.29%,平均跑输了原始股票103.53个百分点。

再看策略适应性:

-197.07%——该指标平均适应度-197.07%,表现较差

在所有有回测结果的288支股票中,六种典型结果的数量分别如下:

序号组别股票数量该组平均基准收益该组平均择时收益该组平均超额收益
1力挽狂澜37-20.14%26.35%46.49%
2锦上添花5228.50%55.41%26.90%
3差强人意132230.28%58.97%-171.31%
4无力回天36-38.48%-19.21%19.27%
5屋漏逢雨14-28.71%-41.94%-13.23%
6乐极生悲1776.86%-28.54%-105.40%

综上,结论如下:

  • 该指标在绝大部分情况下会产生正收益,产生正收益的比例有约76%,但是,产生的所有正收益都较低,而且其中有大约2/3都是会跑输原始股票
  • 该指标产生的实际择时效果有限,无法选择出有效的上涨波段,通常需要通过调整参数进一步改进策略的表现

总体来说,该指标的择时效果较差,基本上无法选出正确的上涨波段,平均收益非常低。如果要看其他所有股票的结果,请点击这里

  • 30
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KD指标是广泛应用的技术指标之一,其作用是用以测量股价的动量,并提供买入卖出的信号。在Python中,KD的应用可以通过简单的代码实现,以此来进行量化交易。 首先,我们需要导入程序中需要使用的库,包括pandas、numpy、matplotlibtalib。在导入库之后,我们需要进行数据的读取和处理。我们可以通过使用pandas DataFrame读取我们需要的历史股票数据,并将其转换为numpy数组进行处理。 接下来,我们将使用talib库中提供的KD指标进行计算。我们需要在程序中定义一个函数来调用talib库的指标计算功能,并将其应用于我们的数据中。具体实现可以使用以下代码: ``` import talib def kd_indicator(high_prices, low_prices, close_prices): k, d = talib.STOCH(high_prices, low_prices, close_prices, 14, 3, 3) return k, d ``` 在运行以上代码后,我们就能获得K值和D值,以此来判断此时的市场趋势,从而对股票进行买卖的决策。 进行量化交易的核心是制定交易策略,并根据特定的参数进行买卖操作。我们可以在程序中定义一个策略函数,来确定买卖的条件。以下是一个简单的策略函数示例,实现了基本的KD交叉买卖法: ``` def trading_strategy(k, d): if k[-1] > d[-1]: # K值大于D值,买入 return 'buy' elif k[-1] < d[-1]: # K值小于D值,卖出 return 'sell' else: return 'hold' # K值等于D值,持有 ``` 我们还可以添加更多的条件变量,如移动平均线指标、RSI指标等,以增加算法的精度和可靠性。 最后,我们需要将我们的策略应用到实际交易中。在程序中,我们可以使用模拟交易的方法,使用历史数据进行回测,以评估我们的策略的效果。在这个过程中我们需要记录每一次的买入、卖出,并且根据这些交易记录来计算总收益、年化收益率、夏普比率等指标。 综上所述,KD指标量化交易策略代码是一个相对简单的代码实现,可以通过Python语言的优势实现。但是,需要注意的是,对于指标的选择和参数的调整,需要应根据股票市场的不同而灵活调整,以达到最好的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值