目录
- 简介
- 金融相关
- 股票
1.简介
(1)量化金融分类
- 金融量化策略建模
三大模块:选股/择时/风控
分析方法:定性(调研)+定量(成本低/但有数据得不到)
- 金融产品建模(期权/债券/股票/贷款/信用欺诈)
(2)金融数据分析流程
- 数据采集
A股:上交所(公司报告-年报-财务报告)/深交所/Tushare/万矿
美股:USSEC/Nasdaq/google/yahoo/quandl/SimFin
其他API: AlphaVantage
爬虫
- 数据预处理
- 数据可视化
- 数据分析
- 决策
量化平台:优矿/RiceQuant/万矿
(3)复盘思路
问题->建模->看是否数据遗漏有无影响->复盘->找专家,找出问题是什么->建模->提升
2.金融相关
(1)金融理论
- 现代组合理论MPT
- 马科维茨有效前沿图形
无风险+有风险效用最大化
风险+风险效用最大化
风险+风险最小风险
无风险+双风险最优组合
(2)三大报表
- 损益表Profit&Loss Statement
一段时期内收到多少钱
- 资产负债表Balance Sheet
资产=负债+所有者权益
- 现金流量表Cash Flow Statement
一段时期内现金流
(3)标准报表 vs 精细化报表
标准化报表(会损失数据)
精细化原始报表(SEC或SinFinFuse)
3.股票
# 所有依赖包
!pip install tushare
import tushare as ts
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import pickle
# 行列显示设置
%matplotlib inline
plt.style.use('ggplot')
pd.set_option('display.max_columns',999)
pd.set_option('display.width',999)
# 设置选的股票总个数
selected_stocks_num = 10
(1)一只股票
获取数据: close价,成交量
好 = 价格高,成交量高
不好(买的人少,大部分人不认可高价,卖不出去) = 价格高,成交量低
分析: 七日移动平均
# 七日移动平均
df['ma7'] = df['close'].rolling(window=7).mean()
显示: 趋势图(close/七日移动平均),条形图(成交量),灯烛图(成交量)
# 趋势图
df['close'].plot()
df['ma7'].plot()
# 条形图
plt.bar(df.index,df['volume'])
# 灯烛图
from mpl_finance import candlestick_ohlc
candlestick_ohlc(axis,values,width,colordown,colorup,alpha)
存储/读取: csv
# 存储
df.to_csv('xx.csv')
# 读取
df = pd.read_csv('xx.csv',parse_dates=True,inde_col=0)
(2)多只股票(综合指数成分股信息)
几种方式:
中证指数看 成份列表/权重列表
爬虫获取沪深300
看基金经理买的股票分析出策略
获取数据: 沪深300股票合并大表(第一列日期,其他各列为股票close价格)
# get hs 300 list
def get_300_list():
hs300_df = ts.get_hs300s()
hs300_list = hs300_df['code'].tolist()
# print(hs300_list[:selected_stocks_num])
return hs300_list
# get all stocks data
def get_300_hisdata_close(hs300_list):
df_300 = pd.DataFrame()
for i in hs300_list[:selected_stocks_num]:
print(i)
df_temp = ts.get_hist_data(i)
df_temp.rename(columns={'close':i},inplace=True)
df_temp.drop(columns=['open', 'high', 'low', 'volume', 'price_change', 'p_change','ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20'],inplace=True)
if df_300.empty:
df_300 = df_temp
else:
df_300 = df_300.join(df_temp,how='outer')
# save 300 stock data to csv
# df_300.to_pickle('df_300.pkl')
df_300.to_csv("df_300.csv")
return df_300
# Method1: get newest list and history data
# df_300 = get_300_hisdata_close(get_300_list())
# Method2: read last time data from file
df_300 = pd.read_csv("df_300.csv",parse_dates=True,index_col=0)
分析: 分散投资(找Pearson相关性小的股票)
Pearson Correlation Coefficient:
0<r<1 x和y正相关关系, -1<r<0 和y负相关关系
r=1 x和y完全正相关, r=-1 x和y完全负相关, r=0 x和y不相关
0.8-1.0 极强相关, 0.6-0.8 强相关,
0.4-0.6 中等程度相关, 0.2-0.4 弱相关,
0.0-0.2 极弱相关或无相关
显示:热力图
利用热力图颜色代表股票之间的相关性
# plot trend
df_300.plot()
# plot heatmap
df_300_corr = df_300.corr()
# print(df_300_corr)
f, ax1 = plt.subplots(figsize = (6,4))
cmap = sns.cubehelix_palette(start = 1.5, rot = 3, gamma=0.8, as_cmap = True)
sns.heatmap(df_300_corr, linewidths = 0.05, ax = ax1, vmax=1, vmin=-1, cmap=cmap)
选出的前十个股票相关性热力图图示