日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

读取csv绘制直方图_[python]用tushare接口绘制Bollinger Bands

發布時間:2024/9/3 python 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读取csv绘制直方图_[python]用tushare接口绘制Bollinger Bands 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

股票的各個指標中,Bollinger Bands(一般簡稱為BOL指數)簡單暴力,卻又有著統計學內涵,實在是深得我心。Bollinger Bands一般有三條線,中間一條就是20日均線MA,而上線和下線分別是MA加減2個20日標準差[1]。

是什么啊同學們,四舍五入就是 啊,正態曲線的95%區間啊,統計學啊!

當然了,如果你拉隨便一個股票的歷史股價繪制一個直方圖,你會發現其實這些股價并不符合正態分布,所以Bollinger Bands多少在理論上有點站不住腳。不過呢,如果你去統計一下,基本上價格波動95%的時候都在Bands內,5%都在Bands外。所以究竟如何還是自己思考吧。

tushare是很好用的一個國內的交易數據api,獲取數據流程簡單,而且和pandas無縫連接,所以很值得試試?,F在有專業版,可以免費用,初始的積分可以做一些簡單操作,以日線數據為例,基礎積分每分鐘內最多調取500次,每次5000條數據,相當于23年歷史,所以基本上夠用的了。但是tushare也還有很多很好的數據需要更高的積分才能調取,付費50元加入高級用戶群可以買500積分,然后也基本夠用的了。


整個工作流程分以下幾個部分:

  • 配置環境
  • 讀取數據
  • 計算MA與std,繪圖
  • 配置環境

    首先肯定要安裝tushare

    pip install tushare --upgrade

    然后在程序開頭載入tushare以及pandas,matplotlib

    import pandas as pd import tushare as ts import snoop import matplotlib.pyplot as plt import os from datetime import date

    snoop是用來查錯,不是必須

    接下來配置tushare接口:

    from yaml import full_load with open('config.yaml') as config_file:_config_yaml = full_load(config_file)TOKEN = _config_yaml['token']pro = ts.pro_api(TOKEN)

    tushare專業版需要提供token訪問api,這個api可以在個人主頁下面的接口TOKEN中看到。我是將token寫在了一個config.yaml文件中,這樣只需要將這個文件在.gitignore里面聲明一下,自己的token信息就不會被不小心寫進git庫,甚至在網上公開了。ts.pro_api將建立一個api連接,只要提供TOKEN就行了

    讀取數據

    tushare的日線數據調取代碼如下:

    df = pro.daily(ts_code='000001.SZ,600000.SH', start_date='20180701', end_date='20180718')

    主要是提供ts_code, start_date和end_date三個數據。從例程可以看到start_date和end_date兩個參數的日期格式是%Y%m%d的形式,所以可以用date.today().strftime("%Y%m%d")將今天的日期轉化成符合函數參數需求的格式

    我想將股票從上市開始到現在的全部日線信息都下載下來。如前所述,end_date設置成當前日期只需要對date.today()進行格式轉化就好,而 start_date和ts_code 則需要根據具體股票進行調整。下面以??低?002352)為例展示一下如何從股票代碼(symbol)獲取ts_code和start_date。

    使用tushare的stock_basic接口可以獲得各個股票的基本信息,所以可以先用這個接口抓取一次股票基本信息,然后保存在本地,這樣就不需要每次調試都走線上了(index=False避免存儲的時候將自動生成的數值index也寫入csv):

    data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date') data.to_csv('stock_basic_info.csv',index=False)

    上面的代碼運行后,下次要用數據信息的時候只需要直接載入就好,不過要注意的一點是,pandas讀取csv的時候會做一些數據類型轉化,所以symbol里面像平安銀行(000001)這種就會變成1,為了避免這種情況要在讀取的時候設置好 dtype 。

    df_stock_basic = pd.read_csv(stock_basic_path, dtype={'symbol':str,'list_date':str}).set_index('symbol')

    symbol一列保存的是股票代碼,用這個作為index,后續就能夠使用loc命令查詢了,比如海康威視的002352

    symbol = '002352' ts_code = df_stock_basic.loc[symbol,'ts_code'] list_date = df_stock_basic.loc[symbol,'ts_code']

    有了上面的ts_code和list_date,獲取日線數據就很簡單了

    df_daily:pd.DataFrame = pro.daily(ts_code=ts_code,start_date = list_date,end_date= date.today().strftime("%Y%m%d"))

    df_daily:pd.DataFrame里面的冒號是為了聲明df_daily的類型,明確類型以后在pycharm才能更好的幫你做代碼補全。

    計算MA,std與繪圖

    這里的時移均線主要靠的是pandas的rolling實現。但是在開始計算以前,首先我們要對下載下來的df_daily做一些處理,按照常規的時序分析流程:

  • 將trade_date設置為index, 并且用pandas的to_datetime轉成timestamp
  • df_daily.index = pd.to_datetime(df_daily['trade_date'])

    2. 將數據框升序排列(原本數據是按照從新到舊的順序排列的,在分析的時候這會造成問題)

    df_daily = df_daily.sort_index()

    然后就可以計算MA以及std了

    rolling_days = 20 std_multiplier = 2 df_daily['MA'] = df_daily['close'].rolling(rolling_days).mean() df_daily['std'] = df_daily['close'].rolling(rolling_days).std() df_daily['upper_bound'] = df_daily['MA']+df_daily['std']*std_multiplier df_daily['lower_bound'] = df_daily['MA']-df_daily['std']*std_multiplier

    繪圖就只要用

    df_daily[['MA','close','upper_bound','lower_bound']].plot(grid=True) plt.show()

    當然了,上面只是放了收盤價,時移均線以及Bollinger Band上下界,還可以進一步放蠟燭圖一類的。

    這些代碼可能最好做成一個類,然后通過調用方法的形式組織代碼才比較好。

    參考

  • ^20日均線和2個標準差主要是約定俗成,當然也可以將均線時間增加一些,酌情調整吧
  • 總結

    以上是生活随笔為你收集整理的读取csv绘制直方图_[python]用tushare接口绘制Bollinger Bands的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。