圖片來源:Shutterstock
想要用Python做金融小工具
第一個麻煩就是要找各種資料來源
接著網路爬蟲抓資料
爬完還要面對不同的檔案格式做資料處理
無形中浪費了不少時間成本......
如果你也有同感的話~
不妨試試看用 數據貓頭鷹 的API抓取金融數據吧
數據貓頭鷹是一個提供各種財經指標的數據平台
資料涵括台股報價、技術指標、籌碼資訊、國際股市、常用指數及衍生性金融商品
裏頭還有API的使用說明及範例
只要把範例內的修改帳號ID、密鑰與商品代號
就可以輕鬆取得想要的資料
(除了用API抓資料,也可以直接下載EXCEL檔啦~)
這次就利用Python串接數據貓頭鷹的API
取得免費商品區的台股每日收盤行情報價
來實作K線的互動式圖表
在撰寫程式碼前,需要先準備好三個東西:
1. 數據貓頭鷹帳號的 APP ID
2. 數據貓頭鷹的 應用程式密鑰
3.想要取得的資料商品使用權限與代號
前兩項只要申請帳號並登入之後
進入【我的帳戶】頁面就可以看到了
而第三個商品代號就在資料商品的頁面
至於權限因為待會要取得的資料是免費商品 (連結)
只要點一下右上角的「免費試用」即可
取得APP ID、密鑰與商品使用權限後
就可以開始撰寫Python來抓取資料了
以下程式碼分區塊概述,詳細可以參考這篇教學
如果對Python沒那麼熟悉的話,修改橘色文字的部分即可
一、匯入須使用到的套件(requests、json、pandas、pyecharts)
import requests
import json
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Kline
二、帳號設定(輸入你的APPID與應用程式密鑰)
appid = "xxx" #APPID
appsecret = "xxx" #應用程式密鑰
三、設定連接
token_url = "https://owl.cmoney.com.tw/OwlApi/auth"
token_params = "appId=" + appid + "&appSecret=" + appsecret
token_headers = {'content-type': "application/x-www-form-urlencoded"}
四、連線取得token驗證
token_res = requests.request("POST", token_url, headers=token_headers, data=token_params)
if (token_res.status_code == 200):
token_data = json.loads(token_res.text)
token = token_data.get("token")
print ("token ok>>>" + token)
else:
print("取得token連線錯誤!" + str(token_res.status_code))
五、自定義取資料的函數呼叫API,方便隨時取用
def get_data(pid, sid, days):
data_url = "https://owl.cmoney.com.tw/OwlApi/api/v2/json/"
data_headers = {"authorization": "Bearer " + token}
data_res = requests.request("GET", data_url + pid + "/" + sid + "/" + days, headers = data_headers)
if (data_res.status_code == 200):
data = json.loads(data_res.text)
filter = pd.DataFrame(data.get("Data"), columns = data.get("Title"))
return filter
else:
print("取得資料連線錯誤!" + str(data_res.status_code))
六、取資料
pid = "商品代號" (要取用的商品代號,這次需要個股日收盤行情,FAA-14813a)
sid = "股票代號"
days = "資料期數"(個股日收盤行情的資料期數一期是一個交易日,設定240大約一年)
df = get_data(pid = "FAA-14813a", sid = "2330", days = "240")
df = df.iloc[::-1]
df.reset_index(drop=True, inplace=True)
df.to_csv("個股日收盤行情.csv", index = False)
七、資料處理
後面要利用pyechart套件做圖
但pyechart畫K線要求輸入的資料格式為
[[第1根K棒的開,收,低,高],[第2根K棒的開,收,低,高],[開,收,低,高]]...]
且x軸也須為list [日期,日期,日期,...]
KBar = []
Date = []
for i in range(0, df.shape[0]):
day = df["日期"][i]
price = [df["開盤價"][i], df["收盤價"][i], df["最低價"][i], df["最高價"][i]]
Date.append(day)
KBar.append(price)
八、產生互動式圖表
最後利用pyechart這個套件做圖
它可以製作各種互動式圖表並輸出成html檔
kline = Kline()
kline.add_xaxis(xaxis_data = Date)
kline.add_yaxis(series_name = "股價",
y_axis = KBar,
itemstyle_opts = opts.ItemStyleOpts(color = "#C23531",
color0 = "#00da3c",
border_color = "#C23531",
border_color0 = "#00da3c"),
)
kline.set_global_opts(title_opts = opts.TitleOpts(title = "台積電(2330)"),
xaxis_opts = opts.AxisOpts(is_scale = True),
yaxis_opts = opts.AxisOpts(is_scale = True, splitarea_opts = opts.SplitAreaOpts(is_show = True, areastyle_opts = opts.AreaStyleOpts(opacity=1))),
datazoom_opts = [opts.DataZoomOpts(type_ = "inside"),
opts.DataZoomOpts(is_show=True,
type_="slider",),
],
tooltip_opts = opts.TooltipOpts(trigger="axis",
axis_pointer_type="cross",
background_color="rgba(245, 245, 245, 0.8)",
border_width=1,
border_color="#ccc",
textstyle_opts=opts.TextStyleOpts(color="#000"),
),
)
kline.render(r"台積電(2330).html")
完成~執行完程式後
會產生一個html檔,點擊打開就可以看到成果了
👉追蹤數據貓頭鷹臉書粉絲團,就能隨時看到貓頭鷹分享各種生活數據、財經指標喔!
👉貓頭鷹的主頁,裏頭有豐富的財經數據,要玩FinTech那就一定要來挖個寶: