Python

最近學到可由 Yahoo! stock API 讀取台灣上市櫃公司股價的資料。我想可以結合 Tkinter 程式庫做出一個圖形化的應用工具程式。

  
在 Python 語言中,可用一行程式碼就讀到台灣上市櫃公司的股價資料:
df = pdr.data.DataReader()
這裡的 pdr 是 pandas_datareader 的型態,可以用這樣的語法來使用:

import pandas_datareader as pdr

pdr.data.DataReader()
最少使用3個參數就可以使用了
第1個:股票代號。台灣上市櫃公司 都是 4 個數字來呈現。比如台積電就是 2330;鴻海就是 2317。
第2個:直接填 'yahoo' 就好。目前好像也只有 Yahoo! stock 可以提供 Python DataFrame 型態的資料
第3個:資料開始的時間。比如'2018-01-01' 就是由 2018 年1 月 1 日開始提供股價資料。

第4個資料是:資料結束的時間。如果不填, Yahoo! stock 就直接以目前最新的日期當作結束的時間。

[問題處理與解決]
有了這麼好的功能,一般人都想要嘗試看看。但是,現實的世界總有些不如人意的地方。比方說,有時候會遇到這種狀況:

 

又有 "RemoteDataError",又有 "KeyError"。一般的初學者可能都會害怕。

其實,這些只是告訴我們:讀不到這家公司的資料。所以,我們也只能告訴自己:某些公司的資料讀不到!

在電腦程式讀不到可以接受;但一般使用者呢?看到這種一大堆的資料是不是會嚇倒?有沒有什麼方法可以很完整地、優雅地告訴使用者:這家公司的資料讀不到,請換成其他公司就好了!後來我想到語言裡有一種例外處理的程式結構:

try:
  df = pdr.data.DataReader()
exept:
  # 資料讀取錯誤了

這段程式碼是說:先讀取公司資料。萬一讀取不到,程式就執行 # 後面的程式。好的,目前可以讓使用者在錯誤發生時不會看到這些複雜文字。但錯誤發生時要如何提醒使用者呢?

訊息對話方塊/對話盒(MessageBox)
在目前的圖形處理介面中,遇到錯誤都會顯示訊息對話方塊/對話盒(MessageBox)以提醒使用者錯誤發生了。在 Python Tkinter 程式庫中也有 訊息對話方塊/對話盒(MessageBox):messagebox.showerror(),用這行就可以引用了:
from tkinter import messagebox

[黃金交叉/Gold cross]
黃金交叉指的是一種股價長期來看都呈現上漲的局勢。從多條移動平均線來看是短天期的移動平均線高於長天期的移動平均線。如同左邊的股價圖形。那在數字裡線要如何判斷這種型態呢?我們可以用最後一天的收盤價減去短天期的收盤價,在用這個值去比最後一天的收盤價跟長天期的收盤價。

[儲存內容到 CSV 檔案]
在 Python 語言中,可用一行程式碼就可以將讀到台灣上市櫃公司的股價資料儲存為 CSV 檔案:
df.to_csv('檔案名稱.csv')
跟一般的程式語言比起來, Python 語言方便很多。也許是因支援的程式庫比較多,也越來越好用!

文章標籤
全站熱搜
創作者介紹
創作者 小木屋 的頭像
小木屋

小木屋

小木屋 發表在 痞客邦 留言(0) 人氣(121)