finlab.portfolio
finlab.portfolio.Portfolio
Bases: Report
建構 Portfolio 物件。
PARAMETER | DESCRIPTION |
---|---|
- |
代表投資組合的字典,key 為資產名稱,value 是回測報告與部位。
TYPE:
|
Example
組合多個策略
from finlab import sim
from finlab.portfolio import Portfolio
# 請參閱 sim 函數的文件以獲取更多信息
# https://doc.finlab.tw/getting-start/
report_strategy1 = sim(...)
report_strategy2 = sim(...)
report_strategy3 = sim(...)
portfolio = Portfolio({
'strategy1': (report_strategy1, 0.3),
'strategy2': (report_strategy2, 0.4),
'strategy3': (report_strategy3, 0.3),
})
finlab.portfolio.create_multi_asset_report
根據提供的股票清單創建多資產報告。 Create a multi-asset report based on the stock list provided.
PARAMETER | DESCRIPTION |
---|---|
stock_list |
一個以股票代號為 key,權重大小為 value。 A dictionary with stock id as key and weight as value.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Report
|
一個包含回測結果的報告對象。A report object with the backtest result. |
Example:
>>> from finlab.portfolio import create_multi_asset_report
...
...
>>> report = create_multi_asset_report({'2330': 0.5, '1101': 0.5})
finlab.portfolio.create_report_from_cloud
根據提供的用戶ID和策略ID創建在線報告。 Create an online report based on the user id and strategy id provided.
PARAMETER | DESCRIPTION |
---|---|
user_id |
The user id.
TYPE:
|
strategy_id |
The
TYPE:
|
finlab.portfolio.PortfolioSyncManager
投資組合類別,用於設定和獲取投資組合資訊。
ATTRIBUTE | DESCRIPTION |
---|---|
path |
投資組合資訊的儲存路徑。
TYPE:
|
METHOD | DESCRIPTION |
---|---|
set |
Dict[str, Tuple[int, Report]]): 設定投資組合的函數。 |
get_position |
獲取持倉資訊。 |
Examples:
from finlab.portfolio import Portfolio, PortfolioSyncManager
# 初始化投資組合
port = Portfolio({'策略A': (report1, 0.3), '策略B': (report2, 0.7)})
# 設定投資組合
# pm = PortfolioSyncManager.from_local() or
# pm = PortfolioSyncManager.from_cloud()
pm = PortfolioSyncManager()
pm.update(port, total_balance=1000000)
pm.to_cloud() # pm.to_local()
print(pm)
# 下單
account = ... # 請參考 Account 產生方式
pm.sync(account) # 平盤價格下單
建構投資組合。
create_order_executor
create_order_executor(account, at='close', consider_margin_as_asset=False, market_name=None, **kwargs)
同步持倉資訊。
PARAMETER | DESCRIPTION |
---|---|
account |
交易帳戶。
TYPE:
|
consider_margin_as_asset |
是否將融資融券視為資產。預設為 True。
TYPE:
|
market_name |
指定市場名稱。預設為 None,也就是獲取所有市場。
TYPE:
|
market_order |
以類市價盡量即刻成交:所有買單掛漲停價,所有賣單掛跌停價
TYPE:
|
best_price_limit |
掛芭樂價:所有買單掛跌停價,所有賣單掛漲停價
TYPE:
|
view_only |
預設為 False,會實際下單。若設為 True,不會下單,只會回傳欲執行的委託單資料(dict)
TYPE:
|
extra_bid_pct |
以該百分比值乘以價格進行追價下單,如設定為 0.05 時,將以當前價的 +(-)5% 的限價進買入(賣出),也就是更有機會可以成交,但是成交價格可能不理想; 假如設定為 -0.05 時,將以當前價的 -(+)5% 進行買入賣出,也就是限價單將不會立即成交,然而假如成交後,價格比較理想。參數有效範圍為 -0.1 到 0.1 內。
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
None |
from_cloud
classmethod
從雲端檔案初始化投資組合。
PARAMETER | DESCRIPTION |
---|---|
path |
雲端檔案的路徑。預設為 'default'。
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
PortfolioSyncManager
|
投資組合類別。 |
from_local
classmethod
從本地檔案初始化投資組合。
PARAMETER | DESCRIPTION |
---|---|
path |
本地檔案的路徑。
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
PortfolioSyncManager
|
投資組合類別。 |
from_path
classmethod
從本地檔案初始化投資組合。
PARAMETER | DESCRIPTION |
---|---|
path |
本地檔案的路徑。
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
PortfolioSyncManager
|
投資組合類別。 |
get_position
獲取持倉資訊。
PARAMETER | DESCRIPTION |
---|---|
market_name |
指定市場名稱。預設為 None,也就是獲取所有市場。
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
dict or Position: 若 combined 為 True,則返回合併後的持倉資訊(Position 物件); 若 combined 為 False,則返回原始持倉資訊(dict)。 |
get_strategy_position
獲取策略的開倉部位。
PARAMETER | DESCRIPTION |
---|---|
strategy_name |
策略名稱。
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
dict
|
開倉部位資訊。 |
margin_cash_position_combine
staticmethod
sync
同步持倉資訊。
PARAMETER | DESCRIPTION |
---|---|
account |
交易帳戶。
TYPE:
|
consider_margin_as_asset |
是否將保證金交易視為資產。預設為 True。
TYPE:
|
market_name |
指定市場名稱。預設為 None,也就是獲取所有市場。
TYPE:
|
market_order |
以類市價盡量即刻成交:所有買單掛漲停價,所有賣單掛跌停價
TYPE:
|
best_price_limit |
掛芭樂價:所有買單掛跌停價,所有賣單掛漲停價
TYPE:
|
view_only |
預設為 False,會實際下單。若設為 True,不會下單,只會回傳欲執行的委託單資料(dict)
TYPE:
|
extra_bid_pct |
以該百分比值乘以價格進行追價下單,如設定為 0.05 時,將以當前價的 +(-)5% 的限價進買入(賣出),也就是更有機會可以成交,但是成交價格可能不理想; 假如設定為 -0.05 時,將以當前價的 -(+)5% 進行買入賣出,也就是限價單將不會立即成交,然而假如成交後,價格比較理想。參數有效範圍為 -0.1 到 0.1 內。
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
None |
update
update(portfolio, total_balance=0, rebalance_safety_weight=0.2, smooth_transition=None, force_override_difference=False, custom_position=None, excluded_stock_ids=None, **kwargs)
設定投資組合的函數。
PARAMETER | DESCRIPTION |
---|---|
portfolio |
包含投資組合資訊的字典。
TYPE:
|
total_balance |
總資產。
TYPE:
|
rebalance_safety_weight |
現金的權重,確保以市價買賣時,新的策略組合價值不超過舊的價值,計算方式為:賣出股票後,有多少比例要變成現金(例如 20%),再買入新的股票。
TYPE:
|
smooth_transition |
是否只在換股日才更新,預設為 None,系統會自行判斷,假如第一次呼叫函示,會是 False,之後會是 True。
TYPE:
|
force_override_difference |
是否強制覆蓋不同的部位,預設為 False。
TYPE:
|
custom_position |
自定義部位,預設為 None。當 custom_position 不為 None 時,會將 custom_position 加入到部位中。程式在計算部位時,會將 custom_position 排除在外,不列入。
TYPE:
|
excluded_stock_ids |
排除的股票代碼列表。預設為 None。
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
None |
Examples:
from finlab.backtest import sim
from finlab.portfolio import Portfolio, OnlineReport
# create report 1
report1 = sim(...) # 請參考回測語法
# download online report
report2 = OnlineReport.from_cloud('strategyName') # 下載策略報告
# create portfolio
portfolio = Portfolio({'策略1': (report1, 0.5), '策略2': (report2, 0.5)})
# create PortfolioSyncManager
pm = PortfolioSyncManager.from_cloud()
pm.update(portfolio, total_balance=1000000, cash_weight=0.2) # 投資 100 萬元
# create orders
account = ... # 請參考 Account 產生方式
pm.sync(account) # 平盤價格下單
pm.sync(account, market_order=True) # 市價下單