定义:通常特指有价证券(股票、债券)发行和流通的场所
注:股票、债券是用来资本流通的金融产品,狭义的金融市场包括资本市场和货币市场。
拓展:
1、货币市场是指以期限为1年及1年以下的金融资产为交易标的物的短期金融市场。
主要包括:
同业拆借、回购协议,票据市场、大额可转让定期存单市场和短期政府债券市场等。
2、资本市场是指期限为1年以上的金融资产交易的市场。
资本市场两大部分:
- 银行中长期存贷款市场
- 有价证券市场(通过证券的发行与交易进行融资的市场)
主要包括:债券市场、股票市场、基金市场、保险市场、融资租赁市场、金融衍生工具市场等。
有价证券:是指代表资产所有权或债权的法律证书,有价证券的持有者承担相应的权利和义务。
- 是虚拟资本的一种形式,它本身没价值,但有价格。
这个“级”指的是一个企业股份的发行次序和发行时间。
我们通过一张图来理解一下:
关于投资的几个类别,一般我们将天使、VC、PE三个部分统称为私募(Private Equity),指的是没有在证券交易所公开上市交易的资产。
1、公司规模
天使投资(Angel Investment)主要投资早期创业公司;
VC(Venture Capital)投资中期高速发展型创业公司;
PE(Private Equity)介入即将上市或被兼并收购的成熟企业。
2、资金规模
天使投资:500万以下
VC投资:千万
PE:千万级别以上
股票 | 债券 | |
---|---|---|
优点 | 投资收益高 | 安全性高,收益稳定:国债及有担保 的公司债、企业 债几乎没有什么风险 |
缺点 | 风险高 | 收益率低 |
特点 | 1、股票则只能是股份制企业才可以发行 2、股票不定股息率,股息收入随股份公司的盈利情况而定 |
1、 国家、地方公共团体还是企业,都可以发行债券 2、 利率已定,到期就可以获得固定利息 |
注:政府、公司等发行股票、债券目的为了进行融资、发展等
股票,是股份公司签发的证明股东所持股份的凭证,代表了股东对股份公司净资产的所有权。
拓展:
普通股
普通股是指在公司的经营管理和盈利及财产的分配上享有普通权利的股份,代表满足所有债权偿付要求及优先股东的收益权与求偿权要求后对企业盈利和剩余财产的索取权。普通股构成公司资本的基础,是股票的一种基本形式。现上海和深圳证券交易所上进行交易的股票都是普通股。
普通股股东
(1)公司决策参与权。普通股股东有权参与股东大会,并有建议权、表决权和选举权,也可以委托他人代表其行使其股东权利。
(2)利润分配权。普通股股东有权从公司利润分配中得到股息。普通股的股息是不固定的,由公司赢利状况及其分配政策决定。普通股股东必须在优先股股东取得固定股息之后才有权享受股息分配权。
(3)优先认股权。如果公司需要扩张而增发普通股股票时,现有普通股股东有权按其持股比例,以低于市价的某一特定价格优先购买一定数量的新发行股票,从而保持其对企业所有权的原有比例。
(4)剩余资产分配权。当公司破产或清算时,若公司的资产在偿还欠债后还有剩余,其剩余部分按先优先股股东、后普通股股东的顺序进行分配。
优先股
优先股相对于普通股。优先股在利润分红及剩余财产分配的权利方面优先于普通股。
(1)优先分配权。在公司分配利润时,拥有优先股票的股东比持有普通股票的股东,分配在先,但是享受固定金额的股利,即优先股的股利是相对固定的。
(2)优先求偿权。若公司清算,分配剩余财产时,优先股在普通股之前分配。注:当公司决定连续几年不分配股利时,优先股股东可以进入股东大会来表达他们的意见,保护他们自己的权利。
拓展:
1 A股的正式名称是人民币普通股票。它是由我国境内的公司发行,供境内机构、组织或个人(不含台、港、澳投资者)以人民币认购和交易的普通股股票。
2 B股的正式名称是人民币特种股票,它是以人民币标明面值,以外币认购和买卖,在境内(上海、深圳)证券交易所上市交易的。
它的投资人限于:外国的自然人、法人和其他组织,香港、澳门、台湾地区的自然人、法人和其他组织,定居在国外的中国公民。中国证监会规定的其他投资人。现阶段B股的投资人,主要是上述几类中的机构投资者。B股公司的注册地和上市地都在境内。只不过投资者在境外或在中国香港,澳门及台湾。
3 H股,即注册地在内地、上市地在香港的外资股。香港的英文是HongKong,取其字首,在港上市外资股就叫做H股。依此类推,纽约的第一个英文字母是N,新加坡的第一个英文字母是S纽约和新加坡上市的股票就分别叫做N股和S股。
拓展:
在进行股票投资的时候,我们会使用价值投资方式。选择公司前景好、业绩好的一些公司
知道了股票的基本分类,接下来我们去看看股票具体的一些机制。
拓展:T+1制度
自1995年1月1日起,为了保证股票市场的稳定,防止过度投机,股市实行“T+1”交易制度,当日买进的股票,要到下一个交易日才能卖出。同时,对资金仍然实行“T+0”,即当日回笼的资金马上可以使用。
T+1是一种股票交易制度,即当日买进的股票,要到下一个交易日才能卖出。
“T+1"中"T"指的是交易登记日,"T+1"指的是交易登记日的第二天。
我们可以看到这样的符号:
股票代码用数字表示股票的不同含义。股票代码除了区分各种股票,也有其潜在的意义,比如600*是上交所上市的股票代码,6006是最早上市的股票,一个公司的股票代码跟车牌号差不多,能够显示出这个公司的实力以及知名度
注:
1、沪市A股票买卖的代码是以600、601或603打头(在上海证券交易所上市的全是主板)
2、深市A股票买卖的代码是以000打头,其中中小板代码以002打头,创业板股票代码以300打头
上面注中提到了主板,中小板,创业板,新三板,又是什么鬼? 看下面这张图:
主板:主要针对大型蓝筹企业挂牌上市,分为上海证券交易所主板(股票代码以60开头)和深圳证券交易所主板(股票代码以000开头)。
中小板:主要针对中型稳定发展,但是未达到主板挂牌要求的企业,属于深圳交易所的一个板块(股票代码以002开头)。
创业板:主要针对科技成长型中小企业,属于深圳交易所的一个板块(股票代码300开头)。
新三板:是沪深交易所之后的第三家全国性证券交易场所,全称为全国中小企业股份转让系统,交易所位于北京(股票代码以8开头)。
股票价格(Stock Price)又叫股票行市,是指股票在证券市场上买卖的价格。股票在流通市场上的价格,才是完全意义上的股票的市场价格。
注:股票初始发行价格=市盈率还原值×40%+股息还原率×20%+每股净值×20%+预计当年股息与一年期存款利率还原值×20%,影响股票价格的因素有很多,如企业因素、盈利情况、净资产、市场、行业等。
成交原则:价格优先,时间优先
(一)集合竞价阶段:9:15 — 9:25
由投资者按照自己所能接受的心理价格自由地进行买卖申报,电脑交易系统对全部有效委托进行一次集中撮合处理的过程称为集合竞价。
集合竞价中未能成交的委托自动进入连续竞价。
1、9:15 — 9:19可以申报和撤单;9:20 — 9:25 可以申报,不可以撤单。
2、深圳交易所14:57 — 15:00实行集合竞价,可以申报,不可以撤单。
卖3 12 10手
卖2 10 10手
卖1 9 20手
买1 10 10手
买2 9 20手
买3 8 15手
买 卖 总成交量
如果以8元成交:(10手+20手+15手)+(0手) = 45手
如果以9元成交:(10手+20手)+(20手) = 50手
如果以10元成交:(10手)+(20手+10手) = 40手
如果以12元成交:(0手)+(20手+10手+10手) = 40手
(二)连续竞价阶段
1、上海交易所:9:30 — 11:30;13:00 — 15:00
2、深圳交易所:9:30 — 11:30;13:00 — 14:56:59
连续竞价交易与集中竞价交易有什么不同:
“连续竞价交易”是指在交易时间内,可连续进行买卖报价的交易,例如股票交易或外汇交易;
“集合竞价交易”是指在交易时间开始之前或结束之前的某一时段,进行市场所有报价的一次性成交。例如深圳股市在每天下午3点钟结束前三分钟内暂停连续报价交易,只接受买卖报价,而在3点钟时一次性撮合成交。
1、印花税:1‰(卖的时候才收取,此为国家税收,全国统一)。
2、过户费:深圳交易所无此项费用,上海交易所收费标准(按成交金额的0.02‰人民币)。
3、交易佣金:最高收费为3‰,最低收费5元。各家劵商收费不一,开户前可咨询清楚。
例子:
假设你买入10000股,每股票价格为10元,以此为例,对其买入成本计算:
买入股票所用金额:10元/股×10000股=100000元;
过户费:0.02‰×100000=2元(沪市股票计算,深市为0);
交易佣金:100000×3‰=300元(按最高标准计算,正常情况下都小于这个值);
买入总成本:100000元+300元+2元=100302元(买入10000股,每股10元,所需总资金)
多少每股卖出才不赔钱?
可按如下公式计算:(买入总成本+卖出过户费)÷(1-印花税率-交易佣金率)÷股票数量=(100310元+10元)÷(1-0.001-0.003)÷10000=10.07228916元
=10.07元(四舍五入)。
若以10.08每股卖出价格计算:
股票金额:10.08元/股×10000股=100800元;
印花税:100800元×1‰=100.8元;
过户费:0.002%×100800元≈2元;
交易佣金:100800元×3‰=302.4元;
卖出后收入:100800元-100.8元-2元-302.4元=100394.8元;
最终实际盈利为:卖出后收入-买入总成本=100394.8-100302=92.8元;
问题:即使在国内对于A股来说,目前总共有3000多只股票。并且数字可能随着时间会不断改变,如何更好的管理这些上市公司?实现怎样的制度去区分公司的规模大小?
在选择购买股票的时候,有时候会根据划分依据去选择特定指数、行业、板块下的股票!!!
拓展:
概念股是与业绩股相对而言的。业绩股需要有良好的业绩支撑。概念股则是依靠某一种题材比如资产重组概念,三通概念等支撑价格。
行业:
指数:
下载软件,学会看基本的行情信息以及使用模拟交易程序。
回到刚才说的行情数据,最常用的是交易数据
股票在流通市场上的价格,才是完全意义上的股票的市场价格,一般称为股票市价或股票行市。股票市价表现为开盘价、收盘价、最高价、最低价等形式。其中收盘价最重要,是分析股市行情时采用的基本数据。
K线图这种图表源处于日本德川幕府时代,被当时日本米市的商人用来记录米市的行情与价格波动,后因其细腻独到的标画方式而被引入到股市及期货市场。
K线的计算周期可将其分为日K线,周K线,月K线,年K线
很多网站提供了日线、周K线、月K线等周期数据,但是最原始的只有日K线的数据。有时我们需要自己去生成计算不同频率的数据。
效果图:
K线图绘制需要使用mpl_finance框架
mpl_finance是python中可以用来画出蜡烛图、线图的分析工具,目前已经从matplotlib中独立出来。
需要指定地址安装:
pip install https://github.com/matplotlib/mpl_finance/archive/master.zip
如何绘制K线图?
导入模块:
from mpl_finance import candlestick_ochl
绘制K线图API:
>>> help(candlestick_ochl)
Help on function candlestick_ochl in module mpl_finance:
candlestick_ochl(ax, quotes, width=0.2, colorup='k', colordown='r', alpha=1.0)
Plot the time, open, close, high, low as a vertical line ranging
from low to high. Use a rectangular bar to represent the
open-close span. If close >= open, use colorup to color the bar,
otherwise use colordown
Parameters
----------
ax : `Axes`
an Axes instance to plot to
quotes : sequence of (time, open, close, high, low, ...) sequences
As long as the first 5 elements are these values,
the record can be as long as you want (e.g., it may store volume).
time must be in float days format - see date2num
width : float
fraction of a day for the rectangle width
colorup : color
the color of the rectangle where close >= open
colordown : color
the color of the rectangle where close < open
alpha : float
the rectangle alpha level
Returns
-------
ret : tuple
returns (lines, patches) where lines is a list of lines
added and patches is a list of the rectangle patches added
流程分析:
准备ax
准备quotes
sequence of (time, open, close, high, low, ...)
其中time must be in float days format - see date2num
处理time字段
调用candlestick_ochl()
显示日期
显示图像
代码实现:
import pandas as pd
from mpl_finance import candlestick_ochl
import matplotlib.pyplot as plt
from matplotlib.pylab import date2num
# 数据读取
stock_day = pd.read_csv("./stock_day/stock_day.csv")
# 按时间顺序排列数据
stock_day = stock_day.sort_index()
# 准备ax
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(13, 8), dpi=100)
# 准备quotes
# 处理time字段
# 将时间索引类型转换成Pandas默认的类型
stock_day.index = pd.to_datetime(stock_day.index)
# 将时间转换成日K线绘制要求的浮点型
stock_day['time'] = date2num(stock_day.index)
# 索引sequence
day_k = stock_day[['time', 'open', 'close', 'high', 'low']]
# 绘制k线图
candlestick_ochl(axes, day_k.values[:30], width=0.4, colorup='r', colordown='g')
# x刻度设置为日期
axes.xaxis_date()
# 添加网格
plt.grid(linestyle="--", alpha=0.5)
# 显示图像
plt.show()
那么日线、周线、月线等怎么切换标准??
注:周K线是指以周一的开盘价,周五的收盘价,全周最高价和全周最低价来画的K线图
大部分周线的指标是这个日线指标在这一周最后一个交易日的值。比如周线的’close’应该等于这一周最后一天日线数据的‘close’,但是有的指标是例外,比如周线的’high’应该等于这一周所有日线‘high’中的最大值
如何获取每周一的开盘价,每周五的收盘价,每周最高价以及每周最低价呢?
参数 | 作用 |
---|---|
rule | 表示重采样频率,例如周’W’,月’M’,季度’Q’,5分钟’5min’,12天’12D’ |
how | 用于产生聚合值的函数名或数组函数,例如‘mean’、‘ohlc’、np.max等,默认是‘mean’,其他常用的值由:‘first’、‘last’、‘median’、‘max’、‘min’ |
axis=0 | 默认是纵轴,横轴设置axis=1 |
closed = ‘right’ | 在降采样时,各时间段的哪一段是闭合的,‘right’或‘left’,默认‘right’ |
fill_method = None | 升采样时如何插值,比如‘ffill’、‘bfill’等 |
kind = None | 聚合到时期(‘period’)或时间戳(‘timestamp’),默认聚合到时间序列的索引类型 |
# 进行频率转换日K---周K,首先让所有指标都为最后一天的价格
period_week_data = stock_day.resample('W').last()
# 分别对于开盘、最高价、最低价进行处理
# 获取每周一的开盘价
period_week_data['open'] = stock_day['open'].resample('W').first()
# 获取每周最高价和最低价
period_week_data['high'] = stock_day['high'].resample('W').max()
# 最低价
period_week_data['low'] = stock_day['low'].resample('W').min()
period_week_data.dropna(inplace=True)
# 准备ax
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10, 8), dpi=100)
# 准备quotes
# 处理time字段
# 索引sequence
week_k = period_week_data[['time', 'open', 'close', 'high', 'low']]
# 绘制k线图
candlestick_ochl(axes, week_k.values[:20], width=0.8, colorup='r', colordown='g')
# x刻度设置为日期
axes.xaxis_date()
# 添加网格
plt.grid(linestyle="--", alpha=0.5)
# 显示图像
plt.show()
上市公司会时不时的发生现金分红、送股等一系列股本变动,这会造成股价的非正常变化,导致我们不能直接通过股价来计算股票的涨跌幅。这种数据我们也称之为除权数据。
所以我们要对这种数据做处理,也称之为复权数据。怎么进行复权呢?
简单的一种方式:
原始数据:
1号:100 2号:50 3号:53 4号:51
复权后:
100 / 50 = 2 比例
1号:100 2号:100 3号:106 4号:102
主要用于基本面分析,主要侧重于从股票的基本面因素,如企业经营能力,财务状况,行业背景等对公司进行研究与分析,试图从公司角度找出股票的“内在价值”,从而与股票市场价值进行比较,挑选出最具投资价值的股票。
量化主量化主要就属于这样的一个分析方式
前面其实我们已经使用一些时间序列接口,回忆我们在股票涨跌幅使用的生成一个时间列表,接下来我们就去看看Pandas当中的时间类型相关的处理。
时间序列是一组按照时间发生先后顺序进行排列的数据点序列。通常一组时间序列的时间间隔为一恒定值(如1秒,5分钟,12小时,7天,1年),因此时间序列可以作为离散时间数据进行分析处理。
例如:某监控系统的折线图表,显示了请求次数和响应时间随时间的变化趋势
# pd将时间数据转换成pandas时间类型
# 方法1
>>> pd.to_datetime("2018-07-06")
Timestamp('2018-07-06 00:00:00')
# 方法2
>>> pd.to_datetime("07/06/2018")
Timestamp('2018-07-06 00:00:00')
# 方法3
>>> pd.to_datetime("20180706")
Timestamp('2018-07-06 00:00:00')
如果我们传入的是多个时间点,那么会是什么样的?
三种创建时间序列对象DatetimeIndex的方法
time.year
time.month
time.weekday
# 准备一个时间列表
date1 = ["2017-01-01", "2017-02-01", "2017-03-01"]
# 方法1:直接传入时间列表
>>> pd.to_datetime(date1)
DatetimeIndex(['2017-01-01', '2017-02-01', '2017-03-01'], dtype='datetime64[ns]', freq=None)
from datetime import datetime
# 方法2:传入原生python的日期类型
date2 = [datetime(2018, 3, 1), datetime(2018, 3, 2), datetime(2018, 3, 3), datetime(2018, 3, 4), datetime(2018, 3, 5)]
>>> pd.to_datetime(date2)
DatetimeIndex(['2018-03-01', '2018-03-02', '2018-03-03', '2018-03-04',
'2018-03-05'],
dtype='datetime64[ns]', freq=None)
# 注意时间空值的表示方法
# 空值
import numpy as np
date3 = [np.nan, datetime(2018, 3, 2), datetime(2018, 3, 3), datetime(2018, 3, 4), datetime(2018, 3, 5)]
>>> pd.to_datetime(date3)
DatetimeIndex(['NaT', '2018-03-02', '2018-03-03', '2018-03-04', '2018-03-05'], dtype='datetime64[ns]', freq=None)
我们也可以通过DatetimeIndex来转换
# 方法3:直接用DatetimeIndex
>>> date0 = pd.DatetimeIndex(date1)
DatetimeIndex(['2017-01-01', '2017-02-01', '2017-03-01'], dtype='datetime64[ns]', freq=None)
# DatetimeIndex常用属性
>>> date0.values
array(['2017-01-01T00:00:00.000000000', '2017-02-01T00:00:00.000000000',
'2017-03-01T00:00:00.000000000'], dtype='datetime64[ns]')
>>> date0.minute
Int64Index([0, 0, 0], dtype='int64')
参数 | 含义 |
---|---|
D | 每日 |
B | 每工作日 |
H、T或者min、S | 时、分、秒 |
M | 每月最后一天 |
BM | 每月最后一个工作日 |
WOM-1MON, WOM-3FRI | 每月第几周的星期几 |
# 生成指定的时间序列
# 1、生成2017-01-02~2017-12-30,生成频率为1天, 不跳过周六周日
pd.date_range("2017-01-02", "2017-12-30", freq="D")
# 2、生成2017-01-02~2017-12-30,生成频率为1天, 跳过周六周日, 能够用在金融的数据,日线的数据
pd.date_range("2017-01-02", "2017-12-30", freq="B")
# 3、只知道开始时间日期,我也知道总共天数多少,生成序列, 从"2016-01-01", 共504天,跳过周末
pd.date_range("2016-01-01", periods=504, freq="B")
# 4、生成按照小时排列的时间序列数据
pd.date_range("2017-01-02", "2017-12-30", freq='H')
# 5、按照3H去进行生成
pd.date_range("2017-01-02", "2017-12-30", freq='3H')
# 6、按照1H30分钟去进行生成时间序列
pd.date_range("2017-01-02", "2017-12-30", freq='1H30min')
# 7、按照每月最后一天
pd.date_range("2017-01-02", "2017-12-30", freq='BM')
# 8、按照每个月的第几个星期几
pd.date_range("2017-01-02", "2017-12-30", freq='WOM-3FRI')
对于时间序列类型,有特有的分析方法。同样股票本身也是一种时间序列类型,我们就以股票的数据来进行时间序列的分析
时间序列分析( time series analysis)方法,强调的是通过对一个区域进行一定时间段内的连续观察计算,提取相关特征,并分析其变化过程。
时间序列分析主要有确定性变化分析
主要用在时间序列的数组变换, 不同作用的函数将它们统称为移动窗口函数
那么会有各种观察窗口的方法,其中最常用的就是移动平均法
注:不同的移动平均线方法不一样
1)简单移动平均线
简单移动平均线(SMA),又称“算数移动平均线”,是指特定期间的收盘价进行平均化。
比如说,5日的均线SMA=(C1+ C2 + C3 + C4 + C5) / 5
例子:
拿到股票数据,画出K线图
# 拿到股票K线数据
stock_day = pd.read_csv("./stock_day/stock_day.csv")
stock_day = stock_day.sort_index()
stock_day.index = pd.to_datetime(stock_day.index)
stock_day['date'] = date2num(stock_day.index)
arr = stock_day[['date', 'open', 'close', 'high', 'low']]
values = arr.values[:200]
# 画出K线图
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(20, 8), dpi=80)
candlestick_ochl(axes, values, width=0.2, colorup='r', colordown='g')
axes.xaxis_date()
plt.show()
2)计算移动平均线
pandas.rolling_mean(arg, window, min_periods=None, freq=None, center=False, how=None, **kwargs) Moving mean.
Parameters:
# 直接对每天的收盘价进行求平均值, 简单移动平局线(SMA)
# 分别加上短期、中期、长期局均线
pd.rolling_mean(stock_day["close"][:200], window=5).plot()
pd.rolling_mean(stock_day["close"][:200], window=10).plot()
pd.rolling_mean(stock_day["close"][:200], window=20).plot()
pd.rolling_mean(stock_day["close"][:200], window=30).plot()
pd.rolling_mean(stock_day["close"][:200], window=60).plot()
pd.rolling_mean(stock_day["close"][:200], window=120).plot()
3)加权移动平均线 (WMA)
加权移动平均线 (WMA)将过去某特定时间内的价格取其平均值,它的比重以平均线的长度设定,愈近期的收市价,对市况影响愈重要。
正因加权移动平均线强调将愈近期的价格比重提升,故此当市况倒退时,加权移动平均线比起其它平均线更容易预测价格波动。但是我们还是不会轻易使用加权,应为他的比重过大!!!!
4)指数平滑移动平均线(EWMA)
是因应移动平均线被视为落后指标的缺失而发展出来的,为解决一旦价格已脱离均线差值扩大,而平均线未能立即反应,EWMA可以减少类似缺点。
指数移动平均(英语:exponential moving average,EMA或EWMA)是以指数式递减加权的移动平均。各数值的加权影响力随时间而指数式递减,越近期的数据加权影响力越重,但较旧的数据也给予一定的加权值。
# 画出指数平滑移动平均线
pd.ewma(stock_day['close'][:200], span=10).plot()
pd.ewma(stock_day['close'][:200], span=30).plot()
pd.ewma(stock_day['close'][:200], span=60).plot()
# 求出指定窗口大小的收盘价标准差和方差
pd.rolling_var(stock_day['close'][:200], window=10).plot()
pd.rolling_std(stock_day['close'][:200], window=10).plot()
frame = stock_day[['open','volume', 'ma20', 'p_change', 'turnover']]
pd.scatter_matrix(frame, figsize=(20, 8))
从中我们可以简单看到成交量(volume)和换手率(turnover)有非常明显的线性关系,因为换手率的定义就是:成交量除以发行总股数。
通过一些图或者相关性分析可以找到强相关的一些指标,在机器学习、量化中会详细介绍
相关系数:后面会介绍,目前我们只需知道他是反应两个序列之间的关系即可
ma_list = [5, 20 ,60]
for ma in ma_list:
stock_day['MA' + str(ma)] = pd.rolling_mean(stock_day.close, window=ma)
for ma in ma_list:
stock_day['EMA' + str(ma)] = pd.ewma(stock_day.close, span=ma)
data.to_csv("EWMA.csv")
移动平均线经常会作为技术分析的基础理论,从中衍生出各种技术指标策略。后面将会介绍简单的基于均线的策略。