三大法人是台灣獨有的資料,每一檔股票每天都會公佈,非常實用!
之前也有介紹利用「投信買賣超」來交易的策略,相信如有看到並使用過的人,就知道它的威力!
三大法人買賣超還有很多種用法,我們之後再一一說明,
今天最主要就是先獲取到「三大法人」的資料!之後呢,我們會利用這個財經資料
來建立一個投信買賣超的簡單策略。
import requests
from io import StringIO
import pandas as pd
date = '20180102'
r = requests.get('http://www.tse.com.tw/fund/T86?response=csv&date='+date+'&selectType=ALLBUT0999')#
df = pd.read_csv(StringIO(r.text), header=1).dropna(how='all', axis=1).dropna(how='any')
df
什麼!這樣就爬好了~!對呀~那請問怎麼把他們都存在資料庫中呢?
假如您有上課程的話,可以結合我們寫好的GUI外掛可以用:
# finlab 軟體包要上課才有喔~
from finlab.crawler import widget, date_range
# 讀入一些package
import sqlite3
import os
import requests
from io import StringIO
import pandas as pd
# 爬取資料
def crawl_legal_person(date):
# 將時間物件變成字串:'20180102'
datestr = date.strftime('%Y%m%d')
# 下載三大法人資料
try:
r = requests.get('http://www.tse.com.tw/fund/T86?response=csv&date='+datestr+'&selectType=ALLBUT0999')#
except:
return None
# 製作三大法人的DataFrame
try:
df = pd.read_csv(StringIO(r.text), header=1).dropna(how='all', axis=1).dropna(how='any')
except:
return None
# 微調整(為了配合資料庫的格式)
# 刪除逗點
df = df.astype(str).apply(lambda s: s.str.replace(',',''))
# 刪除「證券代號」中的「"」和「=」
df['stock_id'] = df['證券代號'].str.replace('=','').str.replace('"','')
# 刪除「證券代號」這個欄位
df = df.drop(['證券代號'], axis=1)
# 設定index
df['date'] = date
df = df.set_index(['stock_id', 'date'])
# 將dataframe的型態轉成數字
return df.apply(lambda s: pd.to_numeric(s, errors='coerce')).dropna(how='all', axis=1)
# 打開資料庫
conn = sqlite3.connect(os.path.join('data', 'data.db'))
# 開啟GUI介面
widget(conn, 'legal_person', crawl_legal_person, date_range)
才多加幾行,我們就將GUI的插件給寫好了~
可以調整時間範圍,來下載每天的三大法人買賣超,並且存在資料庫裡面~
下一次我們就來實做三大法人的策略囉!敬請期待~!