习题3
股票数据基础指标的定义:
开盘价:又称开市价,是指某种证券在证券交易所每个交易日开市后的第一笔每股买卖成交价格。世界上大多数证券交易所都采用成交额最大原则来确定开盘价。如果开市后一段时间内(通常为半小时)某种证券没有买卖或没有成交,则取前一日的收盘价作为当日证券的开盘价。如果某证券连续数日未成交,则由证券交易所的场内中介经纪人根据客户对该证券买卖委托的价格走势提出指导价,促使成交后作为该证券的开盘价。在无形化交易市场中,如果某种证券连续数日未成交,以前一日的收盘价作为它的开盘价。
最高价:指某种证券在每个交易日从开市到收市的交易过程中所产生的最高价格。如果当日该种证券成交价格没有发生变化,最高价就是即时价;若当日该种证券停牌,则最高价就是前收市价。最高价有时是一笔但有时会有几笔.
收盘价:沪市收盘价为当日该证券最后一笔交易前一分钟所有交易的成交量加权平均价(含最后一笔交易)。当日无成交的,以前收盘价为当日收盘价。深市的收盘价通过集合竞价的方式产生。收盘集合竞价不能产生收盘价的,以当日该证券最后一笔交易前一分钟所有交易的成交量加权平均价(含最后一笔交易)为收盘价。当日无成交的,以前收盘价为当日收盘价。
最低价:最低价:指在汇市、股市、期货市场、或其他金融衍生市场,某一金融产品在指定时间区间内的最低成交价格,如:人民币汇率最低价、某股票历史最低价、黄金期货当日最低价。如果在该指定时间区间内该种金融产品的价格未发生变化,则最低价等于该时间区间内任意时间点的价格;若在该指定时间区间内该种金融产品停牌或未发生交易,则最低价等于前一交易日收盘价。
成交量:成交量是一种供需的表现,指一个时间单位内对某项交易成交的数量。当供不应求时,人潮汹涌,都要买进,成交量自然放大;反之,供过于求,市场冷清无人,买气稀少,成交量势必萎缩。而将人潮加以数值化,便是成交量。广义的成交量包括成交股数、成交金额、换手率;狭义的也是最常用的是仅指成交股数。成交量指当天成交的股票总手数(1手=100股)。VOL显示是1M在国际通行的说法是1K=1000、1M=100万、1B=10亿。103、106、10^9。需要注意的是,通常人们说的大盘成交量指的是成交金额。说明市场的活跃度和资金规模。成交量与成交金额用下列公式表示: 成交数量(成交量)*成交均价=成交金额(成交额)
价格变动(涨跌值):用“元”做单位表示价格变动量,涨跌=今日收盘价-昨日收盘价;
涨跌幅:涨跌幅是对涨跌值的描述,用%表示,涨跌幅=(今日收盘价-昨日收盘价)/昨日收盘价*100%。 当前交易日最新成交价(或收盘价)与前一交易日收盘价相比较所产生的数值,这个数值一般用百分比表示。在中国股市对涨跌停作出限制,因此有“涨跌停板”的说法。
5日均价:就是几天以来价格的平均价,比如5日均价,就是连续5天股票价格的平均数。
10日均价:就是连续10天股票价格的平均数。
20日均价:就是连续20天股票价格的平均数。
均量:是成交手数的数量上来量化资金流向,单位为“手”。5日均量(没查到权威的解释,查到的都是5日均线)指5天的成交量,10日均量指10天的成交量,20日均量指20天的成交量。
换手率:“换手率”也称“周转率”,指在一定时间内市场中股票转手买卖的频率,是反映股票流通性强弱的指标之一。以样本总体的性质不同有不同的指标类型,如交易所所有上市股票的总换手率、基于某单个股票发行数量的换手率、基于某机构持有组合的换手率。在技术分析的诸多工具中,换手率指标是反映市场交投活跃程度最重要的技术指标之一。计算公式:成交量/发行总股数×100%
日期:股票交易日期,一般为每周一至周五上午9.30-11.30,下午13.00-15.00,法定节假日除外。
量化分析
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
# parse_dates=[0]将第一列解析成日期格式,不然直接读入的是字符串。 然后做图就能按日期从小到达排列了。
# usecols=range(15)只读取前15列数据,去掉unnamed的列
stockdata = pd.read_table('stockData.txt', usecols=range(15), parse_dates=[0])
#stockdata
# 解决KeyError: 'open'的问题:Rename column ' open' to 'open'
stockdata.columns
stockdata.columns = ['date', 'open', 'high', 'close', 'low', 'volume', 'price_change', 'p_change', 'ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20','turnover']
# 画图
line1, = plt.plot(stockdata['date'],stockdata['open'],label='open',color='b')
line2, = plt.plot(stockdata['date'],stockdata['close'],label='close',color='k',linewidth=2.5)
line3, = plt.plot(stockdata['date'],stockdata['high'],label='high',color='r')
line4, = plt.plot(stockdata['date'],stockdata['low'],label='low',color='g')
plt.legend(handles=[line1, line2, line3, line4])
#添加标题,xlabel, ylabel
plt.xlabel('Dates')
plt.ylabel('Price')
plt.title('Stock price')
#解决日期叠加的问题:使用rotation旋转的方法,即做图时增加 plt.xticks(rotation=70)
plt.xticks(rotation=70)
分析:这四个价格的大体走势相似。开盘价多为前一日的收盘价。
分析:价格变动与涨跌幅的走势变化基本一致。
分析:总体价格呈现上升下降再上升的趋势。5日均价时间太短,最没有参考价值。而10日和20日均价变化稍平和些。预测短期内股票价格变化无法做到。但如果是长期成长的公司,总体价格会是上升趋势。
分析:成交量呈现上升下降再上升的趋势。
分析:价格变动会影响换手率。价格变动大,换手率也会高。
遇到问题总结
解决KeyError: 'open'的问题(用stockdata['open']报错,原因是数据里是' open'而不是'open'):
stockdata.columns = ['date', 'open', 'high', 'close', 'low', 'volume', 'price_change', 'p_change', 'ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20','turnover']读数据时用stockdata = pd.read_table('stockData.txt', usecols=range(15), parse_dates=[0]),参考同学们的答案。
解决日期叠加的问题:使用rotation旋转的方法plt.xticks(rotation=70),参考同学们的答案。
这个API的网站很有用:http://pandas.pydata.org/pandas-docs/stable/api.html