手把手教你python实现量价形态选股知乎_【量化投资】如何使用python软件对一只股票进行分析(手把手教你详细操作)...

首先要做的就是学习如何获取数据、保存数据、读取数据。

1、数据的获取

数据的获取是不是要用到爬虫啊,可是我不会怎么办?

其实告诉大家一个简单的方法就是使用Python的tushare包,虽然从这个包中获取的数据可能并不完全满足我们的需要,但是对于做一些简单的分析已经足够了。

打开Anaconda Prompt,然后输入conda list看一看这个包有没有安装,如果没有安装,我们可以在这个界面输入pip install tushare直接安装这个包。

我们以获取“000001”(平安银行)为例:

因为我们后续内容还要用到NumPy包,所以首先导入Tushar包和NumPy。

我们使用tushare的get_hist_data( )函数进行获取,并查看数据的前五行。

有点遗憾的是,通过这种方法只能获取最近3年的数据,如果要是做简单的分析是足够了。接下来把数据保存为“csv”格式

如何读取呢? 此时就需要Numpy 的loadtxt( )函数。

比如我们要读取这只股票的收盘价和成交量。

解释一下参数的含义:

(1)首先是stock_data.csv,这个是文件名,因为我使用的是notebo,当我 们保存数据时,就直接保存到了home中,我可以直接调取,如果使用 ipython需要输入文件的地址,这一点要注意。

(2)第二个参数我们设置分隔delimiter=‘,’,(采用什么符号来分割列)默认情况下是空格来分割,一般我们常用英文逗号作为分隔符。

(3)第三个参数代表使用的列,注意列的索引是从0开始的哦,第四个参 数unpack=True表示我们允许分拆保存不同的列,比如我们单独把收盘价 赋值给c,成交量赋值给v,如果是False则不可以。

(4)最后一个参数是skiprows=1代表跳过头行,如果不设置的话,会出现错 误,说不能将第一行的字符串转为浮点数。

2、计算股票成交量加权平均价格

VWAP(成交量加权平均价格)是一个非常重要的经济学量。它代表着金融资产的“平均价格”,某个价格的成交量越高,该价格所占的权重也就越大,VWAP常用语算法交易。

很简单吧,我们也可以计算某一个区间的VWAP,区别只是c和v要选取到某个时间区间。

我们使用了average函数,average函数有四个参数,分别是a、axis、weights、returned。

第一个参数:a,就是要根据权重计算的那一列或者一行数据。

第二个参数:axis代表轴,也就是方向,默认是按照纵向,如果axis= 1则会按照横向计算。举个例子

我们是按照横向来计算加权平均值,如果去掉axis参数,则会报错,因为纵向有3个数据,而权重只有两个,所以会显示无法匹配。

第三个参数weights代表权重,第四个参数returned,默认的情况下是False。此时只显示算出来的加权平均值,如果设置returned=True则会返回一个元组,这个元组第一部分是求出的平均值,第二部分是权重的和。看下面例子

一般returned参数并不常用。针对axis在numpy中的应用,后面内容中我会专门作出介绍~~

3、计算收盘价的算数平均值

4、时间加权平均价格

在经济学中。TWAP(时间加权平均价格)是另外一种“平均”价格的指标,前面我们已经计算VWAP。时间加权平均价格只是一个变种,基本的思想就是最近的价格重要性大一些,所以我们应该对近期的价格给以较高的权重。最简单的方法就是用arange函数创建一个从0 开始一次增涨的自然数序列,个数也就是收盘价的个数,虽然这并不是最合适的做法,我们只是为了说明计算时间加权平均价格这个问题。

5、收盘价最大值、最小值和中位数

注意:在计算中位数的时候,如果数据个数是奇数的,那么返回的就是中间值,如果是偶数,则会返回中间两个值的平均数。

ptp函数可以计算数组的取值范围,它也有一个参数axis,默认是axis=0,是按照纵向计算,如果axis=1,则按照横向计算。

6、股票收益率

我们通常很关注股票的收益率,这个收益率包括简单收益率和对数收益率。简单收益率是指相邻两个价格之间的变化率,而对数收益率是所有价格取对数后两两之间的差值。

(1) 计算简单收益率。

我们可以使用diff函数计算相邻数组元素的差值,构成一个数组,然后用这个数组除以前一天的价格。这里千万要注意,因为diff计算出来的是后一日减去前一日的差值,因此返回的数组中,元素个数会比收盘价少一个。在选择除数的时候,我们也要注意,不能将收盘价的最后一个元素作为除数。

我们也可以利用之前学过的map函数计算收益率大于0 的天数。

我们同样可以计算这只股票收益率的标准差,看看投资风险的大小。

(2)计算对数收益率

因为对数收益率是相邻价格对数的差值。

我们发现对数收益率大于0 的天数和简单收益率大于0的天数一致。

(3)波动率

在投资学中,波动率是对价格变动的一种度量,就是历史波动率(比如年波动率或者月波动率)需要用到对数收益率。年波动率等于对数收益率的标准差除以其均值,再除以交易日倒数的平方根,我们来计算一下,最近一年的年波动率,通常交易日取252天。

7、日期分析

如果对于这只股票我们想知道,在这一周的交易日里,哪一天的平均收盘价最 高,哪一天的最低,应该怎么办?我们来分析一下:

首先要思考一个问题,就是我们的数据中的日期,如果单看日期我不知道这一天是星期几,不利于分析。如果有一种方法,能把这种日期转换成我们所熟悉的用数字代替,比如0(星期一)、1(星期二)等等就好了,其实是有的。

这时候我们就要定义一个转换函数:

这个函数是怎么作用的呢?

首先它会将我们传入的比如“2018-01-14”转换成numpy可以识别的datetime对象,然后将datetime对象,调用weekday方法,就可以转换成0-6之间的整数了。

那是不是说在读取数据的时候就可以把这个函数作为loadtxt的参数塞进去呢?

这是不可以的,这里要运用一个桥梁,这个桥梁就是loadtxt中的参数converters参数,converters参数后跟一个字典,键就是日期对应的列的索引值,值就是我们刚才定义的datesnum函数。下面就可以读取数据了,我们需要获得日期和收盘价:

我们可以看到dates转换成了整数,并且没有5和6,因为星期六和星期日不是交易日。

我们的目的就是查看,就是要查看一周5个交易日的平均收盘价,所以我们要创建一个含有5个元素的数组,并且把初始值设置为0。我们用这个数组来存储每个工作日的平均收盘价。

接下来要做的工作就是找出每个工作日的收盘价了,比如对应于星期一的全部收盘价。

我们知道close和dates是一一对应的,如果我知道dates中某个元素的索引值,我就可以找到与这个元素相对应的close值,因为两者的索引肯定一样。

先介绍两个函数,where函数会根据指定的条件返回所有满足条件元素的索引值,比如我要找dates为1,也就是星期2的全部索引值,就可以使用where函数,take函数可以根据这些索引值从另外一个数组中抽取与相对应的值。

所以我们要写一个for循环,然后遍历0到4,用where函数获取相应的索引值,用take函数获取相应的收盘价:

我们还可以计算那个工作日的平均收盘价最高,那个工作日最低。

argmax和argmin两个函数分别表示返回数组中最大值的索引值和最小值的索引值。我们可以看到这一周5个交易日,星期二的平均收盘价较高,星期五的平均收盘价最低。

其实我们计算这些数据暂时纯属娱乐,或者熟悉一下NumPy中常用的函数,或许可能会发现一些有用的东西,但是随着学习慢慢的深入,肯会发觉一些真正有用的东西或者知识。

​8. 真实波动幅度均值(ATR)

这个指标是用来衡量股价波动性的技术指标。在《海龟交易法则》这本书中提到用这个指标进行仓位管理。今天就来科普一下这个指标到底是什么~~

(这些资料也是我自己从书中和网上看到的,并非自己原创)

(1)什么是ATR

ATR不属于趋势或者震荡类的指标,它是表示市场的波动幅度,它也可以对目前货币的动能有所提示,用来衡量货币波动幅度,在海龟交易中广泛使用。

(2)指标特点

市场是在波动中发展的,但是每个时期的波幅都不会保持一致,当一波趋势确立,市场上投资者的情绪反应也会变得强烈起来,波动幅度也会增加,而当市场方面不明确,或者市场处于明显的观望和等待情绪的时候,又或者在盘整时期,价格的波动幅度会变得较小,而ATR指标则是能够直接反映出这样的波幅变化。

(3) ATR的计算方式

相对于均线来说,ATR的计算稍显复杂,需要用三个步骤来计算,具体如下:

1, 当前K线的最高价与最低价之间的幅度(h-l)

2, 当日最高价与前一日收盘价之差。(h-preclose)

3, 前一根K线的收盘价与当前K线最低价之间的幅度(preclose-l)

三个幅度之中的最大值为真实波动幅度,通过计算一段时间的真实波动幅度,就可以用取平均值的方法获得平均真实波动幅度,即ATR。

(4) Python计算ATR

那使用多少天来计算呢? 根据使用者的习惯不同,10天、20天乃至65天都有,常用的使用最近20天的数据来计算。一般的行情软件都内置有ATR指标,设置好日期段就可以得到数值。

现在使用Python计算一下平安银行最近20天(数据只到18年1月10日)的ATR。

首先要导入numpy包

读取最高价、收盘价和最低价数据

读取最高价、收盘价和最低价数据

取最近20天的数据,注意取收盘价数据时,用到的是前一天的收盘价,因此我们要把数据往前调整一天。

根据前面ATR的计算公式,求出h-l,h-preclose, preclose-l,并个序列中的各个元素的最大值。什么意思呢?三个序列,先比较第一个元素,谁最大取谁,然后在比较第二个元素,依次类推。这一步要使用Python的maximum函数。

他和max的区别就是,max仅能取一个数组中的最大值。

求出真实波动幅度的均值

可看到平安银行最近20天的ATR为0.4139。

(5)如何使用指标

根据书中和网上的资料大概有以下几种用法:

一是计算首笔仓位规模

比如你想在1月10日看到平安银行的收盘价为13.04元,认为若能够向上突破13.5就是一个很好的买入点,假如手上有10万资金,那么你应该在股价突破13.5元时买入多少手呢?

在《海龟交易法则》中建议第一笔仓位应该是一个ATR的波动与总资金的1%的波动相对应,什么意思呢?

现在你手中有10万元钱,1%的波动就是1000元,截止到2018年1月10日,平安银行的20日ATR为0.414,应该买多少股呢?1000/0.414=2415.45,取整数就是2400股,也就是说你应该在股价突破13.5的时候立刻买入2400股,花费32400元。此时在你入市的同时,你应该为这个仓位设置好止损,书中介绍很多海龟采用2ATR作为止损点,什么意思呢?就是说当前的ATR为0.414,当股价突破13.5元建完仓后,如果股价跌破13.5-2*0.414=12.672元时就该平仓止损了。止损时如果不计算交易成本的话,亏损1987.2元,占仓位资金的6.13%,占总资金的2%左右,这就意味着,若你看错市场走势,那么连错5次,总损失也不过10%。

二是加仓并提高止损

如果在股价涨到13.5元买入后继续加仓的话,那么同样利用ATR进行加仓,《海龟交易法则》中建议每上涨0.5ATR就加仓一次,也就是说在股价突破13.707元、13.914元、14.121元时在分别买入2400股,直到用完10万元为止。与此同时每个新加的仓位都应该设置相应的新价位之下2ATR的地方。整个仓位管理的最精华处,就是移动止损的设置。

如果有条件可以读一下《仓位管理:让你活得更久》和《海龟交易法则》中关于如何使用ATR进行资金的管理相关内容。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值