小项目实战分享 | 用Python实现股票技术分析指标

大家好,我是王某人。

股票是很多人感兴趣的,我用Python实现了股市技术分析中常见的指标,如:MA,MACD,RSI,BOLL,ATR,KDJ,CCI,PSY等,这些指标在通达信、同花顺等软件上都能看到。由于监管,炒股软件没办法看到比特币行情,所以该项目以比特币为例来应用这些指标。配合可视化其实可以实现跟炒股软件一样的效果。

下面就来对该项目的源码做个简单介绍。

先看 example1.py 文件。

1、获取比特币行情数据

第一步先调用接口获取比特币交易的数据。

这里调用了 get_price 函数,来获取比特币“每天”的交易数据,来看下 get_price 函数

小项目实战分享 | 用Python实现股票技术分析指标_第1张图片

代码比较简单,请求 “api.huobi.de.com” 接口的数据,并将返回的数据转成 DataFrame 格式,参数 count 代表需要返回多少天的数据,参数 frequency 代表数据粒度,可以是“天”、“60分钟”、“15分钟”等。

我在 jupyter 里请求了 12 天的交易数据,大家可以看下函数返回的效果

小项目实战分享 | 用Python实现股票技术分析指标_第2张图片

 前4列分别代表一天的交易里:开盘价、收盘价、最高成交价、最低成交价。

2、计算移动平均线指标

有了成交数据我们就可以计算指标了,常见的就是MA,即:移动平均线指标,一般用“收盘价”来计算,MA5代表5日平均收盘价,连成线就是5日均线。类似的还有 MA10、MA20、MA30、MA60。

获取收盘价

其实我们需要的是“CLOSE=df.close.values;”。

计算MA5和MA10

调用 MA 函数,通过传入不同的参数,来计算N日平均收盘价。来看 MA 函数代码

利用 pandas 的 rolling 函数,可以滑动地选择 N 日收盘价,在调用 mean 函数就可以计算 N 日收盘价的均值。来看下效果:

小项目实战分享 | 用Python实现股票技术分析指标_第3张图片

返回的是 12 天里每天的前N天的平均收盘价。发现里面有很多 nan,以 MA5 为例, 是因为 5.25 ~ 5.28号这几天无法凑齐 5 天的收盘价,所以填nan。

计算均线交叉

计算均线的目的是为了计算二者是否相交以及什么时候相交,相交可以作为买入(股票)、卖出(股票)的判断。

MA5可以画一条线,MA10也可以画一条线,如果MA5向上与MA10交叉(上穿),可以说市场短期看涨情绪比较高。反之,MA5向下与MA10交叉(下穿),说明市场短期看跌情绪更高。

下面来看看计算方法

内层先调用了 CROSS 函数,计算两条线是否有交叉

CROSS 函数里首先调用 IF 函数,对 MA5 和 MA10 每个位置的元素进行比较,计算结果存在 CROSS_BOOL 里,内容如下:

小项目实战分享 | 用Python实现股票技术分析指标_第4张图片

然后,调用 COUNT 函数,对相邻两个元素进行求和。第二个参数传 2 就代表计算相邻元素。看下 COUNT 函数代码

COUNT 函数里调用了 SUM 函数,SUM函数同样使用 rolling 函数滑动地选择 2 个元素, 然后进行 sum 求和。CROSS_BOOL 里的元素是布尔类型,False代表 0 , True 代表 1。

COUNT 函数返回结果如下:

还需判断 COUNT 函数返回的结果是否等于 1,等于1有两种情况,第一种情况,前一天是0,当前天是1,代表“上穿”。第二种情况,前一天是1,当前天是0,代表“下穿”。从上图看,6.4 号这一天取值1,并且由于 6.3 号取值是0,说明 6.4 号5日线上穿10日线。

最终,CROSS 函数的结果如下:

小项目实战分享 | 用Python实现股票技术分析指标_第5张图片

6.4 号取值 True,代表两条线在当天有交叉。

回到最开始的代码“CROSS_TODAY=RET(CROSS(MA5,MA10))”,调用 CROSS 函数后,还调用 RET 函数取某一天是否有交叉。

RET 函数比较简单,就是按照索引取对应位置的元素,默认取最后一个。

输出

将 CROSS_TODAY 输出,它存放的是 6.5 号是否有穿越。

其实这里的描述有问题,作者在 print 函数里打印的是 “今天5日线是否上穿10日线”,刚才我们说过,True 只代表有穿越,具体上穿还是下穿还需要再结合前一天或者后一天的状态进行判断,所以这里需要注意下。

3、其他代码

除了 MA 外,再看看其他指标的计算

小项目实战分享 | 用Python实现股票技术分析指标_第6张图片

第15行代码计算了最近5天,每天的收盘价是否都在 5 日均线之上。第17行计算了 MACD 指标。

这里定义的函数跟上面我们讲解的差不多,这里就不再一一讲解了。

可以看到利用 pandas 可以非常方便地进行数据处理, 代码里好多用法挺值得学习的,包括函数的封装思想。

指标计算的函数都在 MyTT.py 文件里,一共 100 多行代码,涉及的指标不少,感兴趣的话大家可以自行查阅。

小项目实战分享 | 用Python实现股票技术分析指标_第7张图片

今天的讲解内容就这些啦,有问题或者需要改进的地方欢迎留言。

如果你准备系统地学爬虫及更多Python编程技术,可戳我文末的名片,Free领取最新Python爬虫资料/免费咨询/学习规划~

你可能感兴趣的:(python)