tushare復權數據使用

一直使用tushare數據,感謝米哥的提供,由於一些計算需要用復權數據,最近使用中發現了一些問題,說明如下。

1. tushare數據接口的問題

tushare日線數據有兩個接口,一個是日線行情接口daily,一個是復權行情pro_bar。

# 日線行情接口daily
pro = ts.pro_api()
df = pro.daily(ts_code='000001.SZ')

# 日線復權行情pro_bar
qfq_df = ts.pro_bar(ts_code='000001.SZ', adj='qfq')

關於接口,說明的很詳細,基礎積分每分鐘內最多調取500次,每次5000條數據,相當於23年曆史。現在問題來了,如果這個股票上市時間超過了23年,那麼前復權數據是什麼樣子的呢?測試代碼如下。

	ts.set_token(TOKEN)
    pro = ts.pro_api()
    df_qfq = ts.pro_bar(ts_code='000001.SZ', start_date='19910403', end_date='19981030', adj='qfq')  # 前復權接口
    df_daily_now = pro.daily(ts_code='000001.SZ', start_date='19910403', end_date='19981030')  # 日線接口

    df_qfq_close_list = df_qfq['close'].values.tolist()
    df_daily_close_list = df_daily_now['close'].values.tolist()

    is_equal = df_qfq_close_list[:20] == df_daily_close_list[:20]
    print(is_equal)

以上代碼可以看到,復權接口和日線接口返回的收盤價一樣,那麼問題來了,從1998年到現在這個時間段,其實已經復權N次了,那時候的前復權數據,應該比不復權的數據,價格低很多。

2.改進方法

因爲有如上的問題,所以需要我對代碼進行改進。可以通過復權因子接口adj_factor來獲取復權值,然後自己計算前復權數據。前復權的算法也很簡單:當日收盤價 * 當日復權因子 / 最新復權因子

	'''
    獲取000001.SZ的所有歷史數據
    '''
    df_daily_now = pro.daily(ts_code='000001.SZ')
    end_date = df_daily_now.iloc[-1]['trade_date']
    df_daily_before = pro.daily(ts_code='000001.SZ', start_date='19910403', end_date=end_date)  # 由於接口返回數據的限制,分兩次獲取股票的歷史數據
    df_daily_before_remove_one = df_daily_before[1:]
    df_daily = pd.merge(df_daily_now, df_daily_before_remove_one, how='outer')

    df_adj = pro.adj_factor(ts_code='000001.SZ', trade_date='')[['trade_date', 'adj_factor']]
    df_daily_with_adj = pd.merge(df_daily, df_adj, on='trade_date')
    now_adj_factor = df_adj.iloc[0]['adj_factor']  # 最新復權因子
    df_daily_with_adj['close_qfq'] = df_daily_with_adj['close'] * df_daily_with_adj['adj_factor'] / now_adj_factor  # 前復權 當日收盤價 × 當日復權因子 / 最新復權因子

上述代碼close_qfq,就是對收盤價計算的前復權數據,通過這個方法,可以計算開盤價,最高價,最低價。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章