欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python金融量化分析第一步

程序员文章站 2022-03-04 09:26:32
随着股民的专业素养越来越强,我们也开始从侧重基本面分析转向了侧重基本面+技术面分析,那技术面分析的第一步就是要有大量的对应股票的数据~那老 amy 就提出问题,大家需要如何利用 Python 去获取数据呢?兄得们估计立马就会想到自己去撸一个爬虫~实际上,duck 不必,我们强大的 Python 的先锋们早就发现了这个问题,所以封装了很多关于财经数据的接口(当然其本质还是爬虫哈),比如:pandas_datareader、tushare、baostock 等等。那么今天,我们就迈出金融量化的第一步,跟着...

随着股民的专业素养越来越强,我们也开始从侧重基本面分析转向了侧重基本面+技术面分析,那技术面分析的第一步就是要有大量的对应股票的数据~

那老 amy 就提出问题,大家需要如何利用 Python 去获取数据呢?兄得们估计立马就会想到自己去撸一个爬虫~

实际上,duck 不必,我们强大的 Python 的先锋们早就发现了这个问题,所以封装了很多关于财经数据的接口(当然其本质还是爬虫哈),比如:pandas_datareader、tushare、baostock 等等。那么今天,我们就迈出金融量化的第一步,跟着 老Amy 一起来学习叭

开始学习叭

tushare

首先,一定要给大家介绍 tushare 这个包,这个包是真的好用,所以一定要“学它学它学它!”不过需要注意的是,这个包大家直接通过 pip install tushare 安装就可以用。但是社区的新版本它来了,需要大家注册个 token 才能免费使用,所以请大家点击这个:https://tushare.pro/register?reg=379314 ,以及官网里面的教程也是非常详细

初始化 pro 接口

# 导入模块
import tushare as ts

# 设置你的token,别拿我的...
token = "你的 token"

# 初始化pro接口 设置token
pro = ts.pro_api(token)

注意:获取 token

  • 登录成功后,点击右上角->个人主页
  • 在“用户中心”中点击“接口TOKEN”
  • 可以点击右侧复制按钮复制token

获取当前上市股票数据

  • 使用方法:stock_basic(is_hs,list_status,exchange)
    • is_hs 是否沪深港通标的,N否 H沪股通 S深股通
    • list_status 上市状态: L上市 D退市 P暂停上市,默认L
    • exchange 交易所 SSE上交所 SZSE深交所 HKEX港交所(未上线)
basic_data = pro.stock_basic(list_status="L")
basic_data.head()

Python金融量化分析第一步
注意:tushare pro 使用方法获取数据需要平台积分,详情请参考 https://tushare.pro/document/1?doc_id=13

获取万科A日行情数据

  • 使用方法:daily(ts_code,trade_date,start_date,end_date)
    • ts_code 股票代码(支持多个股票同时提取,逗号分隔)
    • trade_date 交易日期(YYYYMMDD)
    • start_date 开始日期(YYYYMMDD)
    • end_date 结束日期(YYYYMMDD)
# 获取万科A日行情数据
wanke = pro.daily(ts_code="000002.SZ", start_date="20190101")

# 获取前5行
wanke.head()

Python金融量化分析第一步

import pandas as pd

# 将时间设置为时间序列索引
wanke.index = pd.to_datetime(wanke["trade_date"])

# 将时间序列索引排序
wanke = wanke.sort_index()
wanke.head()

Python金融量化分析第一步
注意:至于返回的每一列是啥意思,大家可以参考 https://tushare.pro/document/2?doc_id=27

绘制K线图

  • 构建x,y数据
    • x:时间
    • y:股票收盘价
  • 使用 pyecharts 绘制k线图
    • 参考链接:http://pyecharts.org/
# 取出 open high low close 列的值 转为列表
k_data = list(wanke.loc[:,["open","close","low","high"]].values)

# 获取时间索引
k_idx = wanke.index

# 类型为:DatetimeIndex
type(k_idx)

# 将DatetimeIndex 转为 字符串 
k_idx2 = list(k_idx.strftime("%Y%m%d"))

# 绘制日k
import matplotlib.pyplot as plt
from pyecharts import Kline

kline = Kline("万科K线图")
kline.add("", k_idx2 ,k_data, is_datazoom_show=True,
         mark_line = ["average"],
         mark_point = ["max","min"],
         mark_point_symbolsize = 50,
         mark_line_valuedim = ["highest", "lowest"]
         )

kline

Python金融量化分析第一步

baostock

baostock 也叫作证券宝,它是一款开源、免费的证券数据平台。直接通过 pip install baostock 就可以使用,它的地址:http://baostock.com/baostock/index.php/Python_API

but…我是觉得它的代码没有 tushare 好懂鸭~

import baostock as bs
# 登陆系统
lg = bs.login()

# 获取历史 k 线数据
rs = bs.query_history_k_data_plus("sh.600000",
    "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
    start_date='2017-07-01', end_date='2019-01-01',
    frequency="d", adjustflag="3")
rs

Python金融量化分析第一步

# 构建 数据列表
data_list = []

# 当 错误代码为0 并且 rs.next() 存在时 获取行添加到 data_list 中
while (rs.error_code == '0') & rs.next():
    data_list.append(rs.get_row_data())
    
# 构建 数值:data_list 列索引:rs.fields
result = pd.DataFrame(data_list, columns=rs.fields)

# 将索引 设置为 时间序列索引
result.index = pd.to_datetime(result.date)

# 将某些字段的 object类型 转化为 numeric类型
result = result.apply(pd.to_numeric, errors="ignore")
result.head()

Python金融量化分析第一步

通过 seaborn 绘制折线图

import seaborn as sns

# 设置图片大小
sns.set(rc={'figure.figsize':(11,4)})

# 绘制折线图
sns.lineplot(x=result.index, y="close",data=result)
plt.show()

Python金融量化分析第一步

pandas_datareader

这个接口我真的是无力吐槽了。但是,如果你阅读金融数据分析这本书,会发现上面有用到它,但是是真的很慢很慢~我基本上用 jupyter 获取一年的数据都要请求好久,所以大家如果有兴趣的话可以自行了解一下呀~我就不分享它了

好啦~今天的车就开到这里,司机要下车啦!如果觉得有所收获,欢迎给我33333,不过有朋友问我33333是啥意思,是3连呀

Python金融量化分析第一步

本文地址:https://blog.csdn.net/weixin_44352981/article/details/107271018