開發動機
你的 FinLab 量化平台的策略儀表板上是不是有很多豐富的策略呢?
如果答案為是,代表你很棒,嘗試了許多量化策略的實驗,有些策略拿來實驗想法、有些是真的拿來實戰。這時你可能會有下面幾個問題想處理,我想監控儀表板上真正拿來實戰的策略,看每個策略綜整後的部位為何?策略們的標的集中在哪些類股?哪些標的被多個策略同時選中或是比重最大?這時 Sunburst (旭日圖) 可能是你監控策略部位最好的資料視覺化武器之一,FinLab 已開發好工具了!來看看怎麼使用吧!
Sunburst 是怎樣的圖表?
Sunburst 是圓餅圖的進化版,可以顯示分層數據的比例關係,不同的子資料對應於不同級別層次結構,你可以想成是 Treemap 的變化版,都可以使用面積與顏色呈現不同維度的資料,Sunburst 與 Treemap 的差異在允許子資料缺角,不一定要填滿,像是以下的圖例,使用起來比 Treemap 更有彈性,Treemap 就一定要填滿部位。
Plotly-Sunburst 基礎教學
圖例
plotly 官方文件提供了多元的 Sunburst 範例程式,我們的多策略部位 Sunburst 會以色階型態的 Sunburst 範例為底,用色階變化呈現漲跌幅度,用面積顯示部位權重。
程式解構
import plotly.express as px
import numpy as np
df = px.data.gapminder().query("year == 2007")
fig = px.sunburst(df, path=['continent', 'country'], values='pop',
color='lifeExp', hover_data=['iso_alpha'],
color_continuous_scale='RdBu',
color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))
fig.show()
plotly.express
提供了高封裝程度的 API,讓我們可以用簡單的語法來繪圖,插入資料以 dataframe 來控制。接著說明一下 sunburst 裡的重要參數。
- path:sunburst 分層路徑,list 資料是 dataframe 裡的欄位名稱,先後順序代表由裡到外的層級。
- values:決定圓餅面積比例的欄位。
- colors:決定圓餅色階的欄位。
- hovers:游標滑過區塊部位時,想外加的顯示欄位。
- color_continuous_scale:色階條樣式,RdBu 是常用樣式,可以自選其他樣式。
- color_continuous_midpoint:色階中間決定斷點,用來控制色階深淺區間,範例是取平均壽命當中間點。
StrategySunburst 物件教學
finlab.plot.StrategySunburst()
提供了多策略的資料處理與視覺化功能,並將 plotly sunburst 的繪圖功能包裝進來。
獲取多策略資料
可以用s_data屬性連結到finlab.data.get_strategies()
, 取得已上傳的策略資料,像是每個策略的報酬率曲線、策略報酬率統計、近期部位、近期換股日等等,就不用一個個策略回測取得,直接一把抓,並藉由以下範例取得策略名稱和單一策略部位,策略名稱會用於之後繪圖所用的策略框定。
取得策略名稱的範例如下:
from finlab.plot import StrategySunburst
# 實例化物件
strategies = StrategySunburst()
s_data = strategy.s_data
print(f'已上傳的策略名稱:{s_data.keys()}')
獲取繪圖資料
StrategySunburst().get_strategy_df(select_strategy=None)
StrategySunburst 下的 get_strategy_df 方法可獲取繪圖資料所用的 dataframe,
參數說明如下:
- select_strategy (dict):選取的策略與策略對應權重,預設是策略全選,權重為每個策略的資金比例平均。也可以自訂匡選的策略,像若是只想看兩個實戰的策略,並分別設定6成語4成資金比重,可以這樣設定:{‘低波動本益成長比’:0.6,’研發魔人’:0.4}。若有現金的空部位想加入資產配置,可以設定如下,策略名稱為現金,即可創造現金部位 {‘低波動本益成長比’:0.5,’研發魔人’:0.2, ‘現金’:0.2}。
回傳的 dataframe 中,資料欄位 ‘market’ 為資產所屬的市場,目前有 tw_stock (台股) 或 crypto (加密貨幣) 或 現金 選項。
Sunburst 繪圖
from finlab.plot import StrategySunburst
# 實例化物件
strategies = StrategySunburst()
strategies.plot().show()
strategies.plot(select_strategy={'高殖利率烏龜':0.5,'營收強勢動能瘋狗':0.3,'現金流價值成長':0.2}).show()
strategies.plot(select_strategy={'高殖利率烏龜':0.4,'營收強勢動能瘋狗':0.25,'現金流價值成長':0.2,'現金':0.15},path = ['market', 'category','stock_id','s_name']).show()
StrategySunburst().plot(select_strategy=None, path=None, color_continuous_scale='RdBu_r')
StrategySunburst 下的 plot 方法提供了繪圖設定,使用短短的程式碼就可以顯示多策略部位圖表。參數承襲 plotly.express.sunburst
,說明如下:
- select_strategy (dict):設定選取的策略與策略對應的持股現值權重,預設策略是策略全選,權重策略數的平均值。也可以自訂匡選的策略,像是只想看兩個實戰的策略,並分別設定6成與4成持股現值比重,可以設定成
{'低波動本益成長比':0.6,'研發魔人':0.4}
。若有現金的空部位想加入資產配置,可以設定成{'低波動本益成長比':0.5,'研發魔人':0.2, '現金':0.2}
,策略名稱為現金,即可創造現金部位。 - path (list):sunburst 分層路徑,預設由裡到外的分層是
['s_name', 'market', 'category', 'stock_id']
,可以觀察策略持有哪些類股為主。你可以自動設定分層,會有不同的效果,像是也可以設成['category','stock_id','s_name']
變成可以看標的被哪些策略同時選到。 - color_continuous_scale (str):預設為
'RdBu_r'
,可以自選其他樣式。
繪圖範例
from finlab.plot import StrategySunburst
# 實例化物件
strategies = StrategySunburst()
# 範例1
strategies.plot().show()
# 範例2
strategies.plot(select_strategy={'高殖利率烏龜':0.5,'營收強勢動能瘋狗':0.3,'現金流價值成長':0.2}).show()
# 範例3
strategies.plot(select_strategy={'高殖利率烏龜':0.4,'營收強勢動能瘋狗':0.25,'現金流價值成長':0.2,'現金':0.15},path = ['market', 'category','stock_id','s_name']).show()
範例1
strategies.plot().show()
不帶任何參數會顯示全部的已上傳策略部位,策略資金分配比率為策略平均分配。
範例2
strategies.plot(select_strategy={'高殖利率烏龜':0.5,'營收強勢動能瘋狗':0.3,'現金流價值成長':0.2}).show()
自選3個策略,設定不同權重,看策略比重、策略持股的產業分佈。面積越大代表市值權重越大。顏色越紅代表上漲幅度越大,越藍代表跌幅越大。點擊策略可以做圖表互動,放大可只看單一策略的 sunburst (右圖),從圖表觀察到營收策略選到三檔網通股,佔比最大,獲利最高的是6470 宇智,網通族群可能有營收趨勢翻多的群聚性。若是某些族群佔比超過 50% 以上,可能要反過來思考策略是不是太過於相似?可能會有標的不夠分散的風險。
範例3
strategies.plot(select_strategy={'高殖利率烏龜':0.4,'營收強勢動能瘋狗':0.25,'現金流價值成長':0.2,'現金':0.15},path = ['market', 'category','stock_id','s_name']).show()
自選3個策略並設定現金權重,設定不同權重,除了看策略持股的產業分佈,也可看看標的被哪些策略同時選到。像圖中的 4572 駐龍同時被兩個策略選到,可能是非常厲害的標的喔!
結論
Plotly – Sunburst 是不是十分絢麗呢!可以作多層次是覺化呈現及圖表互動。利用 FinLab 套件的 StrategySunburst 可以很輕鬆地將多策略資料漂亮地呈現出來,並觀察裡面的 insight,當作其中一個管理多策略的工具,不同的繪圖參數設定能玩出不同的效果,趕快來試試吧!
colab 範例檔連結