finlab.data
全域變數
finlab.data 會自行判斷是否使用本地端資料,若要強制使用雲端資料,可以設定以下變數:
若要強制使用本地端資料,可以設定以下變數:
讀取資料時,可以設定以下變數,來限制讀取的資料範圍:
finlab.data.get
下載歷史資料
請至歷史資料目錄 來獲得所有歷史資料的名稱,即可使用此函式來獲取歷史資料。
假設 save_to_storage
為 True
則,程式會自動在本地複製一份,以避免重複下載大量數據。
PARAMETER | DESCRIPTION |
---|---|
dataset |
The name of dataset.
TYPE:
|
save_to_storage |
Whether to save the dataset to storage for later use. Default is True. The argument will be removed in the future. Please use data.set_storage(FileStorage(use_cache=True)) instead.
TYPE:
|
force_download |
Whether to force download the dataset from cloud. Default is False.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
DataFrame
|
financial data |
Examples:
欲下載所有上市上櫃之收盤價歷史資料,只需要使用此函式即可:
date | 0015 | 0050 | 0051 | 0052 | 0053 |
---|---|---|---|---|---|
2007-04-23 | 9.54 | 57.85 | 32.83 | 38.4 | nan |
2007-04-24 | 9.54 | 58.1 | 32.99 | 38.65 | nan |
2007-04-25 | 9.52 | 57.6 | 32.8 | 38.59 | nan |
2007-04-26 | 9.59 | 57.7 | 32.8 | 38.6 | nan |
2007-04-27 | 9.55 | 57.5 | 32.72 | 38.4 | nan |
finlab.data.indicator
支援 Talib 和 pandas_ta 上百種技術指標,計算 2000 檔股票、10年的所有資訊。
在使用這個函式前,需要安裝計算技術指標的 Packages
PARAMETER | DESCRIPTION |
---|---|
indname |
指標名稱, 以 TA-Lib 舉例,例如 SMA, STOCH, RSI 等,可以參考 talib 文件。 以 Pandas-ta 舉例,例如 supertrend, ssf 等,可以參考 Pandas-ta 文件。
TYPE:
|
adjust_price |
是否使用還原股價計算。
TYPE:
|
resample |
技術指標價格週期,ex:
TYPE:
|
market |
市場選擇,ex:
TYPE:
|
**kwargs |
技術指標的參數設定,TA-Lib 中的 RSI 為例,調整項為計算週期
TYPE:
|
建議使用者可以先參考以下範例,並且搭配 talib官方文件,就可以掌握製作技術指標的方法了。
finlab.data.universe
當呼叫 data.get
或是 data.indicator
時,返回產業相關類股。
PARAMETER | DESCRIPTION |
---|---|
market |
Universe market type. ex:
TYPE:
|
category |
Stock categories. ex:
TYPE:
|
Examples:
A. 多產業選取: 想要當鋼鐵人、航海王,可以用以下方法將這些類股一次選出來
date | 2002 | 2006 | .. | 2008 | 2009 |
---|---|---|---|---|---|
2007-04-23 | 39.65 | 38.3 | .. | 7.8 | 17.55 |
2007-04-24 | 39.85 | 38.85 | .. | 8.34 | 17.5 |
2007-04-25 | 39.25 | 38.1 | .. | 8.25 | 17.3 |
2007-04-26 | 39 | 37.85 | .. | 8.2 | 17.3 |
2007-04-27 | 38.2 | 37.2 | .. | 7.88 | 16.6 |
B. 使用正規表達式選取:由於程式是使用 regex 來進行比對,所以會變成模糊比對,當 categories 是「其他」, 則會選出所有的「其他」類股,包含「其他證券」。如果使用者如果希望選出「其他」但不想要選出「其他證券」,可以使用以下方式:
這樣就會明確指明開頭跟結尾中間,只有「其他」的類股會被選出來。
finlab.data.us_universe
當呼叫 data.get
或是 data.indicator
時,返回美股產業相關類股。
PARAMETER | DESCRIPTION |
---|---|
market |
Universe market type.
ex:
TYPE:
|
sector |
The sector the stock belongs to.
ex:
TYPE:
|
industry |
The industry the stock belongs to.See industry list from
TYPE:
|
exchange |
The exchange the stock belongs to.
ex:
TYPE:
|
Examples:
想選出美股普通股中的科技類股
with us_universe('Common Stock', ['Technology']):
close_subset = data.get('us_price:close')
print(close_subset)
date | AAOI | AAPL | .. | ABCO | NVDA |
---|---|---|---|---|---|
2017-01-03 | 39.65 | 38.3 | .. | 7.8 | 17.55 |
2017-01-04 | 39.85 | 38.85 | .. | 8.34 | 17.5 |
2017-01-05 | 39.25 | 38.1 | .. | 8.25 | 17.3 |
2017-01-06 | 39 | 37.85 | .. | 8.2 | 17.3 |
2017-01-09 | 38.2 | 37.2 | .. | 7.88 | 16.6 |
想選出美股特別股中的基礎原物料和能源類股
with data.us_universe('Preferred Stock', ['Basic Materials','Energy']):
close_subset = data.get('us_price:close')
print(close_subset)
date | AEUA | ALIN-PA | .. | ALIN-PB | ALIN-PE |
---|---|---|---|---|---|
2017-01-03 | 39.65 | 38.3 | .. | 7.8 | 17.55 |
2017-01-04 | 39.85 | 38.85 | .. | 8.34 | 17.5 |
2017-01-05 | 39.25 | 38.1 | .. | 8.25 | 17.3 |
2017-01-06 | 39 | 37.85 | .. | 8.2 | 17.3 |
2017-01-09 | 38.2 | 37.2 | .. | 7.88 | 16.6 |
想從美股 NASDAQ 交易所的普通股中篩選出軟體類股
with data.us_universe('Common Stock', industry='Software', exchange='NASDAQ'):
close_subset = data.get('us_price:close')
print(close_subset)
date | ACIW | ACVA | .. | ZI | ZS |
---|---|---|---|---|---|
2017-01-03 | 39.65 | 38.3 | .. | 7.8 | 17.55 |
2017-01-04 | 39.85 | 38.85 | .. | 8.34 | 17.5 |
2017-01-05 | 39.25 | 38.1 | .. | 8.25 | 17.3 |
2017-01-06 | 39 | 37.85 | .. | 8.2 | 17.3 |
2017-01-09 | 38.2 | 37.2 | .. | 7.88 | 16.6 |
檢視有哪些產業可選擇
{'Advertising Agencies',
'Aerospace & Defense',
'Agricultural Inputs',
'Airlines',
'Airports & Air Services',
'Aluminum',
...}
finlab.data.set_storage
設定本地端儲存歷史資料的方式
假設使用 data.get
獲取歷史資料則,在預設情況下,程式會自動在本地複製一份,以避免重複下載大量數據。
storage 就是用來儲存歷史資料的接口。我們提供兩種 storage
接口,分別是 finlab.data.CacheStorage
(預設) 以及
finlab.data.FileStorage
。前者是直接存在記憶體中,後者是存在檔案中。詳情請參考 CacheStorage
和 FileStorage
來獲得更詳細的資訊。
在預設情況下,程式會自動使用 finlab.data.FileStorage
並將重複索取之歷史資料存在作業系統預設「暫時資料夾」。
PARAMETER | DESCRIPTION |
---|---|
storage |
The interface of storage
TYPE:
|
Examples:
欲切換成以檔案方式儲存,可以用以下之方式:
可以在本地端的 ./finlab_db/price#收盤價.pickle
中,看到下載的資料,
可以使用 pickle
調閱歷史資料:
finlab.data.CacheStorage
finlab.data.FileStorage
將歷史資料儲存於檔案中
PARAMETER | DESCRIPTION |
---|---|
path |
資料儲存的路徑
TYPE:
|
use_cache |
是否額外使用快取,將資料複製一份到記憶體中。
TYPE:
|
Examples:
欲切換成以檔案方式儲存,可以用以下之方式:
可以在本地端的 ./finlab_db/price#收盤價.pickle
中,看到下載的資料,
可以使用 pickle
調閱歷史資料:
finlab.data.get_strategies
取得已上傳量化平台的策略回傳資料。
可取得自己策略儀表板上的數據,例如每個策略的報酬率曲線、報酬率統計、夏普率、近期部位、近期換股日..., 這些數據可以用來進行多策略彙整的應用喔!
PARAMETER | DESCRIPTION |
---|---|
api_token |
若未帶入finlab模組的api_token,會自動跳出GUI頁面, 複製網頁內的api_token貼至輸入欄位即可。
TYPE:
|
Returns: (dict): strategies data Response detail:
``` py
{
strategy1:{
'asset_type': '',
'drawdown_details': {
'2015-06-04': {
'End': '2015-11-03',
'Length': 152,
'drawdown': -0.19879090089478024
},
...
},
'fee_ratio': 0.000475,
'last_trading_date': '2022-06-10',
'last_updated': 'Sun, 03 Jul 2022 12:02:27 GMT',
'ndays_return': {
'1': -0.01132480035770611,
'10': -0.0014737286933147464,
'20': -0.06658015749110646,
'5': -0.002292995729485159,
'60': -0.010108700314771735
},
'next_trading_date': '2022-06-10',
'positions': {
'1413 宏洲': {
'entry_date': '2022-05-10',
'entry_price': 10.05,
'exit_date': '',
'next_weight': 0.1,
'return': -0.010945273631840613,
'status': '買進',
'weight': 0.1479332345384493
},
'last_updated': 'Sun, 03 Jul 2022 12:02:27 GMT',
'next_trading_date': '2022-06-10',
'trade_at': 'open',
'update_date': '2022-06-10'
},
'return_table': {
'2014': {
'Apr': 0.0,
'Aug': 0.06315180932606546,
'Dec': 0.0537589857541485,
'Feb': 0.0,
'Jan': 0.0,
'Jul': 0.02937490104459939,
'Jun': 0.01367930162104769,
'Mar': 0.0,
'May': 0.0,
'Nov': -0.0014734320286596825,
'Oct': -0.045082529665408266,
'Sep': 0.04630906972509852,
'YTD': 0.16626214846456966
},
...
},
'returns': {
'time': [
'2014-06-10',
'2014-06-11',
'2014-06-12',
...
],
'value': [
100,
99.9,
100.2,
...
]
},
'stats': {
'avg_down_month': -0.03304015302646822,
'avg_drawdown': -0.0238021414698247,
'avg_drawdown_days': 19.77952755905512,
'avg_up_month': 0.05293384465715908,
'cagr': 0.33236021285588846,
'calmar': 1.65261094975066,
'daily_kurt': 4.008888367138843,
'daily_mean': 0.3090784769257415,
'daily_sharpe': 1.747909002374217,
'daily_skew': -0.6966018726321078,
'daily_sortino': 2.8300677082214034,
...
},
'tax_ratio': 0.003,
'trade_at': 'open',
'update_date': '2022-06-10'
},
strategy2:{...},
...}
```
finlab.data.search
查詢與取得資料庫目錄資訊。
查詢FinLab資料庫目錄中的資料表名稱或項目欄位名稱是否包含關鍵字,方便搜尋資料庫是否存在目標資料。
PARAMETER | DESCRIPTION |
---|---|
keyword |
欲查詢關鍵字,預設列舉全部。
TYPE:
|
display_info |
指定顯示的資訊項目,預設只顯示「資料表英文代稱、資料表的中文描述、資料表欄位名稱」,若設定為None,則顯示全部資訊。
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
list
|
database information |
Response detail
[{'name': 'financial_statement',
'description': '財報',
'items': {'存貨': {'type': 'float', 'description': '資產負債表(仟元)'},
'存貨_增加_減少': {'type': 'float', 'description': '單季現金流量表(仟元)'}}},
{'name': 'fundamental_features',
'description': '財務指標',
'items': {'存貨週轉率': {'type': 'float', 'description': '(%)'}}},...]
Examples: