tushare數據實現股票溫度計算

1.tushare

一直用tushare獲取數據,數據準確,獲取方便,感謝米哥。

2.股票溫度

股票價值投資 (Value Investing)一種常見的投資方式,專門尋找價格低估的證券。價值投資常用的參數就是pe,pb。可以用於個股,也可以用於板塊,指數。本文用個股簡單的舉個例子而已。

2.1計算方法

f(x,μ,σ)=12πe(xμ)22σ100=F(Pe)100 f(x,\mu,\sigma) = \frac{1}{\sqrt{2\pi}}e^-\frac{(x-\mu)^2}{2\sigma}*100 = F(Pe) * 100

2.2.公式解釋

假設Pe是服從正態分佈的,則F(Pe)爲Pe在此正態分佈中縱座標的值,取值範圍是[0,1],則通過F(Pe)就可以計算Pe值在樣本數據中是高分位還是低分位了。

3.實現

3.1.通過tushare獲取數據

import tushare as ts
import datetime
ts.set_token(TOKEN)  # TOKEN爲個人申請值
pro = ts.pro_api()
end_date = datetime.date.today().strftime('%Y%m%d')
start_date = (datetime.date.today() - datetime.timedelta(days=365 * 10)).strftime('%Y%m%d')  # 獲取十年期間的數據
df = pro.daily_basic(ts_code='000001.sz', start_date=start_date, end_date=end_date, fields='ts_code,trade_date,close, turnover_rate,volume_ratio,pe,pe_ttm,pb')
print(df.head(5))

運行結果

3.2.計算溫度

import numpy as np
import pandas as pd

def norm_dist_func(x, _mean, _std):
    result = norm_dist_func_s(x, _mean, _std)
    return round(result * 100.0, 2)


def norm_dist_func_s(x, _mean, _std):
    oor2pi = 1 / np.sqrt(2.0 * np.pi)
    x2 = (x - _mean) / _std
    if x2 == 0:
        res = 0.5
    else:
        t = 1 / (1.0 + 0.2316419 * np.abs(x2))
        t = t * oor2pi * np.exp(-0.5 * x2 * x2) * (0.31938153 + t * (-0.356563782 + t * (1.781477937 + t * (-1.821255978 + t * 1.330274429))))
        if x2 > 0:
            res = 1.0 - t
        else:
            res = t
    return res
    
pe_std = np.std(df['pe'], ddof=1)  # pe的標準差
pe_mean = np.mean(df['pe'])  # pe的平均值
pb_std = np.std(df['pb'], ddof=1)  # pb的標準差
pb_mean = np.mean(df['pb'])  # pb的平均值

df['pe_temperature'] = df['pe'].apply(norm_dist_func, _mean=pe_mean, _std=pe_std)  # 計算pe溫度
df['pb_temperature'] = df['pb'].apply(norm_dist_func, _mean=pb_mean, _std=pb_std)  # 計算pb溫度
df['temperature'] = df['pe_temperature'] * 0.5 + df['pb_temperature'] * 0.5

3.3.溫度和收盤價展示

可以看出,溫度比較低的時候,上漲概率較大。
溫度與收盤價

3.4. 關於溫度的統計分析

dic_temperature_upper_counter = {}  # 特定溫度下的上漲次數
dic_temperature_upper_profit = {}  # 特定溫度下的上漲次數
dic_temperature_all = {}  # 特定溫度下的出現次數
for j in range(df.shape[0]):
    temperature_level = str(int(df.iloc[j]['temperature_level']))
    if temperature_level not in dic_temperature_upper_counter.keys():
        dic_temperature_upper_counter[temperature_level] = 0
        dic_temperature_all[temperature_level] = 0
        dic_temperature_upper_profit[temperature_level] = 0
    if df.iloc[j]['profit'] > 0:
        dic_temperature_upper_counter[temperature_level] = dic_temperature_upper_counter[temperature_level] + 1
    dic_temperature_all[temperature_level] = dic_temperature_all[temperature_level] + 1
for k, v in dic_temperature_upper_counter.items():
    dic_temperature_upper_profit[k] = round(v / dic_temperature_all[k] * 100, 2)
    print('溫度{0}出現次數:{1}, 上漲概率{2}%'.format(k, dic_temperature_upper_counter[k], dic_temperature_upper_profit[k]))

sorted_dic_counter = sorted(dic_temperature_upper_profit.items(), key=lambda d: d[1], reverse=True)
print('股票:{0}最適宜溫度是{1},上漲概率是{2}%'.format('000001.sz', sorted_dic_counter[0][0], sorted_dic_counter[0][1]))

溫度分析
從統計數據中可以看出,並不是溫度越低越好,每個股票都有自己的最適宜溫度

4.結語

股票分析有很多方法,本文只是一個比較簡單的方法來進行量化,再次感謝米哥提供如此好的數據源。

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