如何从tushare上获取股票行情数据存入postgresql

刚发现 tushare.pro 上可以免费获取股票行情数据

一、步骤:

  1. 登录 tushare.pro, 注册账户,完善个人信息,得到120积分(可有免费获取股票行情数据的权限);
  2. 获取接口TOKEN,保存好,程序中会用到,
    方法参考: https://tushare.pro/document/1?doc_id=39;
  3. 开发代码,获取数据并写入数据库(这里使用的postgres数据库)。

二、核心代码功能:

1. 建表

DROP TABLE IF EXISTS pro.daily;
CREATE TABLE pro.daily(
     ts_code varchar(255)
   , trade_date varchar(255)
   , open varchar(255)
   , high varchar(255)
   , low varchar(255)
   , close varchar(255)
   , pre_close varchar(255)
   , change varchar(255)
   , pct_chg varchar(255)
   , vol varchar(255)
   , amount varchar(255)
);
-- 注:数值字段使用 varchar 类型,没有用 float8,是因为取下的数据可能不非数值的,写时会报错;
--        所以先取下来,以后再处理!
COMMENT ON table pro.daily IS '日线行情: 交易日每天15点~16点之间。本接口是未复权行情,停牌期间不提供数据';
COMMENT ON COLUMN pro.daily.ts_code IS '股票代码';
COMMENT ON COLUMN pro.daily.trade_date IS '交易日期';
COMMENT ON COLUMN pro.daily.open IS '开盘价';
COMMENT ON COLUMN pro.daily.high IS '最高价';
COMMENT ON COLUMN pro.daily.low IS '最低价';
COMMENT ON COLUMN pro.daily.close IS '收盘价';
COMMENT ON COLUMN pro.daily.pre_close IS '昨收价';
COMMENT ON COLUMN pro.daily.change IS '涨跌额';
COMMENT ON COLUMN pro.daily.pct_chg IS '涨跌幅 (未复权,如果是复权请用 通用行情接口 )';
COMMENT ON COLUMN pro.daily.vol IS '成交量 (手)';
COMMENT ON COLUMN pro.daily.amount IS '成交额 (千元)';

ALTER TABLE pro.daily ADD CONSTRAINT pk_daily UNIQUE (ts_code, trade_date);
CREATE INDEX idx_daily_trade_date ON pro.daily (trade_date);

2. 取数

python 安装 tushare 包:

pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple

python 代码

# tushare 初始化
import tushare as ts, time, datetime
pro = ts.pro_api('your token')
#print(ts.__version__)

# postgres 初始化
import psycopg2
from io import StringIO
conn = psycopg2.connect(database="tushare", user="postgres", password="postgres"
                        , host="127.0.0.1", port="54321")
cur = conn.cursor()

# 取交易日历
tradeCal = pro.trade_cal(exchange=''
                   , start_date='19900101'
                  , end_date=datetime.datetime.now().strftime('%Y%m%d') # 取系统当前日期
                   , fields='cal_date'
                   , is_open='1'
                  )
#print(tradeCal)

# 一次写一天的数据(测试了多种方法,这是最快的写库方法)
def copy4strIo2db(df,tableName):
    output = StringIO()
    df.to_csv(output, sep='\t', index=False, header=False)
    cur.copy_from(StringIO(output.getvalue()), tableName)
    conn.commit()

#取日线行情
for tradeDate in tradeCal.cal_date:
    #print(tradeDate)
    daily = pro.daily(trade_date=tradeDate)
    copy4strIo2db(daily,'pro.daily')
    time.sleep(0.12) # 60秒访问500次,每次0.12秒

# 关闭数据库
cur.close()
conn.close()

祝成功!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值