量化选股策略搭建(一)(股票数据获取)

接触股市一年多,能力有限并未赚钱,目前个人时间渐渐宽裕起来,准备开发一些量化策略,包括股价预测、股票选取、股票操作等。创立这个公众号的目的是为了记载一些个人在量化策略上的研究,目前还未正式学习,暂时都是凭着本人在数据挖掘、机器学习和股市上的一些理解进行的研究。在接下来的一段时间里,个人将在选股策略上进行一定的研究。
虽然目前有很多的量化回测系统,但这些系统都是集成好的,所能提供的策略指标都是很传统的策略指标,无法进行一些数据挖掘的工作,无法使用自己所相使用的模型。本人在github上也查找了一下代码也并未找到让自己满意的可以用来学习的代码(看别人代码也太累了),因此决定从0到1开发一个属于自己的策略。
既然要进行一个数据挖掘的任务,那么首先就是需要数据获取,tushare提供了一个很好的数据获取接口。如下图我们可以通过tushare获取一些股票数据。具体可以获取的数据可以看接口,这里放一个tushare接口数据的链接:tushare

数据获取

导入一些包:

import tushare as ts
import pandas as pd
import os
import time

Token 获取权限:

mytoken = '**********'
ts.set_token(mytoken)
ts.set_token(mytoken)
save_path = 'F:\stock'
pro = ts.pro_api()

这个token需要到tushare网址那申请一个账号获取token,链接:https://tushare.pro/
注册完之后到个人主页可以查看token,如下图

然后是个股的行情获取,这里我们只考虑获取主板和中小板的股票,至于创业板和科创板,个人无法购买这个股票,这里就不获取了。

#获取基础信息数据,包括股票代码、名称、上市日期、退市日期等
pool = pro.stock_basic(exchange='',list_status='L',adj='qfq',fields='ts_code,symbol,name,area,industry,fullname,list_date, market,exchange,is_hs')
#print(pool.head())# 因为穷没开通创业板和科创板权限,这里只考虑主板和中心板
pool = pool[pool['market'].isin(['主板', '中小板'])].reset_index()
pool.to_csv(os.path.join(save_path, 'company_info.csv'), index=False, encoding='ANSI')

对于每个field的含义,可以去接口平台查看,这里我们所获取的是一些日线的行情概括,各个字段含义如下图。

然后就是数据循环获取,因为接口限制了访问,这里用sleep暂停数据获取。除此之外,因为后期我们需要更新每天的股市信息,所以对得到的dataframe按日期排了下序,后期再更新时只需要获取当天行情即可,然后直接在末尾追加写入即可。

for i in pool.ts_code:print('正在获取第%d家,股票代码%s.' % (j, i))#接口限制访问200次/分钟,加一点微小的延时防止被banpath = os.path.join(save_path, 'OldData', i + '_NormalData.csv')j += 1# if os.path.exists(path):#     continuetime.sleep(0.301)df = pro.daily(ts_code=i,start_date=startdate,end_date=enddate,fields='ts_code, trade_date, open, high, low, close, pre_close, change, pct_chg, vol, amount')df = df.sort_values('trade_date', ascending=True)df.to_csv(path, index=False)

同样的,我们可以获取一些指数的日线行情:

def getIndexData():# 上交所指数信息df = pro.index_basic(market='SSE')df.to_csv(os.path.join(save_path, 'SSE.csv'), index=False, encoding='ANSI')# 深交所指数信息df = pro.index_basic(market='SZSE')df.to_csv(os.path.join(save_path, 'SZSE.csv'), index=False, encoding='ANSI')# 获取指数历史信息# 这里获取几个重要的指数 【上证综指,上证50,上证A指,深证成指,深证300,中小300,创业300,中小板综,创业板综】index = ['000001.SH', '000016.SH', '000002.SH', '399001.SZ', '399007.SZ', '399008.SZ', '399012.SZ', '399101.SZ','399102.SZ']for i in index:path = os.path.join(save_path, 'OldData', i + '_NormalData.csv')df = pro.index_daily(ts_code=i,start_date=startdate,end_date=enddate,fields='ts_code, trade_date, open, high, low, close, pre_close, change, pct_chg, ''vol, amount')df = df.sort_values('trade_date', ascending=True)df.to_csv(path, index=False)

以上就是初始数据获取的关键代码展示。
完整代码今天暂时还传不上去(github好像有点崩了),后面再传。这里先放出完整代码。

import tushare as ts
import pandas as pd
import os
import time"""
获取历史数据
"""mytoken = '*******'
ts.set_token(mytoken)
ts.set_token(mytoken)
save_path = 'F:\stock'
pro = ts.pro_api()def getNoramlData():#获取基础信息数据,包括股票代码、名称、上市日期、退市日期等pool = pro.stock_basic(exchange='',list_status='L',adj='qfq',fields='ts_code,symbol,name,area,industry,fullname,list_date, market,exchange,is_hs')#print(pool.head())# 因为穷没开通创业板和科创板权限,这里只考虑主板和中心板pool = pool[pool['market'].isin(['主板', '中小板'])].reset_index()pool.to_csv(os.path.join(save_path, 'company_info.csv'), index=False, encoding='ANSI')print('获得上市股票总数:', len(pool)-1)j = 1for i in pool.ts_code:print('正在获取第%d家,股票代码%s.' % (j, i))#接口限制访问200次/分钟,加一点微小的延时防止被banpath = os.path.join(save_path, 'OldData', i + '_NormalData.csv')j += 1# if os.path.exists(path):#     continuetime.sleep(0.301)df = pro.daily(ts_code=i,start_date=startdate,end_date=enddate,fields='ts_code, trade_date, open, high, low, close, pre_close, change, pct_chg, vol, amount')df = df.sort_values('trade_date', ascending=True)df.to_csv(path, index=False)def getIndexData():# 上交所指数信息df = pro.index_basic(market='SSE')df.to_csv(os.path.join(save_path, 'SSE.csv'), index=False, encoding='ANSI')# 深交所指数信息df = pro.index_basic(market='SZSE')df.to_csv(os.path.join(save_path, 'SZSE.csv'), index=False, encoding='ANSI')# 获取指数历史信息# 这里获取几个重要的指数 【上证综指,上证50,上证A指,深证成指,深证300,中小300,创业300,中小板综,创业板综】index = ['000001.SH', '000016.SH', '000002.SH', '399001.SZ', '399007.SZ', '399008.SZ', '399012.SZ', '399101.SZ','399102.SZ']for i in index:path = os.path.join(save_path, 'OldData', i + '_NormalData.csv')df = pro.index_daily(ts_code=i,start_date=startdate,end_date=enddate,fields='ts_code, trade_date, open, high, low, close, pre_close, change, pct_chg, ''vol, amount')df = df.sort_values('trade_date', ascending=True)df.to_csv(path, index=False)if __name__ == '__main__':#设置起始日期startdate = '20120101'enddate = '20191226'#主程序getNoramlData()getIndexData()

个人公众号,这里放一个个人公众号,后期策略成熟将会在公众号中分享个股.

量化选股策略搭建(一)(股票数据获取)相关推荐

  1. 量化选股策略搭建(四)(短期策略搭建)

    量化选股策略搭建(四)(短期策略搭建) 首先我们需要把选股这个问题转化为一个机器学习问题.那么如何转化成机器学习问题呢?机器学习也分两类问题:1.回归问题,2.分类问题.常规的一些方法是预测股价增长来 ...

  2. 量化选股策略搭建(二)(数据更新)

    量化选股策略搭建(二)(数据更新) 接上一篇文章,上一篇文章数据下载,这里我们讲如何进行数据更新操作. 数据更新思想较为简单,只需要获取更新的数据,并将其写入csv文件末尾即可.部分获取更新数据和追加 ...

  3. 量化选股策略搭建(六)(中期策略搭建)

    所用到的数据: 1.上市公司信息数据 可用tushare的 stock_basic接口获取 2.股票每日信息(开.收.最高.最低价,换手率,成交量等) 可用tushare的pro_bar接口获取 3. ...

  4. 量化选股策略搭建(三)(回测系统)

    前两篇文章讲了数据的下载及更新,今天这篇文章讲回测系统的搭建. 回测系统 首先, 个人理解的回测系统就是输入每日可买入的股票(这些股票是经过模型筛选得到的),然后回测系统根据一些条件买入卖出等操作. ...

  5. 手工选出的股票池和量化选股模型选出的股票池有哪些区别?

    虽然逻辑上看似比较简单,但是往往手工选出的股票池并不是最优解.因为一个成熟的模型往往需要进行多次的尝试和回溯测试,而客户自身的选股逻辑经常会受到主观意识的干扰,导致股票组合的实际表现不佳. 量化选股模 ...

  6. 量化选股策略到是量子好还基面子

    转 量化选股策略--到底是价量因子好还是基本面因子好? 在今年A股的漫漫熊途中,量化对冲策略提供了一缕光亮. 量化对冲靠跑赢指数赚钱,收益与大盘涨跌无关.无论牛熊,只要股票组合比大盘跑得好,量化对冲策 ...

  7. 用python完成选股策略_python量化选股策略_量化股市

    金字塔决策交易系统 等安装结束后自己找缺少的对应的软件安装.2.软件本体开始安装3.阅读勾选软件安装协议4.选择软件安装目录5.准备开始安装6.等待以后就可以看到金字塔决策交易系统安装完成!登陆软件后 ...

  8. python量化选股策略 源码_常见的十大量化投资策略(附源码)

    量化投资策略是利用量化的方法,进行金融市场的分析.判断和交易的策略.算法的总称.著名的量化投资策略有以下10种(注:策略源码模板不能直接用于实盘交易,仅供探讨交流) 01.海龟交易策略 海龟交易策略是 ...

  9. python量化选股策略 源码及论文_常见的十大量化投资策略(附源码)

    量化投资策略是利用量化的方法,进行金融市场的分析.判断和交易的策略.算法的总称.著名的量化投资策略有以下10种(注:策略源码模板不能直接用于实盘交易,仅供探讨交流) 01.海龟交易策略 海龟交易策略是 ...

最新文章

  1. 清华校友陈怡然、杨越组队进军AI芯片市场,成立苹芯科技,最新Pre-A轮斩获近千万美元...
  2. Java IO模型--BIO、NIO Single Thread、NIO Reactor、AIO单线程及多线程AIO
  3. Scikit-learn 数据预处理之归一化MinMaxScaler
  4. Swift-开发 # 1.2版本迁移
  5. flex 3名域namespace的使用有的也称命名空间
  6. DDD 领域驱动设计:贫血模型、充血模型的深入解读
  7. jboss maven_使用Maven配置JBoss / Wildfly数据源
  8. 【HDU - 1847】Good Luck in CET-4 Everybody! (巴什博奕,PN图或sg函数)
  9. Scrapy 下载器 中间件(Downloader Middleware)
  10. 基于BFS+DFS+CoordinateDescent的motion planning设计思路
  11. jqgrid for asp.net 遍历所有列rowObject时不用输入编号
  12. 程序员梗_那些程序员才懂的梗,看到第10张笑喷了,网友:太真实了
  13. C/C++面试宝典2022版(最新版)
  14. 【显卡天梯图】2014年最新显卡天梯图 – 【迄今最全系列显卡】
  15. 使用bat一键修改ip地址(包括静态、动态ip)
  16. 什么是动态与静态IP
  17. 寻找心灵深处的菩提树
  18. 用unity制作简单的AR,亲测有效
  19. 编译make px4_fmu-v2_default upload时,报错ERROR Board can accept larger flash images (2080768 bytes)
  20. Android 面试真题收录~

热门文章

  1. GROUP BY 条件查询最新时间记录
  2. 2022年4月13日记
  3. [渝粤教育] 中国地质大学 生产与作业管理 复习题 (2)
  4. python 录音_python实现录音功能(可随时停止录音)
  5. 一般哪些原因会造成硬盘损坏呢
  6. 浅谈struts2漏洞(检测工具及S2-052漏洞及漏洞平台的搭建复现)
  7. linux环境下查看进程,Linux下查看进程(程序)启动时的环境变量
  8. 虚拟机安装Linux(ubuntu)
  9. linux mmc驱动框架,Linux mmc framework2:基本组件之mmc
  10. Virtual host / experienced an error on node rabbit@ xx and may be inaccessible Totals问题的解决