金融量化ushare模塊

1、介紹

Tushare是一個免費、開源的python財經數據接口包。主要實現對股票等金融數據從數據採集清洗加工 到 數據存儲的過程,可以爲金融分析人員提供快速、整潔、和多樣的便於分析的數據,爲他們在數據獲取方面極大地減輕工做量,使他們更加專一於策略和模型的研究與實現上。考慮到Python pandas包在金融量化分析中體現出的優點,Tushare返回的絕大部分的數據格式都是pandas DataFrame類型,很是便於用pandas/NumPy/Matplotlib進行數據分析和可視化。固然,若是您習慣了用Excel或者關係型數據庫作分析,您也能夠經過Tushare的數據存儲功能,將數據所有保存到本地後進行分析。應一些用戶的請求,從0.2.5版本開始,Tushare同時兼容Python 2.x和Python 3.x,對部分代碼進行了重構,並優化了一些算法,確保數據獲取的高效和穩定。python

 

須要強調的是,TuShare庫裏不單單有股票數據,而是一個綜合的財經庫。只是由於股票數據數據量比較大,特別鍛鍊數據分析能力,因此才選擇股票數據練手。其他的數據也是頗有意思的,好比全國電影票房排名算法

 

使用前提數據庫

  • 安裝Python
  • 安裝pandas
  • lxml也是必須的,正常狀況下安裝了Anaconda後無須單獨安裝,若是沒有可執行:pip install lxml

建議安裝Anaconda(http://www.continuum.io/downloads),一次安裝包括了Python環境和所有依賴包,減小問題出現的概率。網絡

 

下載安裝
函數

 

版本升級
post

  • pip install tushare --upgrade

查看當前版本的方法:優化

import tushare print(tushare.__version__)

 

2、Tushare的應用

一、獲取股票行情的函數

咱們主要仍是應該掌握如何用tushare獲取股票行情數據,使用的是ts.get_hist_data()函數或者ts.get_k_data()函數spa

參數:code

複製代碼
code:股票代碼,即6位數字代碼,或者指數代碼(sh=上證指數 sz=深圳成指 hs300=滬深300指數 sz50=上證50 zxb=中小板 cyb=創業板) start:開始日期,格式YYYY-MM-DD end:結束日期,格式YYYY-MM-DD ktype:數據類型,D=日k線 W=周 M=月 5=5分鐘 15=15分鐘 30=30分鐘 60=60分鐘,默認爲D retry_count:當網絡異常後重試次數,默認爲3 pause:重試時停頓秒數,默認爲0 
返回值說明: date:日期 open:開盤價 high:最高價 close:收盤價 low:最低價 volume:成交量 price_change:價格變更 p_change:漲跌幅 ma5:5日均價 ma10:10日均價 ma20:20日均價 v_ma5:5日均量 v_ma10:10日均量 v_ma20:20日均量 turnover:換手率[注:指數無此項]
複製代碼

 

二、案例

複製代碼
import pandas as pd import numpy as np from pandas import DataFrame,Series import tushare as ts # 獲取k線數據,加載至DataFrame中
df = ts.get_k_data('600519',start='2000-01-01')  # 茅臺
df.head() # 將從Tushare中獲取的數據存儲至本地
df.to_csv('./maotai.csv') # 將原數據中的時間做爲行索引,並將字符串類型的時間序列化成時間對象類型 # index_col參數:把某一列col做爲行索引index # parse_dates:把字符串類型的時間序列化成時間對象類型
df = pd.read_csv('./maotai.csv',index_col='date',parse_dates=['date']) df.drop(labels='Unnamed: 0',axis=1,inplace=True) df.head() # 分析1:輸出該股票全部收盤比開盤上漲3%以上的日期 # 獲取知足條件的行索引
df.loc[(df['close'] - df['open'])/df['open'] > 0.03].index # 分析2:輸出該股票全部開盤比前日收盤跌幅超過2%的日期
df.loc[(df['open'] - df['close'].shift(1)) / df['close'].shift(1) <= -0.02].index # 分析3:假如我從2010年1月1日開始,每個月第一個交易日買入1手股票,每一年最後一個交易日賣出全部股票,到今天爲止,個人收益如何
price_last = df['open'][-1] df = df['2010-01':'2019-01'] # 剔除首尾無用的數據 # Pandas提供了resample函數用便捷的方式對時間序列進行重採樣,根據時間粒度的變大或者變小分爲降採樣和升採樣:
df_monthly = df.resample("M").first()  # 獲取每個月第一個交易日對應的行數據
df_yearly = df.resample("Y").last()[:-1] # 獲取每一年第最後一個交易日對應的行數據並去除最後一年
cost_money = 0 hold = 0 # 每一年持有的股票
for year in range(2010, 2020): cost_money -= df_monthly.loc[str(year)]['open'].sum()*100 hold += len(df_monthly[str(year)]['open']) * 100
    if year != 2019: cost_money += df_yearly[str(year)]['open'][0] * hold hold = 0 # 每一年持有的股票
cost_money += hold * price_last print(cost_money)
複製代碼
相關文章
相關標籤/搜索