基于Python的指数基金量化投资-股票数据源baostock

课程参考:基于Python的量化指数基金投资

微信公众号:

量化用到的数据源来自baostock,可以通过www.baostock.com网址进行访问,它是一个免费、开源的证券数据平台(无需注册),提供大量准确、完整的证券历史行情数据、上市公司财务数据等。

可以通过提供的python API获取证券数据信息,满足量化交易投资、金融数据分析、计量经济数据需求。

返回的数据格式为pandas DataFrame类型,以便于用pandas/NumPy/Matplotlib进行数据分析和可视化。 同时支持通过BaoStock的数据存储功能,将数据全部保存到本地后进行分析。目前版本BaoStock.com只支持Python3.5及以上,暂不支持python 2.x。

安装方式pip install baostock

也可以使用国内源安装:

pip install baostock -i https://pypi.tuna.tsinghua.edu.cn/simple/–trusted-host pypi.tuna.tsinghua.edu.cn

baostock提供了完备的API进行数据获取

例如获取历史A股K线数据:query_history_k_data_plus()

import baostock as bs

import pandas as pd

#### 登陆系统####

lg = bs.login()

# 显示登陆返回信息

print(‘login responderror_code:’+lg.error_code)

print(‘login respond error_msg:’+lg.error_msg)

#### 获取沪深A股历史K线数据####

# 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。

# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag

# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg

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=‘2010-07-01’, end_date=‘2021-02-19’,

frequency=“d”, adjustflag=“3”)

print(‘query_history_k_data_plus responderror_code:’+rs.error_code)

print(‘query_history_k_data_plusrespond error_msg:’+rs.error_msg)

#### 打印结果集####

data_list = []

while (rs.error_code == ‘0’) &rs.next():
#获取一条记录,将记录合并在一起
data_list.append(rs.get_row_data())

result = pd.DataFrame(data_list,columns=rs.fields)

#### 结果集输出到csv文件####

result.to_csv(“D:\history_A_stock_k_data.csv”,index=False)

print(result)

#### 登出系统####

bs.logout()

程序运行完后会返回相应的数据,并按照你指定的文件路径存储为csv文件。

然后可以通过

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

import math as math

stock_info = pd.read_csv(“D:\history_A_stock_k_data.csv”)

size_title = 28

size_label = 23

size_text = 35

size_line = 3

size_rotation = 20

size_marker = 23

list_tmp = list(stock_info[‘close’])

index_max = list_tmp.index(max(list_tmp))

plt_gap = 8

plt.figure(0)

plt.rcParams[“axes.grid”] = True

plt.rcParams[‘font.sans-serif’] =[‘SimHei’]

plt.rcParams[“grid.linestyle”] =(3, 5)

plt.plot(stock_info[‘close’],‘tomato’,linewidth=size_line)

font = {‘size’: 30, ‘color’: ‘tomato’,‘weight’: ‘black’}

plt.text(index_max+30, list_tmp[index_max],str("{:.2f}".format(list_tmp[index_max])), fontdict=font)

plt.plot(index_max, list_tmp[index_max],color=‘cornflowerblue’, marker=‘o’, ms=size_marker)

plt.text(1+30, list_tmp[0]+1,str("{:.2f}".format(list_tmp[0])), fontdict=font)

plt.plot(1, list_tmp[0],color=‘cornflowerblue’, marker=‘o’, ms=size_marker)

plt.text(len(list_tmp)+30, list_tmp[-1]+1,str("{:.2f}".format(list_tmp[-1])), fontdict=font)

plt.plot(len(list_tmp)+30, list_tmp[-1],color=‘cornflowerblue’, marker=‘o’, ms=size_marker)

plt_xticks =stock_info[‘date’].values[1:len(stock_info[‘date’]):1].tolist()

plt.xticks(range(len(plt_xticks),0,-math.floor(len(plt_xticks)/plt_gap)),plt_xticks[len(plt_xticks):0:-math.floor(len(plt_xticks)/plt_gap)],rotation=size_rotation)

plt.tick_params(labelsize=size_label)

plt.title(‘股价走势’,size=size_title)

plt.figure(1)

plt.rcParams[“axes.grid”] = True

plt.rcParams[‘font.sans-serif’] =[‘SimHei’]

plt.rcParams[“grid.linestyle”] =(3, 5)

plt.gca()

# plt.grid(True)

plt.subplot(321)

plt.plot(stock_info[‘close’],‘tomato’)

plt_xticks =stock_info[‘date’].values[1:len(stock_info[‘date’]):1].tolist()

plt.xticks(range(len(plt_xticks),0,-math.floor(len(plt_xticks)/plt_gap)),plt_xticks[len(plt_xticks):0:-math.floor(len(plt_xticks)/plt_gap)],rotation=0)

plt.title(‘价格’)

plt.subplot(322)

plt.plot(stock_info[‘pbMRQ’] /stock_info[‘peTTM’],‘tomato’)

plt.xticks(range(len(plt_xticks),0,-math.floor(len(plt_xticks)/plt_gap)),plt_xticks[len(plt_xticks):0:-math.floor(len(plt_xticks)/plt_gap)],rotation=0)

plt.title(‘ROE’)

plt.subplot(323)

plt.plot(stock_info[‘pbMRQ’],‘tomato’)

plt.xticks(range(len(plt_xticks),0,-math.floor(len(plt_xticks)/plt_gap)),plt_xticks[len(plt_xticks):0:-math.floor(len(plt_xticks)/plt_gap)],rotation=0)

data_calc = stock_info[‘pbMRQ’]

xx = np.where(data_calc < data_calc.values[-1])

data_percentage =str("{:.2f}".format(100 * len(xx[0]) / data_calc.shape[0])) + ‘%’

plt.plot([len(data_calc),0],[data_calc.values[-1],data_calc.values[-1]],color=‘cornflowerblue’,linewidth=1)

plt.title(‘市净率|’ +data_percentage)

plt.subplot(324)

plt.plot(stock_info[‘peTTM’],‘tomato’)

plt.xticks(range(len(plt_xticks),0,-math.floor(len(plt_xticks)/plt_gap)),plt_xticks[len(plt_xticks):0:-math.floor(len(plt_xticks)/plt_gap)],rotation=0)

data_calc = stock_info[‘peTTM’]

xx = np.where(data_calc < data_calc.values[-1])

data_percentage =str("{:.2f}".format(100 * len(xx[0]) / data_calc.shape[0])) + ‘%’

plt.plot([len(data_calc),0],[data_calc.values[-1],data_calc.values[-1]],color=‘cornflowerblue’,linewidth=1)

plt.title(‘市盈率|’ +data_percentage)

运行后可以画出相应的数据图




Baostock提供了非常丰富的数据,大家可以自行查阅相关接口和对应的数据关系。后续和大家分享的基于Python的量化指数基金投资方法都是采用的baostock数据。

基于Python的指数基金量化投资-股票数据源baostock相关推荐

  1. 基于Python的指数基金量化投资——指数数据获取

    做基金的量化,最最重要的是要有数据,所以指数的数据是所有分析的源头. Baostock就提供比较全面的指数数据,具体可以参考<基于Python的指数基金量化投资 - 股票数据源baostock& ...

  2. 基于Python的指数基金量化投资 ——A股所有个股名称和证券代码获取

    前面介绍过怎么获取A股个股的数据<基于Python的指数基金量化投资 - 股票数据源baostock>,里面包含了个股的各种历史数据,包含:股价.市盈率.市净率.成交量.换手率等等. 但是 ...

  3. 基于Python的指数基金量化投资——A股全市场成交量计算

    成交量是反映市场情绪和流动性一个很重要的指标,当出现牛市时成交量会急剧放大,当出现熊市时成交量会急剧缩小. 通过成交量可以反映出市场的情绪是处于正常.平淡还是疯狂,可以在一定程度上指导我们的投资操作, ...

  4. 基于Python的指数基金量化投资-为什么量化指数基金投资

    上一次写了基于Python的指数基金量化投资-股票数据源baostock 这次来说一下为什么要量化指数基金投资. 进行指数基金投资我们需要清楚几个关键点:该投资哪些指数品种,为什么投资这些品种.这些品 ...

  5. 基于Python的指数基金量化投资——指数基金间相关度计算

    每一种指数基金都是由一篮子股票组成的,少的有几十个成分股,多的有几百上千个成分股,而整个A股目前有四千多家上市公司,每种指数基金都从A股这个大篮子里面选取成分股,那就会有个问题,不同的指数基金选择的成 ...

  6. 基于Python的指数基金量化投资——指数基金偏离度计算

    什么是指数偏离度 它是指数涨跌的快慢和偏离幅度指标. 当指数快速上涨,偏离度数据会迅速的向上偏离,当快速下跌时,偏离度数据会迅速的向下偏离. 而持续的上涨中出现下跌,偏离度就会急转直下,另一种持续的下 ...

  7. 基于Python的指数基金量化投资 - 指数投资技巧(三)不定期定额

    指数投资方式中有四种基本的方法,分别是定期定额.定期不定额.不定期定额和不定期不定额,这四种方式投资效果不同,对投资者的要求也不同,定期定额最简单,但收益不算高,不定期不定额最复杂,对投资者的要求最高 ...

  8. 基于Python的指数基金量化投资——指数包含的个股数据获取

    要计算指数的加权值,指数的市盈率.市净率,或者指数的净资产收益率,都需要用到指数所包含的个股信息,前面分享的<指数的净资产收益率计算>和<指数的市盈率和市净率计算>等文中都有提 ...

  9. Python量化投资——股票择时到底能否赚钱?ADX指标的有效性回测

    ADX指标的有效性回测 Python量化投资--`ADX`技术指标的有效性研究 背景介绍 技术指标介绍 指标用法建议 `qteasy`中的ADX内置策略 433支股票五年回测结果 12.45% --该 ...

最新文章

  1. Center OS 离线安装Mysql5.7
  2. tensorflow2.0 RNN文本预测
  3. 【深度学习的数学】为什么用二次代价函数,误差越大,参数调整幅度越小?
  4. python中使用什么表示代码块、不需要使用大括号_Python3学习笔记02-基础语法
  5. oreo另一个意思_记一次有意思的统计(部分大宗商品价格指数相关性统计)
  6. linux6 rac 11g,oracle linux 6.操作系统oracle 11g rac
  7. android使用Dialog实现复选功能与数据库结合综合实例
  8. Js+XML 操作 [ZT]
  9. SharePoint 2013 Step by Step——使用自定义的List Template
  10. Java Matcher源码学习记录
  11. python 数组学习
  12. 手撸一个外卖点餐系统后台,可以写上简历的实战项目!
  13. 计算机三级网络技术考过指南 【历年考点汇总】
  14. 华为手机百度云息屏后停止下载_让客厅成为娱乐中心,华为智慧屏S系列轻松就能做到...
  15. 计算机卡慢解决方法,电脑很卡怎么办,详细教您电脑很卡很慢应该怎么解决
  16. 华为p20Pro投屏电脑 手机投屏电脑教程
  17. 2019几大主流的前端框架,几款目前最热门的前端框架
  18. amp;amp;什么意思?
  19. 英伟达GPU产品分类说明
  20. Ubuntu 16.04 下安装网易云

热门文章

  1. RationalDMIS 7.1 如何更改CAD模型的坐标系
  2. 2021重庆江北中学高考成绩查询,重庆市江北中学校2021年排名
  3. bzoj 2733 永无岛
  4. 电脑中设备管理器-声音、视频和游戏控制器突然不见了——解决方法
  5. 渣基础:比照Hawstein学Cracking the coding interview(1)
  6. 2023年英文科技论文写作与学术报告-期末考试
  7. 喜马拉雅java社招面试_(转)喜马拉雅2018 Java面试题目
  8. tomcat启动异常:子容器启动失败(a child container failed during start)
  9. 汇哲培训——IT审计师轻叩中国大门--小球撬动大球
  10. SpringBoot学习(六)——springboot整合后台模板