<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>資料視覺化 &#8211; FinLab</title>
	<atom:link href="https://www.finlab.tw/tag/%E8%B3%87%E6%96%99%E8%A6%96%E8%A6%BA%E5%8C%96/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.finlab.tw</link>
	<description>深入淺出的量化投資，讓你在在茫茫股海中，找到專屬於自己的投資方法</description>
	<lastBuildDate>Fri, 25 Aug 2023 02:41:56 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.9</generator>

<image>
	<url>https://www.finlab.tw/wp-content/uploads/2020/07/favicon.png</url>
	<title>資料視覺化 &#8211; FinLab</title>
	<link>https://www.finlab.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">179699571</site>	<item>
		<title>史上最強大的台股板塊圖 &#124; 操作說明書</title>
		<link>https://www.finlab.tw/%e5%8f%b2%e4%b8%8a%e6%9c%80%e5%bc%b7%e5%a4%a7%e7%9a%84%e5%8f%b0%e8%82%a1%e6%9d%bf%e5%a1%8a%e5%9c%96-%e6%93%8d%e4%bd%9c%e8%aa%aa%e6%98%8e%e6%9b%b8/</link>
					<comments>https://www.finlab.tw/%e5%8f%b2%e4%b8%8a%e6%9c%80%e5%bc%b7%e5%a4%a7%e7%9a%84%e5%8f%b0%e8%82%a1%e6%9d%bf%e5%a1%8a%e5%9c%96-%e6%93%8d%e4%bd%9c%e8%aa%aa%e6%98%8e%e6%9b%b8/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Tue, 02 Aug 2022 03:57:57 +0000</pubDate>
				<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[FinLab 量化平台]]></category>
		<category><![CDATA[生產力]]></category>
		<category><![CDATA[treemap]]></category>
		<category><![CDATA[台股]]></category>
		<category><![CDATA[板塊圖]]></category>
		<category><![CDATA[盤中資訊]]></category>
		<category><![CDATA[資料視覺化]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=4151</guid>

					<description><![CDATA[FinLab 在 2022/7/31 於量化平台的產業評選發佈了完整版台股板塊圖，在 FB 粉絲團的介紹文章引發了不小的迴響，著實嚇了 Ben 一大跳，沒想到如此多人對此功能這麼有興趣 ! 
其實以前就發布過 Treemap的教學文章，但比較偏程式教學，功能也比較沒那麼齊全，為了讓大家更方便看見Python的數據力，決定將板塊圖寫成網頁版，結合多年數據觀測實戰的經驗，將關鍵台股指標全放在這功能上了！]]></description>
										<content:encoded><![CDATA[
<p class="has-medium-font-size">FinLab 在 2022/7/31 於量化平台的產業評選發佈了<a href="https://ai.finlab.tw/industry?industry=LED%E7%85%A7%E6%98%8E%E7%94%A2%E6%A5%AD:%E5%85%89%E6%BA%90_%E7%A3%8A%E6%99%B6&amp;tab=%E6%9D%BF%E5%A1%8A%E5%9C%96" target="_blank" rel="noopener">完整版台股板塊圖</a>，在 FB 粉絲團的<a href="https://www.facebook.com/finlab.python/posts/pfbid0ZyNMQ8y4LRR3djcigTdfXbYyjVY7ZucLGYKdhLzWKe1pMBMqodM8PMJRth5Ejicil" target="_blank" rel="noopener">介紹文章</a>引發了不小的迴響，著實嚇了 Ben 一大跳，沒想到如此多人對此功能這麼有興趣 ! <br>其實以前就發布過 <a href="https://www.finlab.tw/dashboard2-plotly-treemap/">Treemap的教學文章</a>，但比較偏程式教學，功能也比較沒那麼齊全，為了讓大家更方便看見Python的數據力，決定將板塊圖寫成網頁版，結合多年數據觀測實戰的經驗，將關鍵台股指標全放在這功能上了！</p>



<p class="has-medium-font-size">台股板塊圖可以說是數據萬花筒，囊括了基本面、技術面、籌碼面的指標，有200多種變化可觀測，有別於市面上類似功能只有報酬率可看，滿足不了專業用戶需求。<br>透過呈現多維度資料、自由點擊互動、監控全市場的數據，應該在目前市場上找不到功能這麼完整的台股板塊圖。</p>



<p class="has-medium-font-size">雖然 FinLab 目前主打在策略開發和回測，比較少著墨在比較親民的資料查詢或視覺化，但未來會慢慢補上，這塊市面上做的人很多，要做就要做出特色才有價值！</p>



<h2>台股板塊圖操作說明</h2>



<h3>什麼是板塊圖</h3>



<p class="has-medium-font-size">板塊圖就像剝洋蔥，藉由顏色與面積顯示不同數據維度，分類一層層往內縮，像FinLab預設的圖表階層由外到內是台股全市場、上市或上櫃、產業類股、公司，父階層的數值會參考子數值的面積權重與顏色數值來顯示，FinLab 計算父階層是採用中位數的計算模式，像上市鋼鐵類股若有五檔漲幅分別是 1、2、3、3、10%，鋼鐵類股的顏色會以 3% 來計算，如此能排除少數公司的極端數據，對產業數據有更公允的衡量。</p>



<h3>簡易互動</h3>



<p class="has-medium-font-size">點擊 <a href="https://ai.finlab.tw/industry/" target="_blank" rel="noopener">量化平台</a> 左側導覽列進入產業分析頁面，Tab 點擊板塊圖模式即可啟用圖表。</p>



<figure class="wp-block-image size-large"><img width="1024" height="597" src="https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午10.30.38-1024x597.png" alt="截圖 2022 08 02 上午10.30.38" class="wp-image-4153" srcset="https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午10.30.38-1024x597.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午10.30.38-300x175.png 300w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午10.30.38-768x447.png 768w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午10.30.38-1536x895.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午10.30.38-2048x1193.png 2048w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午10.30.38-1200x700.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" title="史上最強大的台股板塊圖 | 操作說明書 1"></figure>



<p class="has-medium-font-size">點擊不同的階層會自動縮放該階層內的資料，例如我想將上市半導體的區塊放大，可以點擊半導體業的小標題。另外游標拂過區塊會顯示對應數值資料。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="748" src="https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.00.30-1-1024x748.png" alt="截圖 2022 08 02 上午11.00.30 1" class="wp-image-4156" srcset="https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.00.30-1-1024x748.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.00.30-1-300x219.png 300w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.00.30-1-768x561.png 768w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.00.30-1-1536x1121.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.00.30-1.png 1789w" sizes="(max-width: 1024px) 100vw, 1024px" title="史上最強大的台股板塊圖 | 操作說明書 2"></figure>



<p class="has-medium-font-size">點擊後就可以得到放大的結果，如果想變回原來的樣子，再點擊一次半導體業的小標題，即可回到上一層。另外圖片的右上角照相機的圖案為下載圖片的功能，歡迎自由下載 FinLab 生成的圖片做多種應用喔！</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="724" src="https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.00.47-1024x724.png" alt="截圖 2022 08 02 上午11.00.47" class="wp-image-4155" srcset="https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.00.47-1024x724.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.00.47-300x212.png 300w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.00.47-768x543.png 768w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.00.47-1536x1086.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.00.47.png 1816w" sizes="(max-width: 1024px) 100vw, 1024px" title="史上最強大的台股板塊圖 | 操作說明書 3"></figure>



<h2>盤後資料模式</h2>



<h3>產業模式</h3>



<ul class="has-medium-font-size"><li>主板類別<br>此類別使用的是證交所、櫃檯買賣中心的類股分類，大家券商 APP 上的類股劃分多依照此。這也是預設的產業模式。</li><li>產業鍊<br>此類別參考 <a href="https://ic.tpex.org.tw/index.php" target="_blank" rel="noopener">產業價值鏈資訊平台</a> 所編製，是證交算旗下的機構，將類股再拆分更細的產業，像是半導體類股再拆分IC設計、晶圓代工、記憶體等等。<br>產業鍊的資訊比較能劃分出公司業務，在追蹤族群性的數據分析時，能做更細緻的觀察。<br>彌補主板類別同一類股可能彼此差異很大的缺點是，像有些公司是借殼上市、業務轉型，早已不是最初的分類。<br>由於同一家公司如鴻海、台達電因業務包山包海，會出現在許多細產業，不像主板類別的每家公司只會出現一次，因此這類電子龍頭公司在產業鍊的權重較大，會對產業數值有較高影響力。<br>* 留意此模式會過濾成交量過小的企業與板塊，只會顯示代表性的產業與公司。<br></li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="555" src="https://www.finlab.tw/wp-content/uploads/2022/08/newplot-2-1024x555.png" alt="newplot 2" class="wp-image-4162" srcset="https://www.finlab.tw/wp-content/uploads/2022/08/newplot-2-1024x555.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/08/newplot-2-300x163.png 300w, https://www.finlab.tw/wp-content/uploads/2022/08/newplot-2-768x416.png 768w, https://www.finlab.tw/wp-content/uploads/2022/08/newplot-2.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" title="史上最強大的台股板塊圖 | 操作說明書 4"><figcaption>產業鍊模式</figcaption></figure>



<h3>板塊大小指標</h3>



<p class="has-medium-font-size">此數值會代表板塊面積的依據，你可以看目前市場資金流向、多空投機部隊集結在哪裡？<br>之前股癌提到融資集中的族群若沒大跌，融資不容易會斷頭，這用「融資餘額市值當面積」搭配不同天數的報酬率當顏色深淺，即可觀察。若想讓每家股票板塊權重一致，可選「家數」，這樣小型股就不會顯示太小。</p>



<ul class="has-medium-font-size"><li>資金流：<br>近一日成交金額</li><li>成交張數：</li><li>市值：<br>近一日收盤價*股本</li><li>融資餘額市值：<br>近一日收盤價*近一日融資餘額。常搭配融資使用率使用。</li><li>融券餘額市值：<br>近一日收盤價*近一日融券餘額。常搭配券資比維持率使用。</li><li>家數：<br>將個股權重一視同人都視為1，方便觀察全部類股，避免像用資金流，有些公司成交金額太小導致，面積佔比縮很小。</li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="798" src="https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.20.12-1024x798.png" alt="截圖 2022 08 02 上午11.20.12" class="wp-image-4157" srcset="https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.20.12-1024x798.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.20.12-300x234.png 300w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.20.12-768x599.png 768w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.20.12-1536x1197.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-上午11.20.12.png 1688w" sizes="(max-width: 1024px) 100vw, 1024px" title="史上最強大的台股板塊圖 | 操作說明書 5"><figcaption>藉由融資餘額市值與融資使用率觀察投機資金集結在哪裡？</figcaption></figure>



<h3>顏色深淺指標</h3>



<p class="has-medium-font-size">總共有20種指標可選擇！<br>每個指標都有不同的顏色分界點，分界點數值為白色，高於分界點會越來越紅，低於則是越來越綠。若指標無特別說明，分界點為0，像報酬率是上漲偏紅、下跌偏綠、平盤附近為白色，某些指標為了明顯劃分顏色區隔，有設定特定的分界點，下述會說明。<br>若標地無資料，則區塊顯示黑色，像有些標的無法使用融資，則融資使用率就會呈現黑色。<br>若在月營收和財報季開獎階段，在數據持續開出的過程中，有些標地公告較慢，就會先是黑色。</p>



<h4>技術面</h4>



<p class="has-medium-font-size">觀察股價強弱勢與波動風險。</p>



<ul class="has-medium-font-size"><li>近1日報酬率</li><li>近5日報酬率</li><li>近20日報酬率</li><li>近1日震幅<br>近日股價最高與最低差額/前日收盤價。分界點為4%。</li><li>近10日真實波動率<br>近十日ATR/近日收盤價，也是震幅的一種方式，利用 <a href="https://www.finlab.tw/atr_keltner_channel/">ATR 技術指標</a> 的特性，除了當天高點點落差，考量隔日跳空因素去算入波動率。分界點為4%。</li></ul>



<h4>基本面</h4>



<ul class="has-medium-font-size"><li>近1月營收年增率<br>觀察營收短期趨勢，通常在每月1-10號月營收發佈期間作開獎觀察，若你觀察的公司還未開獎，但同一類股已開出的數字都不錯，那可能可考慮提前押寶喔。</li><li>近3月營收年增率<br>觀察營收短中期趨勢。像圖中的範例我們可明顯觀察出光電業和金融業的業績表現處於弱勢，網通、生技、航運處於強勢，基本面主觀選股可以留意族群性循環。<br></li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="781" src="https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-下午4.01.56-1-1024x781.png" alt="截圖 2022 08 02 下午4.01.56 1" class="wp-image-4161" srcset="https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-下午4.01.56-1-1024x781.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-下午4.01.56-1-300x229.png 300w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-下午4.01.56-1-768x586.png 768w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-下午4.01.56-1-1536x1171.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-下午4.01.56-1.png 1892w" sizes="(max-width: 1024px) 100vw, 1024px" title="史上最強大的台股板塊圖 | 操作說明書 6"><figcaption>近3月營收年增率</figcaption></figure>



<ul class="has-medium-font-size"><li>近12月營收年增率<br>觀察營收長期趨勢。</li><li>本益比<br>分界點為15，高於此數值的是評價較高的，像生物科技產業就有高本益比特性。區塊反黑代表獲利為負數。</li><li>殖利率<br>分界點為 4%。存股族想看哪一個族群有高股息特性，選這就對了。</li><li>存貨季增率<br>我很常看 @Richard只談基本面-Richard&#8217;s Research Blog-信昕產研，版主對產業面觀察有洞見，他最近在盯「存貨季增率」，我也做上去了，每個產業的存貨堆積程度一目瞭然，可以再去對比近3月月營收是否衰退，有了板塊圖，就不用一個個單獨去查公開資訊觀測站。如果庫存大增、營收衰退，要注意基本面風險。像2022Q2 半導體前幾家開獎的情況，看來不妙啊！接下來相關產業的公司要留意利空。<br><img loading="lazy" width="1031" height="650" class="wp-image-4163" style="width: 600px;" src="https://www.finlab.tw/wp-content/uploads/2022/08/newplot-1.png" alt="newplot 1" srcset="https://www.finlab.tw/wp-content/uploads/2022/08/newplot-1.png 1031w, https://www.finlab.tw/wp-content/uploads/2022/08/newplot-1-300x189.png 300w, https://www.finlab.tw/wp-content/uploads/2022/08/newplot-1-1024x646.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/08/newplot-1-768x484.png 768w" sizes="(max-width: 1031px) 100vw, 1031px" title="史上最強大的台股板塊圖 | 操作說明書 7"><br></li></ul>



<h4>籌碼面</h4>



<ul class="has-medium-font-size"><li>外資買賣超/成交張數<br>觀察外資近一日買進力道，占比越高，代表短期外資影響力大。<br>板塊圖父階層採用平均數計算，較能凸顯產業買賣超力道。</li><li>投信買賣超/成交張數<br>觀察投信近一日買進力道，占比越高，代表短期投信影響力大。相較於外資，投信操作更具族群性，短期買超趨勢通常會持續幾天，是短線操作的重要觀察指標。<br>板塊圖父階層採用平均數計算，較能凸顯產業買賣超力道。<br>範例圖中可發現投信集火在右上角的電腦週邊產業，短線可以留意該族群。<br><br><img loading="lazy" width="1905" height="1408" class="wp-image-4164" style="width: 600px;" src="https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-下午4.14.02.png" alt="截圖 2022 08 02 下午4.14.02" srcset="https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-下午4.14.02.png 1905w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-下午4.14.02-300x222.png 300w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-下午4.14.02-1024x757.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-下午4.14.02-768x568.png 768w, https://www.finlab.tw/wp-content/uploads/2022/08/截圖-2022-08-02-下午4.14.02-1536x1135.png 1536w" sizes="(max-width: 1905px) 100vw, 1905px" title="史上最強大的台股板塊圖 | 操作說明書 8"></li><li>融資增減張數/成交張數<br>內資短期多單指標，數值越高代表內資做多力道強。</li><li>融券增減張數/成交張數<br>內資短期空單指標，數值越高代表內資做多力道強。數值若為負值，越低代表空單回補力道大，觀察是否處於除權息或股東會的融券強制回補期間。</li><li>借券賣出增減張數/成交張數<br>法人空單指標，數值越高代表法人做空力道強，搭配法人買賣超觀察。</li><li>融資使用率<br>數值越高代表融資越多，代表投機資金入駐，通常該類股票波動都偏高。<br>分界點為15%。區塊反黑代表該標的無法融資券。</li><li>券資比<br>多空角力指標，若券資比飆高，股價也往上，可能有尬空行情。<br>分界點為15%。區塊反黑代表該標的無法融資券。</li><li>現股當沖率<br>當沖交易數/成交量，通常當沖參與度高的股票的投機性越強、波動大，喜歡操作當沖的話，可留意目前熱門標地有哪些。區塊反黑代表該標的無法當沖。<br>分界點為25%。</li><li>集保50張以下散戶持股占比<br>數值越高代表散戶持股越多，籌碼越不穩定，上漲趨勢通常延續性差。<br>分界點為25%。</li></ul>



<h2>盤中資料模式(2022/10新增)</h2>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="902" src="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-上午9.43.48-1024x902.png" alt="截圖 2022 10 26 上午9.43.48" class="wp-image-4708" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-上午9.43.48-1024x902.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-上午9.43.48-300x264.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-上午9.43.48-768x676.png 768w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-上午9.43.48-1536x1353.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-上午9.43.48.png 1650w" sizes="(max-width: 1024px) 100vw, 1024px" title="史上最強大的台股板塊圖 | 操作說明書 9"><figcaption>盤中板塊圖</figcaption></figure>



<p class="has-medium-font-size">此板塊圖目前已放上量化平台網頁，限定「VIP」使用，如果你對 FinLab量化平台進階功能有興趣，請參考<a href="https://ai.finlab.tw/pricing" target="_blank" rel="noopener">訂閱方案</a>。<br>串接券商盤中即時報價，以監控盤中族群強弱，提供短線交易者當看盤小工具。每日0900~1330更新。更新頻率：3分鐘，重整網頁可得最新數據。「板塊大小指標」雷同盤後板塊圖，差異在「顏色深淺指標」以下做指標用途介紹：</p>



<ul class="has-medium-font-size"><li>報酬率<br>(市價 &#8211; 當日平盤價) / 前日收盤價，看族群漲跌強弱。</li><li>震幅<br>(當日最高價 &#8211; 當日最低價) / 前日收盤價，看波動率，越高代表投機資金聚集。</li><li>週轉率<br>當前成交總量 / 普通股發行數，週轉率越高代表交易越熱烈，大於20%要注意投機過熱情形，若板塊圖很少紅色區塊，代表市場交投冷清。</li><li>量增率<br>當前成交總量 / 前日成交總量 ，若比率大於1，代表出現量增情況。若盤中成交量就大於前日總成交量，代表攻擊力道變強，方向需搭配報酬率指標一同觀察。</li><li>均價支撐強度<br>市價 / 當日成交均價，若比率大於1，代表今日買方成交單多是獲利，盤中方向偏多方，壓力較小，反之則短線賣壓較大。</li><li>收盤 / 開盤_強度指標<br>(市價 &#8211; 當日開盤價) / 當日開盤價，觀察整體市場是否出現「開高走低」或「開低走高」，前者代表盤中力道偏空方，後者代表盤中力道偏多方。</li></ul>



<h2>盤中觀察實例演練</h2>



<p class="has-medium-font-size">拿觀察2022/10/26盤勢當應用範例</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="864" src="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.12.33-1024x864.png" alt="截圖 2022 10 26 下午12.12.33" class="wp-image-4712" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.12.33-1024x864.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.12.33-300x253.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.12.33-768x648.png 768w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.12.33-1536x1296.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.12.33.png 1622w" sizes="(max-width: 1024px) 100vw, 1024px" title="史上最強大的台股板塊圖 | 操作說明書 10"><figcaption>週轉率</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="859" src="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.07.47-1024x859.png" alt="截圖 2022 10 26 下午12.07.47" class="wp-image-4713" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.07.47-1024x859.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.07.47-300x252.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.07.47-768x645.png 768w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.07.47-1536x1289.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.07.47.png 1655w" sizes="(max-width: 1024px) 100vw, 1024px" title="史上最強大的台股板塊圖 | 操作說明書 11"><figcaption>收盤 / 開盤_強度指標</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="852" src="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.14.53-1024x852.png" alt="截圖 2022 10 26 下午12.14.53" class="wp-image-4714" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.14.53-1024x852.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.14.53-300x249.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.14.53-768x639.png 768w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.14.53-1536x1277.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-26-下午12.14.53.png 1651w" sizes="(max-width: 1024px) 100vw, 1024px" title="史上最強大的台股板塊圖 | 操作說明書 12"><figcaption>均價支撐強度</figcaption></figure>



<ul class="has-medium-font-size"><li>週轉率<br>高週轉率的紅色家數很少，市況冷清，沒人玩。</li><li>收盤 / 開盤_強度指標<br>成交量多的標的多開高走低，弱勢盤。</li><li>均價支撐強度:<br>紅色偏多，搭配「收盤 / 開盤_強度指標」一同觀察，股價開高走低，買盤則是低接較多，比較少追高，所以成交均價低於市價。</li></ul>



<h2>小結</h2>



<p class="has-medium-font-size">一張圖貫穿所有關鍵指標，是不是很實用呢 ? 趕緊來探索這好用的功能。<br>覺得有幫助的話，可以將<a href="https://ai.finlab.tw/industry/?industry=%E5%8D%8A%E5%B0%8E%E9%AB%94%E6%A5%AD&amp;tab=%E6%9D%BF%E5%A1%8A%E5%9C%96" target="_blank" rel="noopener">台股板塊圖網頁</a>加入我的最愛，時常來關注喔！<br>預計每天晚上19:00、21:30 都會更新，21:30後才有融資融券相關數據喔。<br>有同學許願想學如何客製化自己的板塊圖，添入其他數據到到自己專屬圖表，或許不久的將來就能實現！大家一起享受資料視覺化的方便與美好吧！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/%e5%8f%b2%e4%b8%8a%e6%9c%80%e5%bc%b7%e5%a4%a7%e7%9a%84%e5%8f%b0%e8%82%a1%e6%9d%bf%e5%a1%8a%e5%9c%96-%e6%93%8d%e4%bd%9c%e8%aa%aa%e6%98%8e%e6%9b%b8/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4151</post-id>	</item>
		<item>
		<title>Plotly-Sunburst｜輕鬆監控多策略部位｜DashBoard 應用教學(5)</title>
		<link>https://www.finlab.tw/plotly-sunburst-dashboard/</link>
					<comments>https://www.finlab.tw/plotly-sunburst-dashboard/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Fri, 17 Jun 2022 00:34:08 +0000</pubDate>
				<category><![CDATA[生產力]]></category>
		<category><![CDATA[FinLab 量化平台]]></category>
		<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[Plotly]]></category>
		<category><![CDATA[sunburst]]></category>
		<category><![CDATA[多策略]]></category>
		<category><![CDATA[資料視覺化]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=3858</guid>

					<description><![CDATA[Plotly - Sunburst 是不是十分絢麗呢！可以作多層次是覺化呈現及圖表互動。利用FinLab套件的 StrategySunburst 可以很輕鬆地將多策略資料漂亮地呈現出來，並觀察裡面的insight，當作其中一個管理多策略的工具，不同的繪圖參數設定能玩出不同的效果，趕快來試試吧！]]></description>
										<content:encoded><![CDATA[
<h2>開發動機</h2>



<p class="has-medium-font-size">你的 FinLab 量化平台的策略儀表板上是不是有很多豐富的策略呢？<br>如果答案為是，代表你很棒，嘗試了許多量化策略的實驗，有些策略拿來實驗想法、有些是真的拿來實戰。這時你可能會有下面幾個問題想處理，我想監控儀表板上真正拿來實戰的策略，看每個策略綜整後的部位為何？策略們的標的集中在哪些類股？哪些標的被多個策略同時選中或是比重最大？這時 Sunburst (旭日圖) 可能是你監控策略部位最好的資料視覺化武器之一，FinLab 已開發好工具了！來看看怎麼使用吧！</p>



<h2>Sunburst 是怎樣的圖表？</h2>



<p class="has-medium-font-size">Sunburst 是圓餅圖的進化版，可以顯示分層數據的比例關係，不同的子資料對應於不同級別層次結構，你可以想成是 <a href="https://www.finlab.tw/dashboard2-plotly-treemap/">Treemap</a> 的變化版，都可以使用面積與顏色呈現不同維度的資料，Sunburst 與 Treemap 的差異在允許子資料缺角，不一定要填滿，像是以下的圖例，使用起來比 Treemap 更有彈性，Treemap 就一定要填滿部位。</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="903" height="525" src="https://www.finlab.tw/wp-content/uploads/2022/06/newplot-11.png" alt="newplot 11" class="wp-image-3862" srcset="https://www.finlab.tw/wp-content/uploads/2022/06/newplot-11.png 903w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-11-300x174.png 300w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-11-768x447.png 768w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-11-150x87.png 150w" sizes="(max-width: 903px) 100vw, 903px" title="Plotly-Sunburst｜輕鬆監控多策略部位｜DashBoard 應用教學(5) 13"><figcaption>Sunburst 缺角圖<a href="https://plotly.com/python/sunburst-charts/" target="_blank" rel="noopener">https://plotly.com/python/sunburst-charts/</a></figcaption></figure>



<h2>Plotly-Sunburst 基礎教學</h2>



<h3>圖例</h3>



<p class="has-medium-font-size">plotly 官方文件提供了多元的 <a href="https://plotly.com/python/sunburst-charts/" target="_blank" rel="noopener">Sunburst 範例程式</a>，我們的多策略部位 Sunburst 會以色階型態的 Sunburst 範例為底，用色階變化呈現漲跌幅度，用面積顯示部位權重。</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="903" height="525" src="https://www.finlab.tw/wp-content/uploads/2022/06/newplot-13.png" alt="newplot 13" class="wp-image-3863" srcset="https://www.finlab.tw/wp-content/uploads/2022/06/newplot-13.png 903w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-13-300x174.png 300w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-13-768x447.png 768w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-13-150x87.png 150w" sizes="(max-width: 903px) 100vw, 903px" title="Plotly-Sunburst｜輕鬆監控多策略部位｜DashBoard 應用教學(5) 14"><figcaption>色階型 SunBurst </figcaption></figure>



<h3>程式解構</h3>



<pre class="wp-block-code"><code lang="python" class="language-python">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()</code></pre>



<p class="has-medium-font-size"><code>plotly.express</code> 提供了高封裝程度的 API，讓我們可以用簡單的語法來繪圖，插入資料以 dataframe 來控制。接著說明一下 sunburst 裡的重要參數。</p>



<ul class="has-medium-font-size"><li>path：sunburst 分層路徑，list 資料是 dataframe 裡的欄位名稱，先後順序代表由裡到外的層級。</li><li>values：決定圓餅面積比例的欄位。</li><li>colors：決定圓餅色階的欄位。</li><li>hovers：游標滑過區塊部位時，想外加的顯示欄位。</li><li>color_continuous_scale：色階條樣式，RdBu 是常用樣式，可以自選<a href="https://plotly.com/python/builtin-colorscales/" target="_blank" rel="noopener">其他樣式</a>。</li><li>color_continuous_midpoint：色階中間決定斷點，用來控制色階深淺區間，範例是取平均壽命當中間點。</li></ul>



<h2>StrategySunburst 物件教學</h2>



<p class="has-medium-font-size"><code>finlab.plot.StrategySunburst()</code><br>提供了多策略的資料處理與視覺化功能，並將 plotly sunburst 的繪圖功能包裝進來。</p>



<h3>獲取多策略資料</h3>



<p class="has-medium-font-size">可以用s_data屬性連結到<code>finlab.data.get_strategies()</code>， 取得已上傳的策略資料，像是每個策略的報酬率曲線、策略報酬率統計、近期部位、近期換股日等等，就不用一個個策略回測取得，直接一把抓，並藉由以下範例取得策略名稱和單一策略部位，策略名稱會用於之後繪圖所用的策略框定。<br>取得策略名稱的範例如下：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">from finlab.plot import StrategySunburst

# 實例化物件
strategies = StrategySunburst()
s_data = strategy.s_data
print(f'已上傳的策略名稱:{s_data.keys()}')</code></pre>



<h3>獲取繪圖資料</h3>



<p class="has-medium-font-size"><code>StrategySunburst().get_strategy_df(select_strategy=None)</code></p>



<p class="has-medium-font-size">StrategySunburst 下的 get_strategy_df 方法可獲取繪圖資料所用的 dataframe，</p>



<p class="has-medium-font-size">參數說明如下：</p>



<ul class="has-medium-font-size"><li>select_strategy (dict)：選取的策略與策略對應權重，預設是策略全選，權重為每個策略的資金比例平均。也可以自訂匡選的策略，像若是只想看兩個實戰的策略，並分別設定6成語4成資金比重，可以這樣設定：{&#8216;低波動本益成長比&#8217;:0.6,&#8217;研發魔人&#8217;:0.4}。若有現金的空部位想加入資產配置，可以設定如下，策略名稱為現金，即可創造現金部位 {&#8216;低波動本益成長比&#8217;:0.5,&#8217;研發魔人&#8217;:0.2, &#8216;現金&#8217;:0.2}。</li></ul>



<p class="has-medium-font-size">回傳的 dataframe 中，資料欄位 &#8216;market&#8217; 為資產所屬的市場，目前有 tw_stock (台股) 或 crypto (加密貨幣) 或 現金 選項。</p>



<h3>Sunburst 繪圖</h3>



<pre class="wp-block-code"><code lang="python" class="language-python">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()</code></pre>



<p class="has-medium-font-size"><code>StrategySunburst().plot(select_strategy=None, path=None, color_continuous_scale='RdBu_r')</code></p>



<p class="has-medium-font-size">StrategySunburst 下的 plot 方法提供了繪圖設定，使用短短的程式碼就可以顯示多策略部位圖表。參數承襲 <code>plotly.express.sunburst</code> ，說明如下：</p>



<ul class="has-medium-font-size"><li>select_strategy (dict)：設定選取的策略與策略對應的持股現值權重，預設策略是策略全選，權重策略數的平均值。也可以自訂匡選的策略，像是只想看兩個實戰的策略，並分別設定6成與4成持股現值比重，可以設定成 <code>{'低波動本益成長比':0.6,'研發魔人':0.4}</code> 。若有現金的空部位想加入資產配置，可以設定成 <code>{'低波動本益成長比':0.5,'研發魔人':0.2, '現金':0.2}</code> ，策略名稱為現金，即可創造現金部位。</li><li>path (list)：sunburst 分層路徑，預設由裡到外的分層是 <code>['s_name', 'market', 'category', 'stock_id']</code> ，可以觀察策略持有哪些類股為主。你可以自動設定分層，會有不同的效果，像是也可以設成 <code>['category','stock_id','s_name'] </code> 變成可以看標的被哪些策略同時選到。</li><li>color_continuous_scale (str)：預設為<code>'RdBu_r'</code>，可以自選<a href="https://plotly.com/python/builtin-colorscales/" target="_blank" rel="noreferrer noopener">其他樣式</a>。</li></ul>



<h3>繪圖範例</h3>



<pre class="wp-block-code"><code lang="python" class="language-python">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()</code></pre>



<h4>範例1</h4>



<p class="has-medium-font-size"><code>strategies.plot().show()</code></p>



<p class="has-medium-font-size">不帶任何參數會顯示全部的已上傳策略部位，策略資金分配比率為策略平均分配。</p>



<figure class="wp-container-2 wp-block-gallery-1 wp-block-gallery has-nested-images columns-default is-cropped">
<figure class="wp-block-image size-large"><img loading="lazy" width="1000" height="800" data-id="3947" src="https://www.finlab.tw/wp-content/uploads/2022/06/newplot.png" alt="newplot" class="wp-image-3947" srcset="https://www.finlab.tw/wp-content/uploads/2022/06/newplot.png 1000w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-300x240.png 300w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-768x614.png 768w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-150x120.png 150w" sizes="(max-width: 1000px) 100vw, 1000px" title="Plotly-Sunburst｜輕鬆監控多策略部位｜DashBoard 應用教學(5) 15"><figcaption>顯示全部策略</figcaption></figure>
</figure>



<p></p>



<h4>範例2</h4>



<p class="has-medium-font-size"><code>strategies.plot(select_strategy={'高殖利率烏龜':0.5,'營收強勢動能瘋狗':0.3,'現金流價值成長':0.2}).show()</code><br><br>自選3個策略，設定不同權重，看策略比重、策略持股的產業分佈。面積越大代表市值權重越大。顏色越紅代表上漲幅度越大，越藍代表跌幅越大。點擊策略可以做圖表互動，放大可只看單一策略的 sunburst (右圖)，從圖表觀察到營收策略選到三檔網通股，佔比最大，獲利最高的是6470 宇智，網通族群可能有營收趨勢翻多的群聚性。若是某些族群佔比超過 50% 以上，可能要反過來思考策略是不是太過於相似？可能會有標的不夠分散的風險。</p>



<figure class="wp-container-4 wp-block-gallery-3 wp-block-gallery has-nested-images columns-default is-cropped">
<figure class="wp-block-image size-large"><img loading="lazy" width="1000" height="800" data-id="3865" src="https://www.finlab.tw/wp-content/uploads/2022/06/newplot-16.png" alt="newplot 16" class="wp-image-3865" srcset="https://www.finlab.tw/wp-content/uploads/2022/06/newplot-16.png 1000w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-16-300x240.png 300w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-16-768x614.png 768w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-16-150x120.png 150w" sizes="(max-width: 1000px) 100vw, 1000px" title="Plotly-Sunburst｜輕鬆監控多策略部位｜DashBoard 應用教學(5) 16"></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1000" height="800" data-id="3864" src="https://www.finlab.tw/wp-content/uploads/2022/06/newplot-15.png" alt="newplot 15" class="wp-image-3864" srcset="https://www.finlab.tw/wp-content/uploads/2022/06/newplot-15.png 1000w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-15-300x240.png 300w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-15-768x614.png 768w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-15-150x120.png 150w" sizes="(max-width: 1000px) 100vw, 1000px" title="Plotly-Sunburst｜輕鬆監控多策略部位｜DashBoard 應用教學(5) 17"></figure>
</figure>



<p></p>



<h4>範例3</h4>



<p class="has-medium-font-size"><code>strategies.plot(select_strategy={'高殖利率烏龜':0.4,'營收強勢動能瘋狗':0.25,'現金流價值成長':0.2,'現金':0.15},path = ['market', 'category','stock_id','s_name']).show()</code></p>



<p class="has-medium-font-size"><br>自選3個策略並設定現金權重，設定不同權重，除了看策略持股的產業分佈，也可看看標的被哪些策略同時選到。像圖中的 4572 駐龍同時被兩個策略選到，可能是非常厲害的標的喔！</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="1000" height="800" src="https://www.finlab.tw/wp-content/uploads/2022/06/newplot-18.png" alt="newplot 18" class="wp-image-3866" srcset="https://www.finlab.tw/wp-content/uploads/2022/06/newplot-18.png 1000w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-18-300x240.png 300w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-18-768x614.png 768w, https://www.finlab.tw/wp-content/uploads/2022/06/newplot-18-150x120.png 150w" sizes="(max-width: 1000px) 100vw, 1000px" title="Plotly-Sunburst｜輕鬆監控多策略部位｜DashBoard 應用教學(5) 18"></figure>



<h2>結論</h2>



<p class="has-medium-font-size">Plotly &#8211; Sunburst 是不是十分絢麗呢！可以作多層次是覺化呈現及圖表互動。利用 FinLab 套件的 StrategySunburst 可以很輕鬆地將多策略資料漂亮地呈現出來，並觀察裡面的 insight，當作其中一個管理多策略的工具，不同的繪圖參數設定能玩出不同的效果，趕快來試試吧！<br><br><a href="https://drive.google.com/file/d/16c_Oxy6X9qVYYVTTEGgy0fnjg-GI9TH-/view?usp=sharing" target="_blank" rel="noopener">colab 範例檔連結</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/plotly-sunburst-dashboard/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3858</post-id>	</item>
		<item>
		<title>大盤融資維持率｜Plotly-多重圖組｜DashBoard製作教學(3)</title>
		<link>https://www.finlab.tw/plotly-%e5%a4%9a%e9%87%8d%e5%9c%96%e7%b5%84%e8%9e%8d%e8%b3%87%e7%b6%ad%e6%8c%81%e7%8e%87dashboard%e8%a3%bd%e4%bd%9c%e6%95%99%e5%ad%b83/</link>
					<comments>https://www.finlab.tw/plotly-%e5%a4%9a%e9%87%8d%e5%9c%96%e7%b5%84%e8%9e%8d%e8%b3%87%e7%b6%ad%e6%8c%81%e7%8e%87dashboard%e8%a3%bd%e4%bd%9c%e6%95%99%e5%ad%b83/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Wed, 18 May 2022 08:03:12 +0000</pubDate>
				<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[生產力]]></category>
		<category><![CDATA[籌碼面]]></category>
		<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[Plotly]]></category>
		<category><![CDATA[大盤融資維持率]]></category>
		<category><![CDATA[資料視覺化]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=3560</guid>

					<description><![CDATA[融資維持率不見得每個券商app都有，透過FinLab API與Plotly，我們可以輕易製作出客製化的圖表來觀察融資維持率，只要有Python的基礎都能輕易上手。]]></description>
										<content:encoded><![CDATA[
<p class="has-medium-font-size">2022年4月到5月初受FED縮表、通膨超出預期、國內疫情爆發等利空因素引起殺盤，跌得昏天暗地，台積電差點跌破500元，更不用說體質更脆弱的小型股倒一片，OTC指數在2022年已回檔超過20%，融資斷頭ptt文齊發，令投資人煎熬。<br>可以抄底了沒？到底還要跌多久？是許多人想知道的問題。止跌的關鍵在不穩定籌碼被洗出了沒？只要投機籌碼仍多，股價就容易因利空產生恐慌急殺。</p>



<h2></h2>



<p class="has-medium-font-size">融資維持率是其中一個重要指標，該指標相關介紹可見<a href="https://www.finlab.tw/mt_rate_strategy/">&#8220;大盤融資維持率｜地板指標幫你搶長線反彈｜0050擇時策略優化？&#8221;</a>，利用融資成數、融資保證金計算，正常水位為1.67，近期大盤融資維持率又跌到150上下的偏低水位，搭配融資餘額持續退場，可見浮動籌碼逐漸被洗出場，有機會開始逐底。<br>若之後融資維持率10日均線開始上揚、融資維持率突破10日均線，則多方籌碼才會再有凝聚現象，不再受到過大的套牢壓力籠罩後，才有機會出現像樣的反彈。<br>融資維持率不見得每個券商app都有，透過FinLab API與Plotly，我們可以輕易製作出客製化的圖表來觀察融資維持率，只要有Python的基礎都能輕易上手。</p>



<h2>生成融資維持率</h2>



<p class="has-medium-font-size">透過以下簡單的程式，我們能生成繪圖所需要用到的資料。</p>



<pre class="wp-block-code"><code lang="python" class="language-python">from finlab import data

融資今日餘額 = data.get('margin_transactions:融資今日餘額')
融資券總餘額 = data.get('margin_balance:融資券總餘額')
融資券總餘額 = 融資券總餘額.loc[融資今日餘額.index.intersection(融資券總餘額.index)]
融資券總餘額['上市融資買賣超'] = (融資券總餘額['上市融資交易金額']-融資券總餘額['上市融資交易金額'].shift()).fillna(0)/100000000
融資券總餘額['上櫃融資買賣超'] = (融資券總餘額['上櫃融資交易金額']-融資券總餘額['上櫃融資交易金額'].shift()).fillna(0)/100000000

close = data.get('price:收盤價')
benchmark = data.get('benchmark_return:發行量加權股價報酬指數').squeeze()
融資總餘額 = 融資券總餘額[['上市融資交易金額','上櫃融資交易金額']].sum(axis=1)
融資餘額市值 = (融資今日餘額*close*1000).sum(axis=1)
融資維持率 = (融資餘額市值/融資總餘額)
融資維持率</code></pre>



<h2>台股大盤融資指標圖組繪製</h2>



<p class="has-medium-font-size">我們將用上述的資料套入Plotly製作動態圖組，一目瞭然市場動態，並學習使用plotly.layout去控制外觀與圖表互動工具。以下會對程式的細節提出重點講解。</p>



<h3>目標結果</h3>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="546" src="https://www.finlab.tw/wp-content/uploads/2022/05/newplot-6-1024x546.png" alt="newplot 6" class="wp-image-3561" srcset="https://www.finlab.tw/wp-content/uploads/2022/05/newplot-6-1024x546.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/05/newplot-6-300x160.png 300w, https://www.finlab.tw/wp-content/uploads/2022/05/newplot-6-768x410.png 768w, https://www.finlab.tw/wp-content/uploads/2022/05/newplot-6.png 1500w" sizes="(max-width: 1024px) 100vw, 1024px" title="大盤融資維持率｜Plotly-多重圖組｜DashBoard製作教學(3) 19"><figcaption>融資維持率</figcaption></figure>



<h3>程式範例</h3>



<pre class="wp-block-code"><code lang="python" class="language-python">#@title 台股大盤融資指標
start= '2020-01-01' #@param {type:"date"}
end = "2022-05-17" #@param {type:"date"}

import pandas as pd
from plotly.subplots import make_subplots
import plotly.graph_objects as go
import numpy as np

df = 融資維持率.loc[(融資維持率.index&gt;=start)&amp;(融資維持率.index&lt;=end)]
df2 = 融資券總餘額.loc[(融資券總餘額.index&gt;=start)&amp;(融資券總餘額.index&lt;=end)]


fig = make_subplots(rows=3,
                    cols=1,
                    shared_xaxes=True,
                    vertical_spacing=0.05,
                    specs=[[{"secondary_y": True}],
                            [{"secondary_y": True}],
                            [{"secondary_y": True}],
                           
                           ],
                    subplot_titles=('融資維持率',
                                    '上市融資餘額',
                                    '上櫃融資餘額',

                                    )
                    )

date_index=df.index
benchmark_values=benchmark.reindex(df.index)

# 融資mt_rate
fig.add_trace(
    go.Scatter(x=date_index, y=benchmark_values, name="大盤加權報酬指數",line=dict(width=3)),
    secondary_y=False, row=1, col=1
)

fig.add_trace(
    go.Scatter(x=date_index, y=df.values, name="融資維持率"),
    secondary_y=True, row=1, col=1
)

fig.add_trace(
    go.Scatter(x=date_index, y=df.rolling(10).mean().values, name="融資維持率_ma10"),
    secondary_y=True, row=1, col=1
)


# 買賣超
fig.add_trace(
    go.Scatter(x=date_index, y=df2['上市融資交易金額'], fill='tozeroy',
                line=dict(width=0.5, color='#efd267'), name="上市融資餘額"),
    secondary_y=False, row=2, col=1
)

fig.add_trace(
    go.Bar(x=date_index, y=df2['上市融資買賣超'],
            marker_color=df2['上市融資買賣超'].apply(lambda s: 'red'  if s&gt;0 else 'green' ), name="上市融資買賣超"),
    secondary_y=True, row=2, col=1
)


# otc買賣超
fig.add_trace(
    go.Scatter(x=date_index, y=df2['上櫃融資交易金額'], fill='tozeroy',
                line=dict(width=0.5, color='#efd267'), name="上櫃融資餘額"),
    secondary_y=False, row=3, col=1
)

fig.add_trace(
    go.Bar(x=date_index, y=df2['上櫃融資買賣超'],
            marker_color=df2['上櫃融資買賣超'].apply(lambda s: 'red'  if s&gt;0 else 'green' ), name="上櫃融資買賣超"),
    secondary_y=True, row=3, col=1
)


# remove empty date(holiday)
dt_all = pd.date_range(start=date_index.values[0], end=date_index.values[-1])
# retrieve the dates that are in the original datset
dt_obs = [d.strftime("%Y-%m-%d") for d in pd.to_datetime(close.index)]
# define dates with missing values
dt_breaks = [d for d in dt_all.strftime("%Y-%m-%d").tolist() if not d in dt_obs]
# hide dates with no values
fig.update_xaxes(rangebreaks=[dict(values=dt_breaks)])

# Add figure title


fig.update_layout(
    width=1500,
    height=800,
    title='台股大盤融資5',
    title_font_color="navy",
    title_font_size=20,
    hovermode='x unified',
    yaxis=dict(
        title='指數',
        showgrid=False
    ),
    yaxis2=dict(
        title='融資維持率',
    ),
    yaxis3=dict(
        title='price',
        showgrid=False
    ),
    yaxis4=dict(
        title='買賣超(億)',
    ),
    yaxis5=dict(
        title='price',
        showgrid=False
    ),
    yaxis6=dict(
        title='買賣超(億)',
    ),
        showlegend=True,
        xaxis=dict(
            rangeselector=dict(
                buttons=list([
                    dict(count=1,
                        label="1m",
                        step="month",
                        stepmode="backward"),
                    dict(count=6,
                        label="6m",
                        step="month",
                        stepmode="backward"),
                    dict(count=1,
                        label="YTD",
                        step="year",
                        stepmode="todate"),
                    dict(count=1,
                        label="1y",
                        step="year",
                        stepmode="backward"),
                    dict(count=3,
                        label="3y",
                        step="year",
                        stepmode="backward"),
                    dict(step="all")
                ])
            ),
            type="date"
        ),
        xaxis2=dict(
            type="date"
        ),
        xaxis3=dict(
            rangeslider=dict(
                visible=True
            ),
            type="date"
        ),
    )

fig.show()</code></pre>



<h3>多重子圖</h3>



<p class="has-medium-font-size">plotly的<a href="https://plotly.com/python/subplots/" target="_blank" rel="noopener">make_subplots</a>可控制多重圖組的畫布。<br>rows與cols參數控制畫布有多少張子圖，如此範例是三列一欄的子圖，繪圖物件的定位也依據此來設定。<br>shared_xaxes用來設定子圖是否要共用X軸，像此範例因有使用rangeslider做拉桿，希望拖動時間軸時，所有子圖能一起連動，所以設定為True。<br>vertical_spacing與horizontal_spacing參數為控制子圖間垂直與水平的間隙。<br>specs為設定圖組的格式，此範例因爲要設定雙Y軸縣市不同數據，有加入 <strong>{&#8220;secondary_y&#8221;: True}</strong>。</p>



<h3>融資維持率折線圖</h3>



<p class="has-medium-font-size">畫布加入add_trace(xxx)的意思是加入子圖物件至大畫布裡，如以下程式是在第一列第一行 (也就是第一張子圖) 繪製融資維持率，並將數值對應到右側的Y軸，設定secondary_y=True。</p>



<pre class="wp-block-code"><code lang="python" class="language-python">fig.add_trace(
    go.Scatter(x=date_index, y=df.values, name="融資維持率"),
    secondary_y=True, row=1, col=1
)</code></pre>



<h3>餘額區域圖</h3>



<p class="has-medium-font-size">區域圖又稱<a href="https://plotly.com/python/filled-area-plots/" target="_blank" rel="noopener">Filled Area Plot</a>，使用go.Scatter(fill=&#8217;tozeroy&#8217;)即可將折線圖以下的區域設定填滿顏色。</p>



<h3>買賣超長條圖</h3>



<p class="has-medium-font-size">長條圖是用go.bar()來控制，這邊要注意長條圖顏色控制用融資買賣超的正負數來控制。</p>



<h3>假日空值處理</h3>



<p class="has-medium-font-size">plotly的小坑是時間序列若碰非連續，會有斷點。像台股資料週六、日未交易，圖表就會有被卡掉的現象。需用fig.update_xaxes(rangebreaks=[dict(values=dt_breaks)])來解決。</p>



<h3>layout設定</h3>



<p class="has-medium-font-size">設定畫布的大標題、長寬、子圖的X、Y軸細節，如showgrid只用每個子圖其中一個Ｙ軸對應，不然雙Y軸對應會顯得雜亂。<br>rangeselector能產生圖標左上的日期選取按鈕工具列，點擊1m會將資料帶到近1月，點擊YTD會將資料帶到最近一年度之後的資料，如今天是2022-05-17，會將資料限縮在2022-01-01之後。<br>rangeslider則是子圖最下方的拉桿控制。</p>



<h3>結語</h3>



<p class="has-medium-font-size">plotly有許多互動圖表功能可使用，熟悉後就十分方便，能玩轉更種資料，將FinLab API延伸出更多應用。<br>融資籌碼指標除了大盤融資維持率，個股的維持率與斷頭指標的估算也能幫助我們判斷個股是否落底，靜待下回分曉囉</p>



<h3><a href="https://drive.google.com/file/d/19XQAi4_K9onxcxOszAytJ9X8bsKYCrzr/view?usp=sharing" target="_blank" rel="noopener">colab程式範例</a></h3>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/plotly-%e5%a4%9a%e9%87%8d%e5%9c%96%e7%b5%84%e8%9e%8d%e8%b3%87%e7%b6%ad%e6%8c%81%e7%8e%87dashboard%e8%a3%bd%e4%bd%9c%e6%95%99%e5%ad%b83/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3560</post-id>	</item>
		<item>
		<title>揭開策略的波動面紗｜MAE&#038;MFE分析圖組使用指南</title>
		<link>https://www.finlab.tw/display_mae_mfe_analysis/</link>
					<comments>https://www.finlab.tw/display_mae_mfe_analysis/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Sat, 19 Feb 2022 05:25:08 +0000</pubDate>
				<category><![CDATA[生產力]]></category>
		<category><![CDATA[技術面]]></category>
		<category><![CDATA[ATR]]></category>
		<category><![CDATA[MAE]]></category>
		<category><![CDATA[MFE]]></category>
		<category><![CDATA[歷史回測]]></category>
		<category><![CDATA[資料視覺化]]></category>
		<category><![CDATA[量化投資]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=3328</guid>

					<description><![CDATA[藉由MAE&#038;MFE分析波動特性做對應操作，不用每次都要堅持跑完煎熬的過程、可能讓我們在更佳點位出場，減少被洗掉、沒高歌離席的遺憾。]]></description>
										<content:encoded><![CDATA[
<p class="has-medium-font-size">一般我們跑回測會取得報酬率曲線、最大回撤、夏普率等策略總體數值，但這些指標讓我們難以一窺策略下每筆交易的實際波動細節。交易就像跑步比賽，若只看<meta charset="utf-8">總體數值結果，就像只看一個人跑步的結果，不看過程細節，但這些過程都是我們可以觀察、優化的階段，比如要觀察策略波動時序、勝敗手交易的波動分布是否明顯分群、策略的停損停利怎麼放比較好？藉由對波動性的分析，就不用每次都要堅持跑完煎熬的過程，可能讓我們在更佳點位出場，減少被洗掉、沒高歌離席的遺憾。</p>



<h2>如何顯示MAE&amp;MFE分析圖組</h2>



<p class="has-medium-font-size"><meta charset="utf-8">Finlab的<a href="https://doc.finlab.tw/reference/analysis/#finlab.analysis.Report.display_mae_mfe_analysis" target="_blank" rel="noopener">回測分析模組</a>可以輕鬆將<meta charset="utf-8"><code>Report.get_trades(...)</code> 的結果帶入<a class="rank-math-link" href="https://plotly.com/graphing-libraries/" target="_blank" rel="noopener">Plotly.python</a>做視覺化呈現。</p>



<h3>程式範例</h3>



<pre class="wp-block-code"><code lang="python" class="language-python">from finlab import data
from finlab.backtest import sim

pb = data.get('price_earning_ratio:股價淨值比')
close = data.get('price:收盤價')

position = (1/(pb * close) * (close &gt; close.average(60)) * (close &gt; 5)).is_largest(20)
report = sim(position, resample='Q',mae_mfe_window=30,mae_mfe_window_step=2)
report.display_mae_mfe_analysis()</code></pre>



<h3>輸出圖組範例</h3>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="1024" src="https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1-1024x1024.png" alt="newplot 1" class="wp-image-4123" srcset="https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1-1024x1024.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1-300x300.png 300w, https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1-150x150.png 150w, https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1-768x768.png 768w, https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1-600x600.png 600w, https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" title="揭開策略的波動面紗｜MAE&amp;MFE分析圖組使用指南 20"></figure>



<h2>名詞定義</h2>



<h3>波幅</h3>



<p class="has-medium-font-size">再分析接下來的圖表前，要先認識一下波幅的分類，有利於分析前建立基礎知識。</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="380" height="248" src="https://www.finlab.tw/wp-content/uploads/2022/02/price-data.png" alt="price data" class="wp-image-3330" srcset="https://www.finlab.tw/wp-content/uploads/2022/02/price-data.png 380w, https://www.finlab.tw/wp-content/uploads/2022/02/price-data-300x196.png 300w" sizes="(max-width: 380px) 100vw, 380px" title="揭開策略的波動面紗｜MAE&amp;MFE分析圖組使用指南 21"></figure>



<ul class="has-medium-font-size"><li>AE (adverse excursion)  : 不利方向幅度，做多的話，就是下跌的波段。</li><li>MAE : 最大不利方向幅度，做多的話，就是持有過程中的最大累積跌幅。</li><li>FE (favorable excursion)  : 有利方向幅度，做多的話，就是上漲的波段。</li><li>BMFE : MAE之前發生的最大有利方向幅度。若BMFE越高，越有可能在碰上MAE之前，先觸及停利出場 (註1)。</li><li>GMFE (Global MFE)  : 全域最大有利方向幅度。若發生在MAE之前，則BMFE等於GMFE。若在MAE之後，則代表要先承受MAE才可能吃到較高的獲利波段。</li><li>MDD (Max Drawdown) : 最大回撤幅度。</li><li>Return : 報酬率。</li></ul>



<h3>Edge ratio</h3>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="1024" src="https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1-1024x1024.png" alt="newplot 1" class="wp-image-4123" srcset="https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1-1024x1024.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1-300x300.png 300w, https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1-150x150.png 150w, https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1-768x768.png 768w, https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1-600x600.png 600w, https://www.finlab.tw/wp-content/uploads/2022/07/newplot-1.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" title="揭開策略的波動面紗｜MAE&amp;MFE分析圖組使用指南 20"></figure>



<p class="has-medium-font-size">來自海龜法則 (註2) 的指標，中文稱優勢比率。<br>edge ratio為平均GMFE / 平均MAE，<meta charset="utf-8">這可以藉此評估進場優勢，一個真正隨機性的訊號大致上會帶來相等的MFE與MAE。<br>若大於1，代表存在正優勢，潛在最大獲利空間比最大虧損多，在持有過程中保有優勢可以中途停利或做其他操作，也就是策略的容錯率較高。反之則為劣勢，可能要抗衡較多的虧損狀態。</p>



<h2>如何解讀圖組</h2>



<p class="has-medium-font-size">將交易分為獲利 (profit-藍點) 與虧損 (loss-紅點) 分別呈現，圖組右方的legend可以任一點選，只看profit或loss的分群呈現。接著會「由上到下、由左至右」，解釋各子圖用途。</p>



<h3>報酬率統計圖</h3>



<figure class="wp-block-image size-full"><img loading="lazy" width="537" height="430" src="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-上午11.40.10.png" alt="截圖 2022 07 25 上午11.40.10" class="wp-image-4128" srcset="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-上午11.40.10.png 537w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-上午11.40.10-300x240.png 300w" sizes="(max-width: 537px) 100vw, 537px" title="揭開策略的波動面紗｜MAE&amp;MFE分析圖組使用指南 23"></figure>



<p class="has-medium-font-size">子圖1-1，呈現策略下每筆交易的報酬率分布，計算出勝率及平均每筆報酬。<br>圖片標題為交易勝率，綠色虛線為平均每筆交易的報酬率。<br>分布曲線越平坦，代表報酬率範圍大，可能有較多的極端報酬率要處理，通常出現在波動大的策略。<br>若呈現右偏型態(右側的尾部更長，分布的主體集中在左側)，代表多數交易為虧損，若整體策略為獲利，則獲利為少筆交易為主要貢獻。<br>若呈現左偏型態(左側的尾部更長，分布的主體集中在右側)，代表多數交易為獲利。<br>若呈現鐘型曲線，代表分布較為平均。</p>



<h3>Edge Ratio 時序圖</h3>



<figure class="wp-block-image size-full"><img loading="lazy" width="546" height="424" src="https://www.finlab.tw/wp-content/uploads/2022/07/edge_ratio.png" alt="edge ratio" class="wp-image-4127" srcset="https://www.finlab.tw/wp-content/uploads/2022/07/edge_ratio.png 546w, https://www.finlab.tw/wp-content/uploads/2022/07/edge_ratio-300x233.png 300w" sizes="(max-width: 546px) 100vw, 546px" title="揭開策略的波動面紗｜MAE&amp;MFE分析圖組使用指南 24"></figure>



<p class="has-medium-font-size">子圖1-2是策略edge ratio隨進場時間 (x軸) 後的變化，可以判斷隨著持有時間推移，策略有沒有波幅操作優勢。</p>



<h4>參數設定</h4>



<p class="has-medium-font-size">edge ratio的計算設定由回測函數<code><a href="https://doc.finlab.tw/reference/sim/" target="_blank" rel="noopener"> backtest.sim()</a></code> 裡的mae_mfe_window, mae_mfe_window_step 兩個參數來控制。</p>



<ul class="has-medium-font-size"><li>mae_mfe_window : 計算mae_mfe於進場後於不同持有天數下的數據變化，主要應用為優勢比率計算。預設為0，只會產生出場階段的mae_mfe。</li><li>mae_mfe_window_step : 與 mae_mfe_window參數做搭配，為時間間隔設定，預設為1。若mae_mfe_window設20，mae_mfe_window_step 設定為2，相當於 python 的range(0,20,2)，以2日為間距計算mae_mfe。</li></ul>



<h4>應用解釋</h4>



<p class="has-medium-font-size">edge ratio若一直保持在1以上，持有都具有優勢，子圖範例就是這類情況，開局就有不錯表現，明顯的谷底落在第8天後持續走高，代表可能延遲到第8天進場會有低點，之後獲利一路放大優勢。<br>edge ratio時序圖走勢有很多種，若是開低走高，一開始都低於1，代表策略可能太早進場，一開始都要先承受虧損，這時可以檢討進場時機點，考慮延遲進場。</p>



<p class="has-medium-font-size"><meta charset="utf-8">若<meta charset="utf-8">edge ratio走勢保持在1以上，代表策略優勢明顯。若還隨著時間走高，獲利空間也上升，策略容錯率就較大，就算因一些因素延遲進場仍有較大機率有獲利範圍。<br>若<meta charset="utf-8">edge ratio走勢很常在1以下，代表策略經常被虧損壓著打，是策略負面訊號。</p>



<p class="has-medium-font-size"><meta charset="utf-8">若隨持有時間變化，優勢漸漸流失，比率開始下降，代表MAE普遍變高，可能是策略催化劑褪色，該策略適合短線操作並考慮加上停利提早出場。<br><meta charset="utf-8">若<meta charset="utf-8">edge ratio走勢跳動，代表無明顯趨勢可判斷。<br>若策略週期是20天，發現time_scale大於20時，edge ratio趨勢持續走升，則透露策略可能太早出場，錯過後面更大的報酬，可以考慮修正持股週期，吃到更大的獲利。</p>



<h3>MAE/Return 分布圖</h3>



<figure class="wp-block-image size-full"><img loading="lazy" width="528" height="409" src="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-上午11.43.44.png" alt="截圖 2022 07 25 上午11.43.44" class="wp-image-4129" srcset="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-上午11.43.44.png 528w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-上午11.43.44-300x232.png 300w" sizes="(max-width: 528px) 100vw, 528px" title="揭開策略的波動面紗｜MAE&amp;MFE分析圖組使用指南 25"></figure>



<p class="has-medium-font-size">子圖1-3，x軸為報酬率，Y軸為MAE，將勝敗手分群顯示成散點圖，比對報酬率與MAE的關係。<br>此範例中可以發現多數獲利的藍點都有較小的MAE，虧損的紅點有較大的MAE。<br>虧損部位的MAE第75%位數為10.77%，幾乎所有的藍點都低於這個位置，也就是說過了這個位置，交易最終就容易是虧損結果，可<strong>設為停損</strong>參考位置，可保留多數獲利部位、減少大賠部位損失。<br>獲利部位的MAE第75%位數為2.93%，代表多數獲利部位在持有過程中可能的最低點區間，碰到這位置後就有較高機率再往上，積極操作者或分批進場者可<strong>設為攤平加碼點</strong>位置，有機會讓獲利空間更多或賠更多。</p>



<h3>MFE/MAE 分布圖</h3>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="412" src="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.00.35-1024x412.png" alt="截圖 2022 07 25 下午12.00.35" class="wp-image-4130" srcset="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.00.35-1024x412.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.00.35-300x121.png 300w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.00.35-768x309.png 768w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.00.35.png 1086w" sizes="(max-width: 1024px) 100vw, 1024px" title="揭開策略的波動面紗｜MAE&amp;MFE分析圖組使用指南 26"></figure>



<p class="has-medium-font-size">從子圖 2-1、2-2 可以觀察MAE與MFE的數據關係，散點圖大小由報酬率來決定。<br>比對兩張圖可發現，策略內許多<meta charset="utf-8">GMFE很大的標的，都比BMFE大，代表許多漲幅都發生在MAE之後。想要有較高獲利，就要先忍受回檔，通常這容易發生在趨勢波段策略。<br>若是短線優異的策略，BMFE 會比較高，可以有較高機率在接觸MAE或停損前先做停利。</p>



<h4>分佈象限圖解</h4>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="665" src="https://www.finlab.tw/wp-content/uploads/2020/09/截圖-2020-09-29-上午7.48.31-1024x665.png" alt="截圖 2020 09 29 上午7.48.31" class="wp-image-2325" srcset="https://www.finlab.tw/wp-content/uploads/2020/09/截圖-2020-09-29-上午7.48.31-1024x665.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/09/截圖-2020-09-29-上午7.48.31-300x195.png 300w, https://www.finlab.tw/wp-content/uploads/2020/09/截圖-2020-09-29-上午7.48.31-768x498.png 768w, https://www.finlab.tw/wp-content/uploads/2020/09/截圖-2020-09-29-上午7.48.31-1536x997.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/09/截圖-2020-09-29-上午7.48.31-2048x1329.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="揭開策略的波動面紗｜MAE&amp;MFE分析圖組使用指南 27"></figure>



<p class="has-medium-font-size">MAE/BMFE分布圖(註3) 能幫助我們看出策略體質、優化設置停損停利。<br>大原則是「分布在第二象限的點越多越好， <meta charset="utf-8">第四象限的點越少越好」、「獲利與虧損明顯分群在不同象限」。<br>如此 stop_loss過濾掉多數mae過大的標的，少過濾掉獲利的標的。take_profit盡量讓多數虧損的交易先觸及停利出場。</p>



<h3>MDD/GMFE 分布圖</h3>



<figure class="wp-block-image size-full"><img loading="lazy" width="512" height="442" src="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-上午11.59.11.png" alt="截圖 2022 07 25 上午11.59.11" class="wp-image-4131" srcset="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-上午11.59.11.png 512w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-上午11.59.11-300x259.png 300w" sizes="(max-width: 512px) 100vw, 512px" title="揭開策略的波動面紗｜MAE&amp;MFE分析圖組使用指南 28"></figure>



<p class="has-medium-font-size"><br>子圖2-3，判斷損益兩平點與鎖利點，橘線為45度線。<br>橘線以上為MDD &gt; GMFE，如果越多獲利點位於這個位置，代表持有歷程可能歷經大回檔吃掉獲利轉為虧損，雖然最終會是獲利，但我們原本有機會賺更多。<br><br>MDD &gt; GMFE 的情況常是一開始就吃大虧損～後來轉正，或是途中大賺後，突然急速下殺賠錢。都是比較不理想的狀況。子標題顯示的「Missed win-profits pct」為「獲利交易位於橘線上的數量/獲利交易數」，數值越高代表潛在錯失獲利的機會較高，數值越高代表越需要設定移動停利去保護獲利。<br><br>橘線以下為MDD &lt; GMFE，代表獲利的交易達到價格高點後，即使後來回檔，因回檔不會吃掉全部GMFE，所以不會轉為虧損。若是虧損的部位位於橘線以下，由於MAE &lt;= MDD &lt; GMFE、MAE &lt;= Return，可以推導出即使虧損，MAE也會比GMFE小，比較高的機會是小虧出場。子標題顯示的「Breakeven safe pct」 為「橘線下的比例/全部交易數」，也就是越不容易輸的比例。</p>



<h3>MAE、ＭFE 密度分佈圖</h3>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="276" src="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.40.53-1024x276.png" alt="截圖 2022 07 25 下午12.40.53" class="wp-image-4134" srcset="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.40.53-1024x276.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.40.53-300x81.png 300w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.40.53-768x207.png 768w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.40.53-1536x414.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.40.53.png 1573w" sizes="(max-width: 1024px) 100vw, 1024px" title="揭開策略的波動面紗｜MAE&amp;MFE分析圖組使用指南 29"></figure>



<p class="has-medium-font-size">子圖3-1、3-2、3-3。由 <a href="https://plotly.com/python/distplot/" target="_blank" rel="noopener">plotly-distplot</a> 繪製而成，看指標的比例分佈曲線。<br>子圖3-1為 MAE 密度分佈圖，通常策略體質若較優，勝敗手的高峰會有明顯分群，贏錢的MAE通常較小、輸錢的MAE通常較大，向右過了藍紅曲線的交叉點後，虧損的交易會變得比獲利的交易多，可以視為比較緊的停損點或是開始分批停損的參考。勝敗手Q3(第75分位數)的應用可參考MAE/Return 分布圖的說明，勝手Q3為積極者加碼點，敗手Q3為絕對停損點，再不跑就容易大賠啦！<br><br>子圖 3-2、3-3 為 MFE 密度分佈圖，應用概念與子圖3-1類似。<br>多數的敗手不會超過敗手MFE Q3 的位置 (圖中的5.16)，換句話說，漲過這個點後，多數交易最終會是獲利的，既然最終會是獲利的，那就會是一個不錯的突破加碼點位，若想要更高的機率確保加碼點安全性，可以用敗手MFE 大於Q3 的位置，例如藍紅曲線的交叉點。<br>勝手MFE Q3 則可視為分批停利減碼點參考位置。</p>



<p class="has-normal-font-size"></p>



<h2>Indices Stats</h2>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="288" src="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.42.21-1024x288.png" alt="截圖 2022 07 25 下午12.42.21" class="wp-image-4133" srcset="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.42.21-1024x288.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.42.21-300x84.png 300w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.42.21-768x216.png 768w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.42.21-1536x431.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午12.42.21.png 1560w" sizes="(max-width: 1024px) 100vw, 1024px" title="揭開策略的波動面紗｜MAE&amp;MFE分析圖組使用指南 30"><figcaption>group模式</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="283" src="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午1.41.57-1024x283.png" alt="截圖 2022 07 25 下午1.41.57" class="wp-image-4137" srcset="https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午1.41.57-1024x283.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午1.41.57-300x83.png 300w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午1.41.57-768x212.png 768w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午1.41.57-1536x425.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/07/截圖-2022-07-25-下午1.41.57.png 1563w" sizes="(max-width: 1024px) 100vw, 1024px" title="揭開策略的波動面紗｜MAE&amp;MFE分析圖組使用指南 31"><figcaption>overlay模式</figcaption></figure>



<p class="has-normal-font-size">子圖4-1，將各種數據用<a class="rank-math-link" href="https://plotly.com/python/violin/" target="_blank" rel="noopener">提琴圖</a>呈現統計結果，可藉由<code>display_mae_mfe_analysis</code> 中的 violinmode 參數控制顯示模式，預設為group模式，將勝敗手分群統計，overlay模式為全數統計。提琴圖hover過後能顯示數據的<strong>分位數</strong>資料，可快速觀察所有數據的統計分佈，方便設定停損停利點能參考分位數的數值。<br>除了先前介紹的mae_mfe，其他還有統計數值:</p>



<ul class="has-normal-font-size"><li>pdays_ratio:獲利交易日數/交易持有日數，中位數數值若大於0.5，代表多數交易持有期間都是獲利，操作起來更有彈性。若mfe高，但pdays_ratio低，代表若沒把握到衝高的少數時期，則會錯過理想報酬。</li></ul>



<h2>結論</h2>



<p class="has-medium-font-size">是不是對波動分析更加瞭解了呢？一張圖表包山包海，完整分析出策略細節。</p>



<p class="has-medium-font-size">若想更深入了解<meta charset="utf-8">MAE/MFE最大幅度分析法。除了國外資源，中文內容推薦<a class="rank-math-link" href="https://www.maemfe.org/search/label/%E4%BA%A4%E6%98%93-MAE%2FMFE%E6%9C%80%E5%A4%A7%E5%B9%85%E5%BA%A6%E5%88%86%E6%9E%90%5B%E5%BD%B1%E7%89%87%5D" target="_blank" rel="noopener">藍月記事</a>，其對這方面的策略體質觀察、優化有全方位的影片教學內容，作者對量化分析與交易心理有獨道見解，推薦大家前往學習。</p>



<h2>相關學習資源</h2>



<ul class="has-medium-font-size"><li>註1:<a href="https://www.maemfe.org/2019/11/maemfe-5.html" target="_blank" rel="noopener">最大幅度分析05- MFE 為何要在 MAE 之前？</a> &#8211; 藍月記事</li><li>註2:Edge ratio:<a class="rank-math-link" href="https://iamernie8199.blogspot.com/2020/03/blog-post.html" target="_blank" rel="noopener">海龜法則觀後感</a></li><li>註3:<a href="https://www.maemfe.org/2019/11/maemfe-8.html" target="_blank" rel="noopener">最大幅度分析08-MAE MFE 分布 SL/TP 四大區塊</a> &#8211; 藍月記事</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/display_mae_mfe_analysis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3328</post-id>	</item>
		<item>
		<title>Bokeh 探索頻道(1)~Python互動式圖表函數庫初體驗</title>
		<link>https://www.finlab.tw/python-bokeh1-setup-and-first-impression/</link>
					<comments>https://www.finlab.tw/python-bokeh1-setup-and-first-impression/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Mon, 20 Jul 2020 12:02:48 +0000</pubDate>
				<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[BOKEH]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[資料視覺化]]></category>
		<guid isPermaLink="false">http://34.96.136.135/?p=1120</guid>

					<description><![CDATA[Python 視覺化套件使用經驗

Python套件多，品質不一。用module之前，我習慣先看github星星確認認可度，有1000個以上多是品質保證，再看release history，看是否有被持續維護，那種2年以上沒新版本的，採坑機率高。Bokeh看來沒問題。]]></description>
										<content:encoded><![CDATA[
<h3 id="Python-視覺化套件使用經驗">Python 視覺化套件使用經驗</h3>



<p>Python套件多，品質不一。用module之前，我習慣先看github星星確認認可度，有1000個以上多是品質保證，再看release history，看是否有被持續維護，那種2年以上沒新版本的，採坑機率高。Bokeh看來沒問題。</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="246" src="http://34.96.136.135/wp-content/uploads/2020/07/y3p5KBo-1024x246.png" alt="y3p5KBo" class="wp-image-1121" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/y3p5KBo-1024x246.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/y3p5KBo-300x72.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/y3p5KBo-768x185.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/y3p5KBo-1536x369.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/y3p5KBo.png 2046w" sizes="(max-width: 1024px) 100vw, 1024px" title="Bokeh 探索頻道(1)~Python互動式圖表函數庫初體驗 32"></figure></div>



<p>平常python視覺化的主力套件是matplotlib和seaborn，前者是20歲老套件，是視覺化元祖，許多套件基礎都是建構在matplotlib上，像seaborn就是，有更簡潔的寫法和精美圖例，兩者都以靜態視覺居多，缺乏變化性(或是要費點功)。<br>Python守備範圍廣，但在網頁前端仍難以與Java Script抗衡，而D3.js函數庫也要花不少學習成本，有沒有辦法用Python做出JS動態視覺的效果？</p>



<p>Bokeh的出世，提供了Python與D3.js之間的橋梁，讓你可以用Python做出D3.js常用功能的效果，減少學習成本，高效開發，輕鬆描述統計結果。</p>



<h3 id="厲害在哪裡？">厲害在哪裡？</h3>



<p>先來看Gallory，python視覺化套件很多，範例圖不夠精美的，可考慮跳過。</p>



<ol><li>化學元素週期表</li></ol>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="459" src="http://34.96.136.135/wp-content/uploads/2020/07/81XiMAU-1-1024x459.png" alt="81XiMAU 1" class="wp-image-1123" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/81XiMAU-1-1024x459.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/81XiMAU-1-300x134.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/81XiMAU-1-768x344.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/81XiMAU-1-1536x688.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/81XiMAU-1-2048x918.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Bokeh 探索頻道(1)~Python互動式圖表函數庫初體驗 33"></figure></div>



<ol start="2"><li>雷達圖</li></ol>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="1000" src="http://34.96.136.135/wp-content/uploads/2020/07/hMPxBgq-1-1024x1000.png" alt="hMPxBgq 1" class="wp-image-1125" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/hMPxBgq-1-1024x1000.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/hMPxBgq-1-300x293.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/hMPxBgq-1-768x750.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/hMPxBgq-1.png 1422w" sizes="(max-width: 1024px) 100vw, 1024px" title="Bokeh 探索頻道(1)~Python互動式圖表函數庫初體驗 34"></figure></div>



<ol start="3"><li>互動式wiget散點圖表</li></ol>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="613" src="http://34.96.136.135/wp-content/uploads/2020/07/9vnv8yZ-1-1024x613.png" alt="9vnv8yZ 1" class="wp-image-1127" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/9vnv8yZ-1-1024x613.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/9vnv8yZ-1-300x179.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/9vnv8yZ-1-768x459.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/9vnv8yZ-1-1536x919.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/9vnv8yZ-1-2048x1225.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Bokeh 探索頻道(1)~Python互動式圖表函數庫初體驗 35"></figure></div>



<p>逛了一圈，發現Bokeh圖表精美、範例多、都有附原始碼，官方教學也完整，有tutorial jupyter檔案教學。<br>看來比matplotlib強大，也比plotly漂亮…，函數庫使用看來也不難，且可鑲嵌到Django等Web框架，無論是local或遠端的前端呈現都可以效率開發。</p>



<h3 id="開箱試玩時間">開箱試玩時間</h3>



<p>要注意的是bokeh會預設連BokehJS cdn，但連線有時不是很穩定，這時可多加”INLINE”環境變數設定，讓BokehJS驅動於local python env。</p>



<pre class="wp-block-code"><code class="">from bokeh.resources import INLINE
bokeh.io.output_notebook(INLINE)</code></pre>



<p>Bokeh可以在Jupyter呈現開發也可以跳轉出html檔，可自由設定，預設是跳轉html檔(output_file())。若要更改預設，必須加上<code>bokeh.io.reset_output()</code>重設環境預設。</p>



<pre class="wp-block-code"><code class="">output_notebook() ＃jupyter呈現
output_file()  ＃html呈現</code></pre>



<p>fig物件可設定tools參數，圖表會自帶縮放、重整、儲存等功能。<br>以下是參考官方範例後微調的程式。</p>



<pre class="wp-block-code"><code class="">from bokeh.plotting import figure, output_file, show, output_notebook
import bokeh.io
from bokeh.resources import INLINE

# env settings 環境變數設定
bokeh.io.reset_output()
bokeh.io.output_notebook(INLINE)

# prepare some data
x = [0.1, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0]
y0 = [i**2 for i in x]
y1 = [10**i for i in x]
y2 = [10**(i**2) for i in x]

# output to static HTML file
# output_file("log_lines.html")

# create a new plot
p = figure(
tools="pan,box_zoom,reset,save",
y_axis_type="log", y_range=[0.001, 10**11], title="log axis example",
x_axis_label='sections', y_axis_label='particles'
)

# add some renderers
p.line(x, x, legend_label="y=x")
p.circle(x, x, legend_label="y=x", fill_color="white", size=8)
p.line(x, y0, legend_label="y=x^2", line_width=3)
p.line(x, y1, legend_label="y=10^x", line_color="red")
p.circle(x, y1, legend_label="y=10^x", fill_color="red", line_color="red", size=6)
p.line(x, y2, legend_label="y=10^x^2", line_color="orange", line_dash="4 4")

# show the results
show(p)
output_notebook() </code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="717" src="http://34.96.136.135/wp-content/uploads/2020/07/cK9ZFBB-1024x717.png" alt="cK9ZFBB" class="wp-image-1128" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/cK9ZFBB-1024x717.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/cK9ZFBB-300x210.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/cK9ZFBB-768x538.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/cK9ZFBB.png 1453w" sizes="(max-width: 1024px) 100vw, 1024px" title="Bokeh 探索頻道(1)~Python互動式圖表函數庫初體驗 36"></figure></div>



<h3 id="投資圖表試玩">投資圖表試玩</h3>



<p>Bokeh官方有提供sample_data給大家練習，gallery豐富的範例都取自sample_data，對比官方的資料格式就能輕鬆模仿應用，沒啥高深程式技巧。下載sample_data指令為<code>bokeh.sampledata.download()</code>，直接貼在jupyter執行。檔案會下載到bokeh module裡。</p>



<h3 id="檢查蘋果電腦範例資料-json">檢查蘋果電腦範例資料(json)</h3>



<pre class="wp-block-code"><code class="">from bokeh.sampledata.stocks import AAPL
# 檢查欄位
AAPL.keys()
#dict_keys(['date', 'open', 'high', 'low', 'close', 'volume', 'adj_close'])</code></pre>



<h3 id="ColumnDataSource物件為Bokeh資料驅動渲染核心">ColumnDataSource物件為Bokeh資料驅動渲染核心</h3>



<p>dataframe要傳入ColumnDataSource才能驅動js。<br>providing the data that is visualized by the glyphs of the plot<br><a href="https://docs.bokeh.org/en/latest/docs/user_guide/data.html" rel="noreferrer noopener" target="_blank">https://docs.bokeh.org/en/latest/docs/user_guide/data.html</a></p>



<h3 id="HoverTool">HoverTool</h3>



<p>游標滑過時顯示資料</p>



<h3 id="Click-policy">Click_policy</h3>



<p>藉由標籤控制數值顯示<br>hide為隱藏，mute為切換自訂顯示模式<br>可在muted_color控制顏色, muted_alpha控制顏色濃淡</p>



<h3 id="程式範例">程式範例</h3>



<pre class="wp-block-code"><code class="">
import bokeh.io
from bokeh.resources import INLINE
from bokeh.models import HoverTool
from bokeh.palettes import Spectral4
from bokeh.plotting import figure, output_file, show, output_notebook, ColumnDataSource
from bokeh.sampledata.stocks import AAPL, GOOG, IBM, MSFT
import pandas as pd

# env settings
bokeh.io.reset_output()
bokeh.io.output_notebook(INLINE)


# set hover
## HoverTool
# 游標滑過時顯示資料,date格式需要轉換，不然會是timestamp
hover = HoverTool(
    tooltips = [
        ("date", "@date"),
        ("close", "@open"),
        ("close", "@close"),
        ("high", "@high"),
        ("low", "@low"),
        ("volume","@volume")
    ], 
    formatters={"@date":"datetime"}
)

# set figure
p = figure(
    plot_width=1000, 
    plot_height=400, 
    x_axis_type="datetime",
    tools=[hover,"pan,box_zoom,reset,save"],
)
p.title.text = 'Stock_Price--Click on legend entries to mute the corresponding lines and show daily details in hover'

# use ColumnDataSource to control
# click_policy
# 藉由標籤控制數值顯示
# hide為隱藏，mute為切換自訂顯示模式
# 可在muted_color控制顏色, muted_alpha控制顏色濃淡

for data, name, color in zip([AAPL, IBM, MSFT, GOOG], ["AAPL", "IBM", "MSFT", "GOOG"], Spectral4):
    df = pd.DataFrame(data)
    df['date'] = pd.to_datetime(df['date'])
    source = ColumnDataSource(df)
    p.line(x="date",y="close", line_width=2, color=color, alpha=0.8,
           muted_color=color, muted_alpha=0.2, legend_label=name,source=source)


p.legend.location = "top_left"
# use hide or mute
p.legend.click_policy="mute"

# output_file("interactive_legend.html", title="interactive_legend.py example")

show(p)
output_notebook() </code></pre>



<h3 id="兩種模式結果比較">兩種模式結果比較</h3>



<ol><li>Mute</li></ol>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="445" src="http://34.96.136.135/wp-content/uploads/2020/07/xkQhfUt-1024x445.png" alt="xkQhfUt" class="wp-image-1129" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/xkQhfUt-1024x445.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/xkQhfUt-300x130.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/xkQhfUt-768x334.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/xkQhfUt-1536x667.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/xkQhfUt.png 1706w" sizes="(max-width: 1024px) 100vw, 1024px" title="Bokeh 探索頻道(1)~Python互動式圖表函數庫初體驗 37"></figure></div>



<p>       2.  Hide</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="456" src="http://34.96.136.135/wp-content/uploads/2020/07/fKmVrH1-1-1024x456.png" alt="fKmVrH1 1" class="wp-image-1131" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/fKmVrH1-1-1024x456.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/fKmVrH1-1-300x134.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/fKmVrH1-1-768x342.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/fKmVrH1-1-1536x684.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/fKmVrH1-1.png 1746w" sizes="(max-width: 1024px) 100vw, 1024px" title="Bokeh 探索頻道(1)~Python互動式圖表函數庫初體驗 38"></figure></div>



<h3 id="小結">小結</h3>



<p>這篇主要是來體會一下Bokeh的效果，不用會JS，隨便玩就有這種效果，蠻滿意的，值得再深入一下細節，把以前matplotlib的圖表都轉來bokeh，無論是在工作上的資料報告還是看盤需要，都蠻方便的。</p>



<p>假如想要進一步學習 Bokeh，我將會分享一系列文章，來介紹 Bokeh 在投資領域的視覺化喔！<br><a href="https://www.finlab.tw/python-bokeh1-setup-and-first-impression/bokeh-stock-chart-with-technical-analysis">下一篇文章，帶你繪製專業的股價和技術指標</a>！</p>



<h3 id="程式檔案連結">程式檔案連結</h3>



<p><a href="https://github.com/benbilly3/bokeh_explore" target="_blank" rel="noopener">https://github.com/benbilly3/bokeh_explore</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/python-bokeh1-setup-and-first-impression/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1120</post-id>	</item>
		<item>
		<title>Bokeh 探索頻道(2)~客製化技術圖表升級</title>
		<link>https://www.finlab.tw/bokeh-stock-chart-with-technical-analysis/</link>
					<comments>https://www.finlab.tw/bokeh-stock-chart-with-technical-analysis/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Mon, 20 Jul 2020 12:02:48 +0000</pubDate>
				<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[BOKEH]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[資料視覺化]]></category>
		<guid isPermaLink="false">http://34.96.136.135/?p=1163</guid>

					<description><![CDATA[改造動機
上次介紹了Bokeh厲害的地方，那可不可以應用到投資圖表的繪製呢？
在Hahow課程：『Python 理財：打造小資族選股策略』的單元20中，韓老師用Talib和matplotlib套件示範了如何提取資料和客製化技術圖表繪圖，點出應用方向，然而課程重點是放在選股，不是在視覺化，圖表功能比較簡單，當時Bokeh也沒那麼厲害。]]></description>
										<content:encoded><![CDATA[
<h3 id="改造動機">改造動機</h3>



<p><a href="https://www.finlab.tw/python-bokeh1-setup-and-first-impression/">上次介紹了Bokeh厲害的地方</a>，那可不可以應用到投資圖表的繪製呢？<br>在Hahow課程：『Python 理財：打造小資族選股策略』的單元20中，韓老師用Talib和matplotlib套件示範了如何提取資料和客製化技術圖表繪圖，點出應用方向，然而課程重點是放在選股，不是在視覺化，圖表功能比較簡單，當時Bokeh也沒那麼厲害。</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="557" src="http://34.96.136.135/wp-content/uploads/2020/07/Q8hEt30-1-1024x557.png" alt="Q8hEt30 1" class="wp-image-1165" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/Q8hEt30-1-1024x557.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/Q8hEt30-1-300x163.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/Q8hEt30-1-768x418.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/Q8hEt30-1-1536x836.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/Q8hEt30-1.png 2035w" sizes="(max-width: 1024px) 100vw, 1024px" title="Bokeh 探索頻道(2)~客製化技術圖表升級 39"></figure></div>



<p>有些同學希望能有更精美的圖表可使用，搭配課程精彩的選股程式技巧，不就更完美了？這個願望今天就可以實現，後面有銜接課程的程式碼直接提供使用。<br>現在有Bokeh的幫忙，用Python也能打造不錯的互動圖表效果，接下來就要綜合小資族課程、Bokeh、網路上各路技巧，來打造適用於Hahow課程的新圖表。沒參與課程的可以用github 連結裡的demo_json檔來試試，只要資料格式對應，都可使用。</p>



<h4 id="github-https-github-com-benbilly3-bokeh-explore">github:<a href="https://github.com/benbilly3/bokeh_explore" rel="noreferrer noopener" target="_blank">https://github.com/benbilly3/bokeh_explore</a></h4>



<p>使用的程式檔為technical_chart。</p>



<h3 id="繪圖技巧說明">繪圖技巧說明</h3>



<p>寫Python就要利用其他魔法師的咒語，省時有效率，先來Bokeh gallery看看沒有範例。<br>結果有現成的Ｋ線圖範例，太好了！</p>



<figure class="wp-block-image"><img src="https://i.imgur.com/wjTomBS.png" alt="wjTomBS" title="Bokeh 探索頻道(2)~客製化技術圖表升級 40"></figure>



<p>雖然仍是陽春的靜態圖，但至少有了改造藍圖，從官網的程式碼：<br><a href="https://docs.bokeh.org/en/latest/docs/gallery/candlestick.html" rel="noreferrer noopener" target="_blank">https://docs.bokeh.org/en/latest/docs/gallery/candlestick.html</a></p>



<p>可以發現bokeh輕鬆地用pandas分類紅黑棒資料，再用segment畫引線和用vbar畫長棒圖。眼尖的人可以發現股價碰到假日的時候會有空值，這造成閱讀上有些礙眼，能否有讓時間序列日期資料的解決辦法呢？</p>



<p>在還不熟bokeh的時候，stackoverflow也是我們好朋友．．．處理關鍵在讓日期轉為文字，不用會自動補假日日期的datetime。</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">fig.xaxis.major_label_overrides = {
            i: date.strftime('%Y/%m/%d') for i, date in enumerate(pd.to_datetime(df["date"]))
            # pd.date_range(start='3/1/2000', end='1/08/2018')
        }</code></pre>



<p>bokeh是物件導向繪圖庫，都封裝相當好，基本上沒啥程式技巧，就像玩樂高積木一樣，搜尋工具來堆，不難，比較繁瑣，內容頗多。<br>接著主要會實踐下列功能到圖表，有興趣學的可以看連結。</p>



<h4 id="1-figure圖紙設定，bokeh各種models應用">1. figure圖紙設定，bokeh各種models應用</h4>



<p><a href="https://docs.bokeh.org/en/latest/docs/reference/plotting.html" target="_blank" rel="noopener">https://docs.bokeh.org/en/latest/docs/reference/plotting.html</a></p>



<h4 id="2-處理假日日期造成的資料不連續問題，x-range-overwrite技巧">2. 處理假日日期造成的資料不連續問題，x_range overwrite技巧</h4>



<p><a href="https://stackoverflow.com/questions/23585545/how-do-i-make-bokeh-omit-missing-dates-when-using-datetime-as-x-axis" target="_blank" rel="noopener">https://stackoverflow.com/questions/23585545/how-do-i-make-bokeh-omit-missing-dates-when-using-datetime-as-x-axis</a></p>



<h4 id="3-hover互動資料顯示">3. hover互動資料顯示</h4>



<p><a href="https://docs.bokeh.org/en/latest/docs/user_guide/tools.html" target="_blank" rel="noopener">https://docs.bokeh.org/en/latest/docs/user_guide/tools.html</a></p>



<h4 id="4-legend物件控制，從label控制線圖開關。將legend移到圖表外，讓版面清晰。">4. legend物件控制，從label控制線圖開關。將legend移到圖表外，讓版面清晰。</h4>



<p><a href="https://stackoverflow.com/questions/26254619/position-of-the-legend-in-a-bokeh-plothttps://docs.bokeh.org/en/latest/docs/user_guide/interaction/legends.html" target="_blank" rel="noopener">https://stackoverflow.com/questions/26254619/position-of-the-legend-in-a-bokeh-plothttps://docs.bokeh.org/en/latest/docs/user_guide/interaction/legends.html</a></p>



<h4 id="5-位移、縮放、十字線、重置、存檔工具">5. 位移、縮放、十字線、重置、存檔工具</h4>



<p><a href="https://docs.bokeh.org/en/latest/docs/user_guide/tools.html" target="_blank" rel="noopener">https://docs.bokeh.org/en/latest/docs/user_guide/tools.html</a></p>



<h4 id="6-second-y-ranges繪製-使用雙軸">6. second y_ranges繪製(使用雙軸)</h4>



<p><a href="https://docs.bokeh.org/en/latest/docs/user_guide/plotting.html#userguide-plotting-twin-axes" target="_blank" rel="noopener">https://docs.bokeh.org/en/latest/docs/user_guide/plotting.html#userguide-plotting-twin-axes</a></p>



<h4 id="7-利用vbar和segment快速繪製k線-並將均線帶入。">7. 利用vbar和segment快速繪製k線,並將均線帶入。</h4>



<p><a href="https://docs.bokeh.org/en/latest/docs/gallery/candlestick.html" target="_blank" rel="noopener">https://docs.bokeh.org/en/latest/docs/gallery/candlestick.html</a></p>



<h4 id="8-建立技術線子圖組">8. 建立技術線子圖組</h4>



<p><a href="https://docs.bokeh.org/en/latest/docs/user_guide/layout.html#userguide-layout" target="_blank" rel="noopener">https://docs.bokeh.org/en/latest/docs/user_guide/layout.html#userguide-layout</a></p>



<h5 id="經過神奇的魔法就有hahow課程的進化版，包含以上的功能，實踐了不錯的效果！加入output-file-‘檔名’-就可產生html檔在瀏覽器使用，只要再寫一個傳導查詢變數的API，就能串接做一個服務出來，之後會講用FastApi寫後端來串Bokeh。">經過神奇的魔法就有hahow課程的進化版，包含以上的功能，實踐了不錯的效果！加入output_file(‘檔名’)就可產生html檔在瀏覽器使用，只要再寫一個傳導查詢變數的API，就能串接做一個服務出來，之後會講用FastApi寫後端來串Bokeh。</h5>



<figure class="wp-block-image"><img src="https://i.imgur.com/4BY8lBt.png" alt="4BY8lBt" title="Bokeh 探索頻道(2)~客製化技術圖表升級 41"></figure>



<h3 id="課程相容資料提取工具">課程相容資料提取工具</h3>



<h4 id="從python小資族的sqlite提取資料">從python小資族的sqlite提取資料</h4>



<p>若DB為pickle檔，須將pd.read_sql那行修改為read_pickle，並要注意格式。</p>



<p>如果有上過韓老師python小資族，可將course11.ipynb上頭用read_sql取資料的程式改為下部份取資料，輸入股號和資料開始日期，產出的data丟入後面的繪圖程式，即可產生互動式圖表。</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">import pandas as pd
import sqlite3
import os
import json
from talib import abstract


def get_price_data(stock_id,date):
    # connect to sql
    conn = sqlite3.connect(os.path.join('data', "data.db"))
    # read data from sql
    df = pd.read_sql(f"select stock_id,證券名稱, date, 開盤價, 收盤價, 最高價, 最低價, 成交股數 from price where stock_id='{stock_id}' and date > '{date}'", conn,
        index_col=['date'])
    # rename the columns of dataframe
    df.index=df.index.astype(str).str.split(" ").str[0]
    df.rename(columns={'收盤價':'close','證券名稱':'name', '開盤價':'open', '最高價':'high', '最低價':'low', '成交股數':'volume'}, inplace=True)
    df['MA5']=df['close'].rolling(5).mean()
    df['MA10']=df['close'].rolling(10).mean()
    df['MA20']=df['close'].rolling(20).mean()
    df['MA60']=df['close'].rolling(60).mean()
    df['MA120']=df['close'].rolling(120).mean()
    df['volume']=df['volume']/1000

    
    RSI = pd.DataFrame(abstract.RSI(df, timeperiod=12),columns=['RSI_12'])
    RSI['RSI_36']=abstract.RSI(df, timeperiod=36)
    RSI=RSI.to_dict()
    STOCH = abstract.STOCH(df).to_dict()
    MACD=abstract.MACD(df).to_dict()
    basic=df.iloc[-1,:2].to_dict()
    df=df.drop(columns=['stock_id','name']).to_dict()
    data={'basic':basic,'price_df':df,'RSI':RSI,'STOCH' :STOCH,'MACD':MACD }
    
    return data</code></pre>



<h3 id="程式碼下載">程式碼下載</h3>



<p>使用的繪圖程式檔為technical_chart，將get_price_data(stock_id,date)帶入technical_chart(json_df)即可繪圖，可到gitlab下載bokeh_explore。</p>



<h4 id="github-https-github-com-benbilly3-bokeh-explore-1">github:<a href="https://github.com/benbilly3/bokeh_explore" rel="noreferrer noopener" target="_blank">https://github.com/benbilly3/bokeh_explore</a></h4>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">import pandas as pd
from bokeh.io import show, output_file, output_notebook
from bokeh.plotting import figure
from bokeh.models import SingleIntervalTicker, LinearAxis, ColumnDataSource, HoverTool
from bokeh.palettes import Spectral4, Dark2
from bokeh.models import LinearAxis, Range1d, Legend
from bokeh.layouts import column


def technical_chart(json_df):
    # get data
    stock_data = json_df
    df = pd.DataFrame(stock_data['price_df']).reset_index().rename(columns={'index': 'date'})
    df = df.reset_index()
    inc = df.close > df.open
    dec = df.open > df.close
    inc_data = df[inc]
    dec_data = df[dec]
    df_source = ColumnDataSource(df)
    inc_source = ColumnDataSource(inc_data)
    dec_source = ColumnDataSource(dec_data)

    # set hover
    hover = HoverTool(
        tooltips=[
            ("date", "@date"),
            ("close", "@open"),
            ("open", "@close"),
            ("high", "@high"),
            ("low", "@low"),
            ("volume", "@volume")
        ],
        formatters={"@date": "datetime"}
    )

    hover_rsi_kd = HoverTool(
        tooltips=[
            ("date", "@date"),
            ("RSI_12", "@RSI_12"),
            ("RSI_36", "@RSI_36"),
            ("slowk", "@slowk"),
            ("slowd", "@slowd"),

        ],
        formatters={"@date": "datetime"}

    )

    hover_macd = HoverTool(
        tooltips=[
            ("date", "@date"),
            ("macd", "@macd"),
            ("macdsignal", "@macdsignal"),
            ("macdhist", "@macdhist"),
        ],
        formatters={"@date": "datetime"}

    )

    # set figure data
    basic_data = stock_data['basic']
    title = basic_data['stock_id'] + ' ' + basic_data['name'] + ' ' + 'technical_chart'
    x_end = len(df)
    show_init_num = 120
    x_start = x_end - show_init_num
    interval_freq = show_init_num / 12
    y_start = df['close'].min() * 0.95
    y_end = df['close'].max() * 1.05
    p1 = figure(plot_width=1000, title=title, plot_height=500, x_range=(x_start, x_end), y_range=(y_start, y_end),
                tools=[hover, "pan,zoom_in,zoom_out,crosshair,reset,save"], toolbar_location="above" ,y_axis_label="price")
    p2 = figure(plot_width=1000, title='RSI&amp;KD', plot_height=250, x_range=(x_start, x_end),
                background_fill_color="#fafafa", tools=[hover_rsi_kd, "pan,zoom_in,zoom_out,crosshair,reset,save"],
                toolbar_location="above")
    p3 = figure(plot_width=1000, title='MACD', plot_height=250, x_range=(x_start, x_end),
                background_fill_color="#fafafa", tools=[hover_macd, "pan,zoom_in,zoom_out,crosshair,reset,save"],
                toolbar_location="above")

    for fig in [p1, p2, p3]:
        fig.title.text_font_size = '16pt'

        # map dataframe indices to date strings and use as label overrides
        fig.xaxis.major_label_overrides = {
            i: date.strftime('%Y/%m/%d') for i, date in enumerate(pd.to_datetime(df["date"]))
            # pd.date_range(start='3/1/2000', end='1/08/2018')
        }
        fig.xaxis.ticker = SingleIntervalTicker(interval=interval_freq)

    # set k bar chart
    # use the *indices* for x-axis coordinates, overrides will print better labels
    p1.segment('index', 'high', 'index', 'low', color="black", source=df_source)
    p1.vbar('index', 0.5, 'open', 'close', fill_color="#eb2409", line_color="black", source=inc_source)
    p1.vbar('index', 0.5, 'open', 'close', fill_color="#00995c", line_color="black", source=dec_source)

    # set ma line
    ma_legend_items = []
    for ma_name, color in zip(["MA5", "MA10", "MA20", "MA60", "MA120"], Dark2[5]):
        ma_df = df[['index', 'date', 'close', 'open', 'high', 'low', 'volume', ma_name]]
        source = ColumnDataSource(ma_df)
        ma_line = p1.line(x="index", y=ma_name, line_width=2, color=color, alpha=0.8,
                          muted_color=color, muted_alpha=0.2, source=source)
        ma_legend_items.append((ma_name, [ma_line]))

    # set ma legend
    legend = Legend(items=ma_legend_items, location=(0, 250))
    p1.add_layout(legend, 'left')

    # set twinx for volume
    y2_start = df['volume'].min() * 0.95
    y2_end = df['volume'].max() * 2
    p1.extra_y_ranges = {"vol": Range1d(y2_start, y2_end)}
    p1.vbar('index', 0.5, 'volume', y_range_name='vol', color='blue', alpha=0.2, source=df_source)
    p1.add_layout(LinearAxis(y_range_name="vol" ,axis_label="vol"), 'right')

    # RSI Chart
    rsi_df = pd.DataFrame(stock_data['RSI']).reset_index().rename(columns={'index': 'date'})
    kd_df = pd.DataFrame(stock_data['STOCH']).reset_index().rename(columns={'index': 'date'})
    rsi_kd_df = pd.concat([rsi_df, kd_df], axis=1)
    rsi_source = ColumnDataSource(rsi_kd_df)

    rsi_kd_legend_items = []
    for index_name, color in zip(["RSI_12", "RSI_36", "slowk", "slowd"], Spectral4):
        index_line = p2.line('index', index_name, line_width=3, color=color, alpha=0.8, muted_color=color,
                             muted_alpha=0.2, source=rsi_source)

        rsi_kd_legend_items.append((index_name, [index_line]))

    # set rsi_kd legend
    legend = Legend(items=rsi_kd_legend_items, location=(0, 50))
    p2.add_layout(legend, 'left')

    # MACD Chart
    macd = pd.DataFrame(stock_data['MACD']).reset_index().rename(columns={'index': 'date'})
    macd = macd.reset_index()
    macd_source = ColumnDataSource(macd)

    macd_legend_items = []
    for index_name, color in zip(["macd", "macdsignal", "macdhist"], Dark2[3]):
        if index_name == "macdhist":
            index_line = p3.vbar('index', 0.5, index_name, color=color, alpha=0.8, muted_color=color, muted_alpha=0.2,
                                 source=macd_source)
        else:
            index_line = p3.line('index', index_name, line_width=3, color=color, alpha=0.8, muted_color=color,
                                 muted_alpha=0.2, source=macd_source)

        macd_legend_items.append((index_name, [index_line]))

    # set macd legend
    legend = Legend(items=macd_legend_items, location=(0, 50))
    p3.add_layout(legend, 'left')

    # set legend mode
    for fig in [p1, p2, p3]:
        # set legend
        fig.legend.label_text_font_size = '8pt'
        # use hide or mute
        fig.legend.click_policy = "hide"
        #     fig.add_layout(legend, 'left')
    
    # use brower output
#     output_file("candlestick.html", title="candlestick.py example")
    # use jupyter output
    output_notebook()
    # use columns to control all fig  locations,you could try row method.
    show(column(p1, p2, p3))</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/bokeh-stock-chart-with-technical-analysis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1163</post-id>	</item>
		<item>
		<title>用 Python 打造投資網站(1) &#8211; 開啟地圖</title>
		<link>https://www.finlab.tw/financial-website-building-part1/</link>
					<comments>https://www.finlab.tw/financial-website-building-part1/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Mon, 20 Jul 2020 06:15:28 +0000</pubDate>
				<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[BOKEH]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[資料視覺化]]></category>
		<guid isPermaLink="false">http://34.96.136.135/?p=1167</guid>

					<description><![CDATA[策略、圖表、資料、串接服務越來越多，你是不是有發現用Jupyter難以管理眾多的程式檔案、資料庫？當我出門在外，身上沒電腦，如何用手機監控投資策略、查詢資料？如何做自動化交易？電腦規格不夠、跑機器學習、讀資料好慢，可不可以用雲端運算服務？想讓朋友家人也能使用我的策略？市面上看盤和選股網站介面不合個人需求，想自己打造！]]></description>
										<content:encoded><![CDATA[
<h2 id="動機：">動機：</h2>



<ol><li>策略、圖表、資料、串接服務越來越多，你是不是有發現用Jupyter難以管理眾多的程式檔案、資料庫？</li><li>當我出門在外，身上沒電腦，如何用手機監控投資策略、查詢資料？</li><li>如何做自動化交易？</li><li>電腦規格不夠、跑機器學習、讀資料好慢，可不可以用雲端運算服務？</li><li>想讓朋友家人也能使用我的策略？</li><li>市面上看盤和選股網站介面不合個人需求，想自己打造<br>…..</li></ol>



<p>當你熟悉Finlab課程後，你會發現知識爆炸、神招好多，若有一個魔杖可把這些Python魔法整合起來，管理和發招上一定更方便，程式碼也較容易維護。<br>這時用打造客製化的投資網站可以解決我們的問題。</p>



<h2 id="Python能打造網站嗎？">Python能打造網站嗎？</h2>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="676" height="126" src="http://34.96.136.135/wp-content/uploads/2020/07/Ioom2TE.png" alt="Ioom2TE" class="wp-image-1168" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/Ioom2TE.png 676w, https://www.finlab.tw/wp-content/uploads/2020/07/Ioom2TE-300x56.png 300w" sizes="(max-width: 676px) 100vw, 676px" title="用 Python 打造投資網站(1) - 開啟地圖 42"></figure></div>



<p>以守備範圍超廣的Python，當然可以打造網站，<strong>用Python建站有個其他語言的好處是可以把Python的強項，如爬蟲、統計、數據分析、機器學習也包進來。</strong></p>



<p>只是大部分的新創企業拿Python來做後端服務居多，前端圖表雖然已有pyecharts、bokeh等函數庫可支援，但靈活性上還是有不足Java Script的部分。</p>



<p>後端框架有重量包Django可選擇、輕量武器有Flask以及新竄起的Fastapi。</p>



<h2 id="Python寫網站難嗎？">Python寫網站難嗎？</h2>



<p>Python是最容易上手的語言，而寫網站是把Python語言觀念集成的場域，物件導向要有一定掌握，你才能寫出易維護、流暢的程式碼。一開始會有點難度，但你若想精通Python，這是必經之路。<br>若能藉由學習打造網站的技能，讓投資效率、程式能力都能一同成長，一舉數得，不是很棒的事嗎？</p>



<h2 id="如何開始大冒險？">如何開始大冒險？</h2>



<p>沒有工程圖，不知整體架構，連前進的方向都沒有。<br>這點我幫你解決了。<br>以下是我寫的網站架構圖與技能樹，應能整合課程內容與眾服務，用Python打造投資生態系，有以下特點。</p>



<ol><li>以Django為核心，MVC架構，控制商業模型、資料庫，自帶會員系統，方便將來擴展。</li><li>使用Fastapi撰寫Restful API，簡單高效，自帶Swagger API測試文檔。</li><li>串連finlab hahow課程裡的Jupyter策略，共用網站資料庫。</li><li>使用Django-Q的多進程服務做爬蟲排程管理，結合Django自帶的Admin UI，方便設定，串接Line Notify，得知爬蟲與策略執行狀況。</li><li>AWS雲端部署與資料庫服務。</li><li>串接永豐金等券商的API做交易機器人。</li><li>可採前後端分離，前端改以React取代Django的弱點Template(看個人偏好而定)。</li></ol>



<figure class="wp-block-image"><a href="https://i.imgur.com/BY2MW6Q.jpg" target="_blank" rel="noopener"><img src="https://i.imgur.com/BY2MW6Q.jpg" alt="BY2MW6Q" title="用 Python 打造投資網站(1) - 開啟地圖 43"></a></figure>



<p>乍看開始有點複雜，要學的有點多，但若有熱情與動機整合投資與程式的結合，這絕對是令人興奮的開始，Python實在太萬能了！<br></p>



<p>萬事起頭難，之後會一步步來和大家分享探索的心得。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/financial-website-building-part1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1167</post-id>	</item>
	</channel>
</rss>
