主页 > imtoken钱包苹果版怎么用 > 小项目实战分享 | 用Python实现股票技术分析指标
小项目实战分享 | 用Python实现股票技术分析指标
大家好,我是王老师。
许多人都对股票感兴趣。 我用Python实现了股市技术分析中常用的指标,比如:MA、MACD、RSI、BOLL、ATR、KDJ、CCI、PSY等,这些指标在通达信、同花顺等软件上都可以看到。 由于监管通达信 比特币,股票交易软件无法看到比特币行情,因此该项目以比特币为例来应用这些指标。 配合可视化其实可以达到和炒股软件一样的效果。
这里简单介绍一下项目的源码。
先看example1.py文件。
1.获取比特币行情数据
第一步是调用接口获取比特币交易数据。
这里调用了get_price函数获取比特币的“每日”交易数据,我们来看get_price函数
代码比较简单。 请求“api.huobi.de.com”接口的数据,并将返回的数据转换成DataFrame格式。 参数count表示返回数据的天数,参数frequency表示数据粒度,可以是“天”、“60分钟”、“15分钟”等。
我在jupyter中请求了12天的交易数据,可以看到函数返回的效果
前4列代表一天的成交量:开盘价、收盘价、最高成交价、最低成交价。
2. 计算均线指标
有了交易数据,我们就可以计算出指标。 常见的是MA,即移动平均线指标,一般以“收盘价”计算。 MA5代表5日均线收盘价,连线为5日均线。 类似的还有 MA10、MA20、MA30、MA60。
获取收盘价
其实我们需要的是“CLOSE=df.close.values;”。
计算 MA5 和 MA10
调用MA函数通过传入不同的参数计算N天的平均收盘价。看MA函数代码
利用pandas的滚动功能通达信 比特币,可以滑动选择N天的收盘价,调用mean函数可以计算出N天收盘价的平均值。 让我们看看效果:
返回 12 天中每一天的前 N 天的平均收盘价。 我发现里面有很多nan。 以MA5为例,是因为5.25到5.28这几天收不到5天的收盘价,所以填nan。
计算移动平均线交叉
计算移动平均线的目的是计算两者是否相交以及何时相交。 交集可以作为买入(股票)和卖出(股票)的判断。
MA5可以画线,MA10也可以画线。 如果MA5与MA10交叉(向上交叉),可以说市场短期看涨情绪比较高。 相反,MA5 与 MA10 向下交叉(底切),表明市场短期看跌情绪较高。
来看看计算方法
内层先调用CROSS函数计算两条线是否交叉
在CROSS函数中,首先调用IF函数对MA5和MA10各位置的元素进行比较,计算结果存放在CROSS_BOOL中,内容如下:
然后,调用 COUNT 函数对两个相邻元素求和。 传入2作为第二个参数,意思是计算相邻元素。看COUNT函数代码
在COUNT函数中调用了SUM函数,SUM函数也是使用滚动函数,滑动选择2个元素,然后进行sum求和。 CROSS_BOOL中的元素都是布尔类型,False代表0,True代表1。
COUNT 函数返回以下结果:
还需要判断COUNT函数返回的结果是否等于1,等于1有两种情况,第一种情况,前一天为0,当天为1,表示“向上”。 第二种情况,前一天为1,当天为0,表示“wear down”。 从上图看,6.4的值为1,由于6.3的值为0,说明5日线在6.4上穿10日线。
最终,CROSS函数的结果如下:
6.4 的值为 True,这意味着两条线在同一天交叉。
回到最开始的代码“CROSS_TODAY=RET(CROSS(MA5,MA10))”,调用CROSS函数后,再调用RET函数检查某一天是否有交叉。
RET函数比较简单,就是根据索引取对应位置的元素,默认取最后一位。
输出
输出CROSS_TODAY,存储6.5是否交叉。
其实这里的描述是有问题的。 笔者在打印函数中打印的是“今天5日线是否穿越10日线”。 刚才我们说了,True只表示有交叉。 是涨还是跌,需要结合前面的。 判断的是一天还是第二天的状态,这里需要注意。
3.其他代码
除了MA,看看其他指标的计算
第15行代码计算最近5天每一天的收盘价是否高于5日均线。 第 17 行计算 MACD 指标。
这里定义的函数和我们上面解释的差不多,这里就不一一解释了。
可以看出使用pandas可以非常方便的进行数据处理,代码中的很多用法都值得学习,包括函数封装的思想。
指标计算的函数都在MyTT.py文件中,总共100多行代码,涉及的指标很多。 有兴趣的可以自己查一下。
今天的讲解就到此为止,有什么问题或者需要改进的地方欢迎留言。
如果你打算系统学习爬虫以及更多Python编程技巧,戳我文末名片,免费获取最新Python爬虫资讯/免费咨询/学习计划~