using tushare to create self-finance-database

import tushare as ts
import pandas as pd
from datetime import datetime
from time import sleep
pro = ts.pro_api('your token')
data_dir = 'data/'

获取所需要的交易开盘时间

def get_trade_days(start = '20170101',end = '20171231'):
    trade_days_data = pro.query('trade_cal', start_date= start, end_date=end)
    return trade_days_data[trade_days_data.is_open==1].cal_date.tolist()

open_days = get_trade_days(start = '20190101',end = '20191231')
# 或者更新到今天
today_time = datetime.now().strftime('%Y%m%d')
print(today_time)


# 已经有的数据的最大一天
last_date = df.index.max()
last_date.strftime('%Y%m%d')

常用的数据

filed_names = "ts_code,trade_date,close,turnover_rate,turnover_rate_f,volume_ratio,pe,pe_ttm,pb,ps,ps_ttm,total_share,float_share,free_share,total_mv,circ_mv"
data = list()
j = 0
for day in open_days:
    daily_data = pro.daily_basic(ts_code='', trade_date= day , fields = filed_names)
    sleep(1)
    j+=1
    print(daily_data.shape,j,end = "r",flush = True)
    data_need.append(daily_data)

数据合并

data_update = pd.concat(data,axis=0)

新旧data 合并

old_data = pd.read_parquet(data_dir+'data2019.gzip',compression='gzip')
new_data = old_data.apped(data_update)
new_data.to_parquet(data_dir+'data2019.gzip',compression='gzip')

对于更多的数据

#去掉close
filed_names = "ts_code,trade_date,turnover_rate,turnover_rate_f,volume_ratio,pe,pe_ttm,pb,ps,ps_ttm,total_share,float_share,free_share,total_mv,circ_mv"
daily_data = pro.daily_basic(trade_date= '20190104' , fields = filed_names)

daily_data = pro.daily_basic(trade_date= '20190104' , fields = filed_names)
daily_price = pro.daily(trade_date='20190104') # open high low close
daily_data_all = daily_price.merge(daily_data,on=['ts_code','trade_date'])

用一个函数打包

from time import sleep
def get_daily_data(day):
    filed_names = "ts_code,trade_date,turnover_rate,turnover_rate_f,volume_ratio,pe,pe_ttm,pb,ps,ps_ttm,total_share,float_share,free_share,total_mv,circ_mv"
    daily_data = pro.daily_basic(trade_date= day , fields = filed_names)
    sleep(1)
    daily_data = pro.daily_basic(trade_date= day , fields = filed_names)
    daily_price = pro.daily(trade_date='20190104') # open high low close
    daily_data_all = daily_price.merge(daily_data,on=['ts_code','trade_date'])
    return daily_data_all