我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python中如何搭建自己的量化分析数据库

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python中如何搭建自己的量化分析数据库

本篇文章给大家分享的是有关Python中如何搭建自己的量化分析数据库,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

手把手教你搭建自己的量化分析数据库

引言:

数据是金融量化分析的重要基础,包括股票历史交易数据、上市公司基本面数据、宏观和行业数据等。随着信息流量的日益膨胀,学会获取、查询和加工数据信息变得越来越重要。对于鼓捣量化交易的人来说,怎么能说不会玩数据库呢?目前常用的开源(免费)数据库有MySQL、Postgresql 、Mongodb 和 SQLite (Python自带),在2018-2019年DB-Engines 排行榜上位居前十(见下图),可见其使用量和受欢迎程度较高。这几个数据库各有自己的特点和适用环境,关于该学习哪一个或如何学习网上有很多相关资料。本文主要为大家简单介绍如何使用 Python 操作 Postgresql 数据库(其他数据库类似),利用 psycopg2 和 sqlalchemy 实现 postgresql 与 pandas 的 dataframe 进行交互,一步步搭建自己的量化分析数据库。

Python中如何搭建自己的量化分析数据库

PostgreSQL的安装与使用

安装 PostgreSQL。到其官网选择适合自己电脑配置的版本下载安装即可,安装过程除了设置密码(本文设置为“123456”),其他可选择全部默认,如实在不会可参考CSDN上的文章:PostgreSQL安装详细步骤(windows)。安装完之后在安装目录里还可以看到pgAdmin4,这个是自带的数据库图形化工具,最新版是Web 应用程序,有点类似 Python 的 Jupyter Notebook,可用来查看和操作postgresql 数据库。

Python上安装psycopg2 和 sqlalchemy 库。psycopg2 是 Python 连接PostgreSQL数据库的接口,sqlalchemy 应用更广泛,可连接数据库(MySQL, SQLite, PostgreSQL),尤其是对于 pandas 的dataframe型数据,操作起来十分方便。关于这两个 python 库的介绍网上有很多,这里不详细展开,在cmd上使用pip install xxx 进行安装即可。

实例应用

首先,使用 tushare 获取3000多只股票行情数据到本地,使用psycopg2 和 sqlalchemy 为接口,将数据存入本地PostgreSQL数据库中,方便进一步查询和操作。

#先引入后面分析、可视化等可能用到的库import tushare as tsimport pandas as pd import numpy as npimport matplotlib.pyplot as plt#正常显示画图时出现的中文和负号from pylab import mplmpl.rcParams['font.sans-serif']=['SimHei']mpl.rcParams['axes.unicode_minus']=False#设置tokentoken='输入你的token'pro = ts.pro_api(token)

数据获取函数,默认时间可以随时改动。

#如果报错,把tushare升级到最新def get_data(code,start='20190101',end='20190425'): df=ts.pro_bar(ts_code=code, adj='qfq', start_date=start, end_date=end) return df股票代码获取函数,获取最新交易日的代码。#获取当前交易日最新的股票代码和简称def get_code(): codes = pro.stock_basic(list_status='L').ts_code.values return codes

插入PostgreSQL 数据库操作,函数里使用了try...except...pass是为了避免某些数据出错导致程序崩溃。

from sqlalchemy import create_engineimport psycopg2engine = create_engine('postgresql+psycopg2://postgres:123456@localhost:5432/postgres')def insert_sql(data,db_name,if_exists='append'): #使用try...except..continue避免出现错误,运行崩溃 try: data.to_sql(db_name,engine,index=False,if_exists=if_exists) #print(code+'写入数据库成功') except: pass

由于行情数据量庞大,下载比较慢,先下载20190101至20190425期间日交易

数据,后续再不断更新。

#下载20190101-20190425数据并插入数据库stock_data#此步骤比较耗费时间,大致25-35分钟左右for code in get_code(): data=get_data(code) insert_sql(data,'stock_data')#读取整张表数据df=pd.read_sql('stock_data',engine)print(len(df))#输出结果:270998#选取ts_code=000001.SZ的股票数据df=pd.read_sql("select * from stock_data where ts_code='000001.SZ'",engine)print(len(df))

构建一个数据更新函数,可以下载和插入其他时间周期的数据。2018年1月1日至2019年4月25日,数据就已达到108万条。

#更新数据或下载其他期间数据def update_sql(start,end,db_name): from datetime import datetime,timedelta for code in get_code(): data=get_data(code,start,end) insert_sql(data,db_name) print(f'{start}:{end}期间数据已成功更新')#下载20180101-20181231期间数据#只需运行一次,不再运行后可以注释掉#下载数据比较慢,需要20-35分钟左右start='20180101'end='20181231'db_name='stock_data'#数据下载和存入数据库update_sql(start,end,db_name)#使用pandas的read_sql读取数据df_all_data=pd.read_sql('stock_data',engine)print(len(df_all_data))#输出结果:1087050#查看交易代码和交易日期个数print(len(df_all_data.ts_code.unique()))print(len(df_all_data.trade_date.unique()))#输出结果:3604;319d=df_all_data.trade_date.unique()print(d.max())print(d.min())2019-04-25T00:00:00.0000000002018-01-02T00:00:00.000000000#获取交易日2019年4月25日数据pd.read_sql("select * from stock_data where trade_date='2019-04-25' ",engine).head()

Python中如何搭建自己的量化分析数据库

构建数据查询和可视化函数:def plot_data(condition,title): from pyecharts import Bar from sqlalchemy import create_engine engine = create_engine('postgresql+psycopg2://postgres:123456@localhost:5432/postgres') data=pd.read_sql("select * from stock_data where+"+ condition,engine) count_=data.groupby('trade_date')['ts_code'].count() attr=count_.index v1=count_.values bar=Bar(title,title_text_size=15) bar.add('',attr,v1,is_splitline_show=False,linewidth=2) return bar查询股价低于2元个股数据分布c1="close<2"t1="股价低于2元个股时间分布"plot_data(c1,t1)

Python中如何搭建自己的量化分析数据库

查询股价日涨幅超过9.5%个股数据分布:

c2="pct_chg>9.5"t2="股价涨幅超过9.5%个股时间分布"plot_data(c2,t2)

Python中如何搭建自己的量化分析数据库

查询股价日跌幅超过-9.5%个股数据分布:

c3="pct_chg<-9.5"t3="股价跌幅超过-9.5%个股时间分布"plot_data(c3,t3)

Python中如何搭建自己的量化分析数据库

结合选股策略对数据库进行查询和提取数据:

#筛选代码#获取当前交易的股票代码和名称def get_new_code(date): #获取当前所有交易股票代码 df0 = pro.stock_basic(exchange='', list_status='L') df1 =pro.daily_basic(trade_date=date) df=pd.merge(df0,df1,on='ts_code') #剔除2017年以后上市的新股次新股 df=df[df['list_date'].apply(int).values<20170101] #剔除st股 df=df[-df['name'].apply(lambda x:x.startswith('*ST'))] #剔除动态市盈率为负的 df=df[df.pe_ttm>0] #剔除大市值股票 df=df[df.circ_mv<10**5] #剔除价格高于20元股票 #df=df[df.close<20] codes=df.ts_code.values return codeslen(get_new_code('20190425'))#输出结果:46import talib as ta#20日均线交易策略def find_stock(date): f_code=[] for code in get_new_code(date): try: data=df_all_data.loc[df_all_data.ts_code==code].copy() data.index=pd.to_datetime(data.trade_date) data=data.sort_index() data['ma_20']=ta.MA(data.close,timeperiod=20) if data.iloc[-1]['close']>data.iloc[-1]['ma_20']: f_code.append(code) except: pass return f_codefs=find_stock('20190305')print(f'筛选出的股票个数:{len(fs)}')if fs: df_find_stocks=pd.DataFrame(fs,columns=['ts_code']) #将选出的股票存入数据库,如果表已存在,替换掉,相当于每次更新 insert_sql(df_find_stocks,'find_stocks',if_exists='replace') print('筛选的股票已入库')筛选出的股票个数:9筛选的股票已入库#查看数据库中筛选的股票池codes=pd.read_sql('find_stocks',engine)codes=codes.values.tolist()codes=[c[0] for c in codes]#print(codes)

对筛选的股票作进一步分析:

select_data=pd.DataFrame()for code in codes: try: df_= df_all_data[df_all_data.ts_code.values==code] df_.index=pd.to_datetime(df_.trade_date) df_=df_.sort_index() select_data[code]=df_.close except: passselect_data.fillna(method='ffill',inplace=True)select_data.tail()ret=select_data.apply(lambda x:x/x.shift(1)-1)ret=ret.dropna()ret.tail()prod_ret=ret.apply(lambda x:(1+x).cumprod())prod_ret.plot(figsize=(12,5))plt.xlabel('',fontsize=15)plt.title('股票池累计净值',size=15)ax = plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') plt.show()

Python中如何搭建自己的量化分析数据库

#根据代码从数据库中获取数据def get_data_from_sql(code): from sqlalchemy import create_engine engine = create_engine('postgresql+psycopg2://postgres:123456@localhost:5432/postgres') data=pd.read_sql(f"select * from stock_data where ts_code='{code}'",engine) data.index=pd.to_datetime(data.trade_date) data=data.sort_index() #计算20日均线 data['ma20']=data.close.rolling(20).mean() return data

利用20日均线交易策略,搭建数据查询和可视化函数kline_plot(),完整代码将分享在知识星球上。对选出的股票日K线、20日均线、成交量、买入(buy)和卖出(sell)信号进行可视化,下面以002790.和300573股票的K线图为例。

kline_plot('002790.SZ')

Python中如何搭建自己的量化分析数据库

kline_plot('300573.SZ')

Python中如何搭建自己的量化分析数据库

数据库操作其实要学的东西还很多,本文旨在抛砖引玉,简单介绍使用Python 对 PostgreSQL 数据库与 dataframe 型数据进行交互,一步步搭建自己的量化分析数据库。由于文中用到的数据仅为百万条左右,实际上使用excel的csv来读写也很快,并且比较直观,但随着数据的不断增多,要建立自己完善的量化分析系统,数据库的学习就显得尤为重要。注意,文中所提及选股方式和股票代码仅作为示例应用,不构成任何投资建议。

以上就是Python中如何搭建自己的量化分析数据库,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python中如何搭建自己的量化分析数据库

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中如何搭建自己的量化分析数据库

本篇文章给大家分享的是有关Python中如何搭建自己的量化分析数据库,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。手把手教你搭建自己的量化分析数据库引言:数据是金融量化分析的重
2023-06-02

如何搭建Python数据分析环境

如何搭建Python数据分析环境?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、AnacondaAnaconda(水蟒)是一个捆绑了Python、conda、
2023-06-15

如何搭建数据库自动化运维体系

需求背景:随着业务的增长、对运维效率和质量的要求不断提高,对自动化运维体系的需求也不断增强。目前笔者服务的很多中大型企业客户,运维其实还停留在“刀耕火种”的原始状态。这里所说的“刀”和“火”就是运维人员的远程客户端,例如 xshell 和Windows 远程桌

	如何搭建数据库自动化运维体系
2014-05-21

如何优化数据库的数据分析

要优化数据库的数据分析,可以考虑以下几个方面:数据建模:设计合适的数据模型可以提高数据查询和分析的效率。合理的数据模型能够提高数据的存储效率,并简化数据查询的复杂度。索引优化:为频繁查询的字段建立索引,可以加快数据查询的速度。同时,注意索引
如何优化数据库的数据分析
2024-07-03

如何分析Python自动化运维开发中的变量

本篇文章给大家分享的是有关如何分析Python自动化运维开发中的变量,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。好程序员分享Python自动化运维开发实战四-变量导语:1.什
2023-06-04

如何优化数据库的数据回归分析

要优化数据库的数据回归分析,可以采取以下措施:数据清洗:对数据库中的数据进行清洗,包括去除缺失值、异常值和重复值,确保数据的准确性和完整性。数据预处理:对数据库中的数据进行预处理,包括数据标准化、归一化、降维等操作,以提高数据的质量和准确性
如何优化数据库的数据回归分析
2024-07-03

详解如何在Win系统中搭建自己的Git远程仓库

在这个信息化的时代,程序员们必然会经常使用版本控制工具来方便管理自己的代码,Git作为分布式版本控制系统的代表,已经成为了程序员必备的技能之一。在我们平时的开发过程中,我们通常将本地的代码提交到远程仓库中,以便将代码同步到其他计算机上。在这
2023-10-22

如何进行大数据平台的搭建和数据分析

如何进行大数据平台的搭建和数据分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  行内人士皆知,大数据分析平台的搭建有利于帮助企业构建统一的数据存储和数据处理
2023-06-02

如何使用Python中的数据分析库进行数据处理

如何使用Python中的数据分析库进行数据处理人们越来越重视数据处理和分析的重要性。随着电子设备的不断普及和互联网的发展,我们每天都会产生大量的数据。要从这些海量的数据中提取有用的信息和洞察,就需要使用强大的工具和技术。Python作为一种
2023-10-22

如何在简历中突显自己的MySQL数据库技能?

如何在简历中突显自己的MySQL数据库技能?MySQL是目前世界上最受欢迎和广泛使用的开源关系型数据库管理系统。在当今的信息化时代中,数据库技能对于许多职业来说变得愈发重要。无论您是一名软件工程师、数据分析师还是运维人员,突显自己的MySQ
2023-10-22

如何分析Python的数据类型、变量、字符串和格式化

这篇文章主要为大家分析了如何分析Python的数据类型、变量、字符串和格式化的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“如何分析Python的数据类型、变
2023-06-29

如何优化Python中的数据库操作

如何优化Python中的数据库操作概述:随着数据量的不断增大,数据库操作在很多项目中变得越来越关键。本文将带您了解如何优化Python中的数据库操作,提高代码的性能和效率。我们将重点讨论以下几个方面:选择合适的数据库系统、优化查询语句、使用
2023-10-22

如何构建MySQL中的自动化数据监控系统

要构建MySQL中的自动化数据监控系统,您可以使用以下步骤:确定监控需求:首先,您需要确定您想要监控的数据指标和指标的阈值。这可以包括数据库连接数、查询响应时间、CPU利用率等。选择监控工具:选择一个适合您需求的监控工具,例如Prometh
如何构建MySQL中的自动化数据监控系统
2024-04-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录