<?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/%E6%AD%B7%E5%8F%B2%E5%9B%9E%E6%B8%AC/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.finlab.tw</link>
	<description>深入淺出的量化投資，讓你在在茫茫股海中，找到專屬於自己的投資方法</description>
	<lastBuildDate>Mon, 21 Apr 2025 06:34:59 +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>如何復刻0056高股息ETF，並打造超越市場的進階策略！</title>
		<link>https://www.finlab.tw/%e5%a6%82%e4%bd%95%e5%be%a9%e5%88%bb0056%e9%ab%98%e8%82%a1%e6%81%afetf%ef%bc%8c%e4%b8%a6%e6%89%93%e9%80%a0%e8%b6%85%e8%b6%8a%e5%b8%82%e5%a0%b4%e7%9a%84%e9%80%b2%e9%9a%8e%e7%ad%96%e7%95%a5%ef%bc%81/</link>
					<comments>https://www.finlab.tw/%e5%a6%82%e4%bd%95%e5%be%a9%e5%88%bb0056%e9%ab%98%e8%82%a1%e6%81%afetf%ef%bc%8c%e4%b8%a6%e6%89%93%e9%80%a0%e8%b6%85%e8%b6%8a%e5%b8%82%e5%a0%b4%e7%9a%84%e9%80%b2%e9%9a%8e%e7%ad%96%e7%95%a5%ef%bc%81/#respond</comments>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Tue, 25 Mar 2025 05:09:58 +0000</pubDate>
				<category><![CDATA[VIP文章]]></category>
		<category><![CDATA[FinLab 量化平台]]></category>
		<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[PYTHON財經]]></category>
		<category><![CDATA[基本面分析]]></category>
		<category><![CDATA[股票策略]]></category>
		<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[選股策略]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[VIP限定]]></category>
		<category><![CDATA[歷史回測]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[股票]]></category>
		<category><![CDATA[量化投資]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=6547</guid>

					<description><![CDATA[復刻0056高股息ETF，並打造超越市場的進階策略]]></description>
										<content:encoded><![CDATA[
<h1>一、復刻0056高股息ETF的核心邏輯</h1>



<p>市面上最受投資人青睞的高股息 ETF，莫過於&nbsp;<strong>元大高股息 ETF（0056）</strong>。它是許多台灣投資人「存股領股利」的代表標的。0056 的選股方法，是從<strong>臺灣50指數</strong>與<strong>臺灣中型100指數</strong>為母體，優先篩選出具備相對高殖利率（預期下一年股息）之公司，最終組成 50 檔成分股。</p>



<p>然而，許多人只知道它「<strong>給股利</strong>」、風險似乎不高，卻很少真正挖掘其選股邏輯背後的細節和可能的缺陷。為了讓大家更深入了解這套機制，我們運用量化交易的方法，去「<strong>復刻</strong>」0056 的篩選邏輯，並嘗試更進一步的優化。這項研究花了相當多時間精力，從龐大資料的爬取、清洗、到回測比對，都一一經歷反覆測試，只為了呈現給投資人更清晰且更具行動價值的策略思路。</p>



<h3>復刻 0056 的關鍵步驟</h3>



<ul><li><strong>市值排名前 150 名股票作為初始篩選標的這代表先從台灣市值規模較大、較有流動性的公司中著手，排除一些可能成交量低、營運風險較高的股票。</strong></li><li><strong>近三年皆穩定發放現金股利0056 著重於「股息」，因此公司能否穩定配發現金股息，就顯得至關重要。</strong></li><li><strong>毛利率持續成長反映公司基本營運體質是否健康；若毛利率維持增長，通常代表公司具備較佳的競爭力。</strong></li><li><strong>設定交易流通性條件確保標的能有效買賣，避免「有好策略，卻掛不到單」的尷尬情況。</strong></li><li><strong>最終根據現金股利殖利率和現金股息年化報酬，選出前 50 檔股票這基本就複製了 0056 的核心精神：高殖利率作為重要排序依據。</strong></li></ul>



<p>在經過一連串比對後，復刻而得的策略股池與原版 0056 股池有&nbsp;<strong>72%</strong>&nbsp;的重疊率，報酬率曲線也高度相關。這意味著，我們的 復刻版 0056 確實能<strong>有效重現 0056 的選股結果</strong>。</p>



<h3>相關性分析：</h3>


<div class="wp-block-image">
<figure class="aligncenter is-resized"><img src="https://www.finlab.tw/wp-content/uploads/2025/03/CleanShot-2025-03-17-at-11.50.56.png" alt="CleanShot 2025 03 17 at 11.50.56" width="354" height="705" title="如何復刻0056高股息ETF，並打造超越市場的進階策略！ 1"><figcaption>相關性分析</figcaption></figure></div>


<h1><br>二、為什麼要優化 0056？</h1>



<p>雖然 0056 深受大眾喜愛，但其單一依賴「殖利率」的選股標準，也帶來了不少潛在問題。<strong>最常見的疑問在於：如果公司未來的獲利或股價下滑，殖利率再高也未必保得住報酬。</strong>&nbsp;因此，僅看現金股利殖利率，有時候會忽略公司實際的成長動能與股價穩定度。</p>



<ul><li><strong>缺乏成長潛力考量：</strong> 0056 更重視「現在」的高股息，卻無法保證公司未來能維持同等配息水準。</li><li><strong>忽略股價風險：</strong> 有些殖利率高的公司，股價可能因營運不佳或大環境衝擊而下跌，使投資人因價差損失抵銷了領股息的好處。</li></ul>



<p>事實上，根據許多長期回測的結果，0056 的投資績效常<strong>落後大盤</strong>。</p>



<h3><strong>復刻 0056 報酬：</strong></h3>


<div class="wp-block-image">
<figure class="aligncenter"><img src="https://www.finlab.tw/wp-content/uploads/2025/03/CleanShot-2025-03-17-at-11.39.43@2x-1024x729.png" alt="CleanShot 2025 03 17 at 11.39.43@2x" title="如何復刻0056高股息ETF，並打造超越市場的進階策略！ 2"><figcaption>復刻 0056 報酬</figcaption></figure></div>


<h3><strong>長期持有 0056&nbsp;報酬：</strong></h3>


<div class="wp-block-image">
<figure class="aligncenter"><img src="https://www.finlab.tw/wp-content/uploads/2025/03/CleanShot-2025-03-17-at-11.47.46@2x-1024x790.png" alt="CleanShot 2025 03 17 at 11.47.46@2x" title="如何復刻0056高股息ETF，並打造超越市場的進階策略！ 3"><figcaption><strong>長期持有 0056&nbsp;報酬</strong></figcaption></figure></div>


<p>這也是為什麼我們要繼續進行第二階段的<strong>策略優化</strong>，希望既能拿到<strong>股利</strong>，也能兼顧成長與風險控管。</p>



<p></p>



<h1>三、策略的優化方向</h1>



<p>為了進一步提升報酬並減少下跌風險，我們引入了更全面的選股因子與風險控管條件，包括：</p>



<ol><li><strong>營收成長指標</strong><ul><li><strong>為什麼重要？</strong> 相較於只看當前股息，營收成長能更直接反映公司未來的成長動能。假如一家公司營收年年進步，往後維持股息或提高配息的機率也相對提高。</li></ul></li><li><strong>長期均線條件</strong><ul><li><strong>為什麼重要？</strong> 均線是一種技術分析常用的趨勢判定法。挑選「股價在長期均線之上」的公司，能有效排除股價長期走弱或進入空頭趨勢的標的。</li></ul></li><li><strong>股價波動率限制</strong><ul><li><strong>為什麼重要？</strong> 高波動可能意味著市場對公司基本面有疑慮，或財務體質波動度較大。過高的波動率會拉大投資組合的風險，限制波動度有助於穩定心態與獲利表現。</li></ul></li><li><strong>殖利率門檻</strong><ul><li><strong>為什麼重要？</strong> 雖然不能只看殖利率，但也不應該放棄。透過設置「殖利率至少在前 40%（或 60 百分位數以上）」的條件，既能保有高股息優勢，又不至於過度犧牲穩定度與成長性。</li></ul></li></ol>



<p>這些篩選條件的核心邏輯，就在於想同時享受「<strong>股利</strong>」與「<strong>成長</strong>」。最終，我們挑出能在長期維持向上趨勢、營運持續成長、且具有一定股利保證的股票，打造一個較能兼顧「<strong>領息</strong>」與「<strong>資本利得</strong>」的投資組合。<br></p>



<h1>四、優化後的策略範例</h1>



<p>以下程式碼範例，示範如何在量化平台上落實上述篩選邏輯。除了維持原先 0056「市值前 150 名」、「三年皆有發放股利」等規範，我們另外納入了<strong>營收成長</strong>、<strong>長期均線</strong>、<strong>波動度</strong>及<strong>殖利率門檻</strong>等條件。最後再綜合每檔股票的排名結果，只選擇前 20 檔表現優異的公司。</p>



<pre class="wp-block-code"><code class="">base_stocks = 市值.is_largest(150)
yield_ratio = data.get('price_earning_ratio:殖利率(%)')
殖利率條件 = (yield_ratio &gt;= yield_ratio.quantile(0.6, axis=1))
去年同月增減 = data.get("monthly_revenue:去年同月增減(%)")
rev = data.get('monthly_revenue:當月營收')
營收成長 = (rev.average(3) &gt; rev.average(12))
均線條件 = (close&gt;close.average(120)) &amp; (close&gt;close.average(240))
std = close.pct_change().rolling(60).std().rank(axis=1, pct=True)
波動條件 = (std &lt; 0.5)

conds = (
 (close&gt;0)
 &amp; base_stocks
 &amp; vol_cond
 &amp; eps_cond
 &amp; 近三年皆有發放現金股利
 &amp; 毛利成長率優良
 &amp; 營收成長
 &amp; 均線條件
 &amp; 波動條件
 &amp; 殖利率條件
)
position =  (cash_dividend_annual.rank(axis=1, pct=True) + 現金股利殖利率.rank(axis=1, pct=True) + 去年同月增減.rank(axis=1, pct=True))[conds].is_largest(20)
dates = []
y_start = position.index[0].year
y_end = position.index[-1].year
for y in range(y_start, y_end+1):
  dates.append(f"{y}-05-31")
  dates.append(f"{y}-12-27")
resample = pd.to_datetime(dates)
report2 = sim(position.reindex(resample, method='ffill'), resample=resample, upload=False)
report2.display()</code></pre>



<p>以上範例，用來呈現大致邏輯。重點在於「<strong>為什麼要加入這些條件</strong>」，而不只是條件本身。唯有理解每一步驟背後的意義，才能在投資時有所依據，也更能說服自己這樣嘗試，也歡迎大家優化加入更多因子或是優化相關的參數。</p>



<p></p>



<h1>五、因子IC/IR分析</h1>



<p>在量化投資的領域，經常會透過「<strong>Information Coefficient</strong>&nbsp;<strong>資訊係數</strong>」來確認某個因子是否確實能帶來正向貢獻。以下名詞簡單解釋：</p>



<ul><li><strong>IC（Information Coefficient，訊息係數）：</strong> 量度某因子的預測能力，IC &gt; 0 代表該因子對未來報酬有正向預測力。</li><li><strong>IR（Information Ratio，訊息比率）：</strong> 代表因子收益與風險的平衡程度，IR &gt; 1 通常表示該因子效果不錯。</li></ul>



<p>更詳細的內容歡迎參考之前的文章，<a href="https://www.finlab.tw/information-coefficient/">Information Coefficient 是什麼，要如何使用？</a></p>



<p>經分析顯示，<strong>營收成長</strong>、<strong>現金股息年化報酬</strong>、<strong>殖利率條件</strong>等因子都對整體績效貢獻較大，尤其是營收成長與長期均線兩因子的 IC/IR 表現最亮眼。這進一步佐證了「高息 + 成長 + 走勢向上」的組合，更能帶來勝率與報酬的提升。</p>



<h3><strong>因子 IC / IR 分析：</strong></h3>


<div class="wp-block-image is-style-default">
<figure class="aligncenter is-resized"><img loading="lazy" src="https://www.finlab.tw/wp-content/uploads/2025/03/CleanShot-2025-03-17-at-11.38.57.png" alt="CleanShot 2025 03 17 at 11.38.57" width="315" height="468" title="如何復刻0056高股息ETF，並打造超越市場的進階策略！ 4"><figcaption><strong>因子 IC / IR 分析</strong></figcaption></figure></div>


<p></p>



<h1>六、終極版策略的績效分析</h1>



<p>把所有優化條件整合後，使用強大的&nbsp;<a href="https://doc.finlab.tw/reference/optimize/#finlab.optimize.combinations.sim_conditions" target="_blank" rel="noopener"><code>finlab.optimize</code></a>&nbsp;「<a href="https://doc.finlab.tw/reference/optimize/#finlab.optimize.combinations.sim_conditions" target="_blank" rel="noopener">文檔連結</a>」可以更方便的進行<strong>條件排列組合</strong>與大規模回測，最終得到「<strong>終極版</strong>」的選股策略。其結果遠遠優於單純追求殖利率的 0056，以下為量化回測的關鍵指標：</p>



<ol><li><strong>年化報酬率：</strong>&nbsp;提高至約&nbsp;<strong>31%</strong>，相較於原版 0056 明顯領先。</li><li><strong>最大回撤：</strong>&nbsp;降至&nbsp;<strong>24.3%</strong>，顯示波動與下跌風險獲得更佳控管。</li><li><strong>夏普比率：</strong>&nbsp;超過&nbsp;<strong>2</strong>&nbsp;以上，代表收益相對於風險具高度吸引力。</li></ol>



<p>除了高報酬率，更難能可貴的是兼顧到風險面與投資體驗：投資組合的走勢相對平穩，不必日日擔心股價大幅震盪。如此一來，投資人就能同時享有領股利的安心感，又能捕捉股價成長的爆發力。</p>



<h3><strong>獲利能力分析：</strong></h3>


<div class="wp-block-image">
<figure class="aligncenter"><img src="https://www.finlab.tw/wp-content/uploads/2025/03/CleanShot-2025-03-17-at-11.42.27.png" alt="CleanShot 2025 03 17 at 11.42.27" title="如何復刻0056高股息ETF，並打造超越市場的進階策略！ 5"><figcaption><strong>獲利能力分析</strong></figcaption></figure></div>


<h3><strong>抗風險能力分析：</strong></h3>


<div class="wp-block-image">
<figure class="aligncenter"><img src="https://www.finlab.tw/wp-content/uploads/2025/03/CleanShot-2025-03-17-at-11.42.51.png" alt="CleanShot 2025 03 17 at 11.42.51" title="如何復刻0056高股息ETF，並打造超越市場的進階策略！ 6"><figcaption><strong>抗風險能力分析</strong></figcaption></figure></div>


<h3><strong>風險報酬分析：</strong></h3>


<div class="wp-block-image">
<figure class="aligncenter"><img src="https://www.finlab.tw/wp-content/uploads/2025/03/CleanShot-2025-03-17-at-11.43.13.png" alt="CleanShot 2025 03 17 at 11.43.13" title="如何復刻0056高股息ETF，並打造超越市場的進階策略！ 7"><figcaption><strong>風險報酬分析</strong></figcaption></figure></div>


<h3><strong>勝率期望值分析：</strong></h3>


<div class="wp-block-image">
<figure class="aligncenter"><img src="https://www.finlab.tw/wp-content/uploads/2025/03/CleanShot-2025-03-17-at-11.43.45.png" alt="CleanShot 2025 03 17 at 11.43.45" title="如何復刻0056高股息ETF，並打造超越市場的進階策略！ 8"><figcaption><strong>勝率期望值分析</strong></figcaption></figure></div>


<h1><br>七、結語與投資行動建議</h1>



<p>從最初單純「<strong>復刻 0056 高股息</strong>」的思路，到後來發現 0056 可能有所不足，再進一步優化篩選條件並不斷迭代測試。正是因為投入了大量的程式回測、因子分析，才有這次所呈現的量化成果。</p>



<p>對於想靠股息過日子，或喜歡「<strong>領息 + 穩定增值</strong>」的投資人而言，本文提供了另一個思考角度：</p>



<ul><li>高殖利率當然好，但若同時輔以「<strong>營收成長</strong>」、「<strong>股價走勢</strong>」以及「<strong>風險控管</strong>」等條件，也許能得到更好的投資體驗與回報。</li><li>0056 作為大眾入門選擇並無不可，但若你願意花些心思了解量化策略，自己動手選股或透過更進階的工具優化組合，或許就能在領股期的同時「多賺一點，少跌一點」，甚至大大超越原始 ETF 的表現。</li></ul>



<p>最後，若對量化選股或因子策略有更多好奇心，不妨實際嘗試應用文中提到的篩選方式，或直接透過量化平台進行回測調整，也歡迎參考&nbsp;<a href="https://colab.research.google.com/drive/1Gkz7n7jniMAqqEzwh96eV3JI1YTplS3g" target="_blank" rel="noopener">Colab範例檔</a>&nbsp;。<strong>祝大家研究和投資順利、盈收長紅！</strong></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/%e5%a6%82%e4%bd%95%e5%be%a9%e5%88%bb0056%e9%ab%98%e8%82%a1%e6%81%afetf%ef%bc%8c%e4%b8%a6%e6%89%93%e9%80%a0%e8%b6%85%e8%b6%8a%e5%b8%82%e5%a0%b4%e7%9a%84%e9%80%b2%e9%9a%8e%e7%ad%96%e7%95%a5%ef%bc%81/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6547</post-id>	</item>
		<item>
		<title>Qlib 與 FinLab 整合，展現 AI 選股的神蹟。</title>
		<link>https://www.finlab.tw/qlib-finlab-implementation-source-code/</link>
					<comments>https://www.finlab.tw/qlib-finlab-implementation-source-code/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Mon, 06 Jan 2025 15:47:50 +0000</pubDate>
				<category><![CDATA[AI看股票]]></category>
		<category><![CDATA[VIP限定]]></category>
		<category><![CDATA[機器學習]]></category>
		<category><![CDATA[歷史回測]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[選股策略]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=6410</guid>

					<description><![CDATA[雖然 FinLab 支援 Qlib 很久了，但一直沒有好好的跟大家介紹如何使用，於是乎，最近中小股票真的表現令 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="585" src="https://www.finlab.tw/wp-content/uploads/2025/01/image-1-1024x585.png" alt="image 1" class="wp-image-6412" srcset="https://www.finlab.tw/wp-content/uploads/2025/01/image-1-1024x585.png 1024w, https://www.finlab.tw/wp-content/uploads/2025/01/image-1-300x171.png 300w, https://www.finlab.tw/wp-content/uploads/2025/01/image-1-768x439.png 768w, https://www.finlab.tw/wp-content/uploads/2025/01/image-1-1536x878.png 1536w, https://www.finlab.tw/wp-content/uploads/2025/01/image-1.png 1792w" sizes="(max-width: 1024px) 100vw, 1024px" title="Qlib 與 FinLab 整合，展現 AI 選股的神蹟。 9"></figure>



<p>雖然 FinLab 支援 Qlib 很久了，但一直沒有好好的跟大家介紹如何使用，於是乎，最近中小股票真的表現令人窒息，所以就好好做研究，相信總會時來運轉的。台股權值股與中小型股差異，來到20年來最大，台積電創新高之際，已經有很多股票跌破年線了，老實說，虧很多嗎？是還好，但就是很悶，心情不受影響是不可能的，然而人生在世，就是來體驗這些喜怒哀樂，就讓我們繼續努力，看結果如何，雖然很煩，但是我還是對於未來非常樂觀！</p>



<h1>Qlib</h1>



<p>Qlib 是由微軟開源的量化投資工具庫，專注於基於機器學習的投資研究。它提供了資料處理、策略建模、回測及評估的一站式解決方案。</p>



<h1>Qlib 在 FinLab 中的應用</h1>



<p>Qlib 的演算法有非常多前人研究的心血，不是我們能夠短時間比擬的，所以要站在巨人的肩膀上，才能事半功倍！Qlib 的最大特點，就是在於</p>



<p>1. 特徵的建構 </p>



<p>2. 模型的多樣選擇</p>



<p>基於以上兩點，你都可以透過 FinLab package 將它們給接入進來使用。然而我覺得 Qlib 架構比較難與其它的生態系或 Package 整合，因為整個框架以程式系統來說，是比較封閉，沒辦法與傳統的 sklearn，或是 lgb、xgb 整合，所以才需要使用 FinLab 將其解放。</p>



<h1>Qlib vs FinLab</h1>



<p>Qlib 是通用型的 package，所以特徵都是使用價格來製作，而 FinLab 本身支援台股多樣的資料與指標，所以延伸的部分非常多！歡迎將以下的功能當成基礎版本，自己加入更多特徵來增進模型的運測能力！</p>



<h1>安裝</h1>



<p>接下來，將會使用 Colab 來進行設定，但以下範例需要 Colab Pro 版本，才能順利運行，因為 RAM 的需求太大了。假如各位沒有買 Colab 付費版，也可以在自己的主機上試試看，初次安裝，需要有以下的套件：</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">!pip install finlab &gt; log.txt
!pip install ta-lib-bin &gt; log.txt
!pip install catboost &gt; log.txt</code></pre>



<p>上面的程式中，安裝 talib 的方法，是使用 ta-lib-bin，是 colab 上特別的安裝方法，假如你是在桌機上使用，要用</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">conda install conda-forge::ta-lib</code></pre>



<p>來取代。</p>



<h1>安裝 Qlib</h1>



<p>安裝 Qlib 的方式，有很多種，一種是直接將 github 上的最新版本下載下來安裝：</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">!git clone https://github.com/microsoft/qlib.git
%cd qlib
!make install
!pip install .
%cd ..</code></pre>



<p>要注意，以上的程式碼是在 terminal 中使用，不是 python 語法喔！</p>



<h1>製作特徵</h1>



<p>我們可以使用 qlib 內建的功能，產生出158種，或是360種不同的價格訊號，只需要三行即可完成：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">from finlab.ml import qlib as q


q.init()
q.dump()
f158 = q.alpha("Alpha158")</code></pre>



<p>然而這樣的資料量，實在是太大了，所以我們可以將資料的頻率改成「週」，大約可以減少80％的資料量，這樣的訓練方式，勉強能夠在 Colab Pro 上執行（50GB RAM）。假如是 alpha360 資料集，基本上會需要上百GB，就請有這樣硬體能力的玩家自行上手了！</p>



<pre class="wp-block-code"><code lang="python" class="language-python">from finlab.ml import label as mll
from finlab.ml import feature as mlf

features = mlf.combine({
    'qlib': f158,
}, resample='W')
labels = mll.return_percentage(features.index, period=2)

is_train = features.index.get_level_values('datetime') &lt; '2020-01-01'</code></pre>



<p>接下來，我們發現，f158之中，有一個特徵都是 NaN（也就是空值），我們必須要將它刪除：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">features = features.drop('VWAP0', axis=1)</code></pre>



<p>目前原因不明，應該還有一些 BUG 需要釐清，也可以利用 `mlf.combine` 自行計算補上 VWAP 的資料。</p>



<h1>訓練模型</h1>



<p>訓練模型的環節，FinLab 提供一個超級好用的功能</p>



<pre class="wp-block-code"><code class="">model_templates = q.get_models()</code></pre>



<p>就可以將 qlib 所有的模型導入，並且直接用來訓練：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">import gc
import numpy as np
import pickle
from finlab.ml import qlib as q

model_templates = q.get_models()
is_train = features.index.get_level_values('datetime') &lt; '2020-01-01'


model_path = './models.pkl'

if os.path.isfile(model_path):
  with open(model_path, 'rb') as f:
    models = pickle.load(f)
else:
  models = {}


for name, Model in model_templates.items():
    print(name)

    if name in models:
      continue

    if name == 'DNNModel':
      continue

    try:
      X_train = features.loc[is_train]
      y_train = labels.loc[is_train]
      model = Model()
      model.fit(X_train, y_train)

    except:
      notna = X_train.replace([np.inf, -np.inf], np.nan).notna().all(axis=1) &amp; y_train.replace([np.inf, -np.inf], np.nan).notna()
      X_train = X_train.loc[notna]
      y_train = y_train.loc[notna]
      model = Model()
      model.fit(X_train, y_train)


    with open(f'models.pkl', 'wb') as f:
      pickle.dump(models, f)

    models[name] = model

    gc.collect()</code></pre>



<p>訓練的過程中，可能訓練到一半 RAM 會掛掉，所以每次訓練好新的模型，程式會將所有模型都儲存起來，方便下一次直接調用。訓練時，會將 training data 自動切出 validation data，來確保訓練時避免 overfitting。</p>



<h1>測試</h1>



<p>最後我們可以回測看看模型得效果如何：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">import pickle
import numpy as np

model_path = './models.pkl'

if os.path.isfile(model_path):
  with open(model_path, 'rb') as f:
    models = pickle.load(f)


ys = {}

for name, model in models.items():

  try:
    y = model.predict(features[~is_train])
    ys[name] = y
  except:
    y = model.predict(features[~is_train].replace([np.inf, -np.inf], np.nan).fillna(0))
    ys[name] = y

from finlab.backtest import sim
import matplotlib.pyplot as plt
from finlab import data

reports = {}
for name, y in ys.items():
  print(name)
  with data.universe('TSE_OTC'):
    close = data.get('price:收盤價')
    report = sim(y[close.notna()].is_largest(20), resample='M', upload=False)
    reports[name] = report
    report.creturn.plot(label=name)

plt.legend()
plt.show()</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" width="543" height="407" src="https://www.finlab.tw/wp-content/uploads/2025/01/image.png" alt="image" class="wp-image-6411" srcset="https://www.finlab.tw/wp-content/uploads/2025/01/image.png 543w, https://www.finlab.tw/wp-content/uploads/2025/01/image-300x225.png 300w" sizes="(max-width: 543px) 100vw, 543px" title="Qlib 與 FinLab 整合，展現 AI 選股的神蹟。 10"></figure>



<p>其實效果算是滿不錯的，實單上，經過更多的調教，我的經驗，會比當前的成果更好，有興趣的玩家可以多多嘗試！其中一些策略回測甚至可以有 40％到50％的平均年報酬率。</p>



<p>話說最近 AI 模型，這幾個月的表現可能都不太好，然而換一種想法，就是當前可能不太適合使用 AI 模型吧～不代表它以後都沒效果，而是時運不佳的關係，反而讓我的心裡有點釋懷。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="937" src="https://www.finlab.tw/wp-content/uploads/2025/01/image-2-1024x937.png" alt="image 2" class="wp-image-6413" srcset="https://www.finlab.tw/wp-content/uploads/2025/01/image-2-1024x937.png 1024w, https://www.finlab.tw/wp-content/uploads/2025/01/image-2-300x275.png 300w, https://www.finlab.tw/wp-content/uploads/2025/01/image-2-768x703.png 768w, https://www.finlab.tw/wp-content/uploads/2025/01/image-2.png 1464w" sizes="(max-width: 1024px) 100vw, 1024px" title="Qlib 與 FinLab 整合，展現 AI 選股的神蹟。 11"></figure>



<p>由上表可知，我們可以選擇 LightGBM 模型來選股，效果最好。</p>



<p></p>



<p>以下示範一個年平均報酬 +50%的策略，這絕對是價值數萬元的程式碼，就這麼隨便的放在這邊讓大家取用，請你跟我說，在世界上的哪一個角落，可以找到這麼神乎其技的AI模型選股績效？找不到吧！只好請大家繼續支持 FinLab，讓我們可以活下去，謝謝：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">y = ys['LGBModel']

with data.universe('TSE_OTC'):

  close = data.get('price:收盤價')
  vol = data.get('price:成交股數')
  pos = y[((vol.average(20) &gt; 200_000)) &amp; (close &gt;= close.rolling(10).max())].is_largest(10)
  report = sim(pos, resample='M', upload=False)
  report.display()</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="994" src="https://www.finlab.tw/wp-content/uploads/2025/01/image-3-1024x994.png" alt="image 3" class="wp-image-6414" srcset="https://www.finlab.tw/wp-content/uploads/2025/01/image-3-1024x994.png 1024w, https://www.finlab.tw/wp-content/uploads/2025/01/image-3-300x291.png 300w, https://www.finlab.tw/wp-content/uploads/2025/01/image-3-768x746.png 768w, https://www.finlab.tw/wp-content/uploads/2025/01/image-3-1536x1491.png 1536w, https://www.finlab.tw/wp-content/uploads/2025/01/image-3.png 1574w" sizes="(max-width: 1024px) 100vw, 1024px" title="Qlib 與 FinLab 整合，展現 AI 選股的神蹟。 12"></figure>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/qlib-finlab-implementation-source-code/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6410</post-id>	</item>
		<item>
		<title>量化交易完整指南：策略、實施與風險管理</title>
		<link>https://www.finlab.tw/%e9%87%8f%e5%8c%96%e4%ba%a4%e6%98%93%e5%ae%8c%e6%95%b4%e6%8c%87%e5%8d%97%ef%bc%9a%e7%ad%96%e7%95%a5%e3%80%81%e5%af%a6%e6%96%bd%e8%88%87%e9%a2%a8%e9%9a%aa%e7%ae%a1%e7%90%86/</link>
					<comments>https://www.finlab.tw/%e9%87%8f%e5%8c%96%e4%ba%a4%e6%98%93%e5%ae%8c%e6%95%b4%e6%8c%87%e5%8d%97%ef%bc%9a%e7%ad%96%e7%95%a5%e3%80%81%e5%af%a6%e6%96%bd%e8%88%87%e9%a2%a8%e9%9a%aa%e7%ae%a1%e7%90%86/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Tue, 15 Oct 2024 12:45:46 +0000</pubDate>
				<category><![CDATA[FinLab 量化平台]]></category>
		<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[PYTHON財經]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[歷史回測]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[選股策略]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=6344</guid>

					<description><![CDATA[量化交易是一種基於數據和統計模型的交易方式，借助計算機程序執行精確的投資決策。例如，對沖基金經常利用量化交易來 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>量化交易是一種基於數據和統計模型的交易方式，借助計算機程序執行精確的投資決策。例如，對沖基金經常利用量化交易來自動化處理大量市場數據，以快速發現套利機會。此外，像美國的高頻交易公司Citadel和Virtu Financial等，通過量化策略實現了微秒級別的交易，使其能夠在瞬息萬變的市場中捕捉到有利可圖的價格變動。它不同於傳統的主觀交易方式，能夠處理大量市場數據，並根據客觀指標來判斷何時買入或賣出資產。本文將全面介紹量化交易的概念、常見策略、實施步驟、風險管理，並深入解析如何運用<a href="http://about" data-type="URL" data-id="about" target="_blank">FinLab</a>等工具來構建和優化量化交易策略，幫助你全面了解這個領域並提升交易績效。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="585" src="https://www.finlab.tw/wp-content/uploads/2024/10/image-8-1024x585.png" alt="image 8" class="wp-image-6351" srcset="https://www.finlab.tw/wp-content/uploads/2024/10/image-8-1024x585.png 1024w, https://www.finlab.tw/wp-content/uploads/2024/10/image-8-300x171.png 300w, https://www.finlab.tw/wp-content/uploads/2024/10/image-8-768x439.png 768w, https://www.finlab.tw/wp-content/uploads/2024/10/image-8-1536x878.png 1536w, https://www.finlab.tw/wp-content/uploads/2024/10/image-8.png 1792w" sizes="(max-width: 1024px) 100vw, 1024px" title="量化交易完整指南：策略、實施與風險管理 13"></figure>



<h2>量化交易的基本概念</h2>



<p>量化交易是利用數學和統計模型來分析市場並進行交易的過程。其核心是從歷史數據中提取市場模式，進而構建策略以在未來市場中獲利。量化交易的特點在於其理性和客觀，完全依據數據作決策，避免了人類情緒的干擾。在傳統交易中，投資者往往因市場波動而受到恐懼或貪婪的情緒影響，導致錯誤的決策，例如在<a href="https://www.finlab.tw/%e5%a4%a7%e8%b7%8c%e5%be%8c%ef%bc%9a%e6%89%be%e5%87%ba%e5%bc%b7%e5%8b%a2%e8%82%a1%ef%bc%81/" data-type="post" data-id="653">股市大跌</a>時恐慌性拋售，或者在市場過熱時盲目追高。相比之下，量化交易通過數據驅動的方式，減少了這些情緒干擾，更加專注於理性的市場機會。</p>



<p>一般來說，量化交易需要使用大量的歷史數據來進行測試，並且依靠強大的計算資源進行回測和實時運算。這些數據通常來自公共數據庫，如Yahoo Finance、Alpha Vantage、Quandl等，或者政府機構發布的經濟數據。此外，像彭博和湯森路透等提供的付費數據服務，則能夠提供更深入且及時的市場資訊。這使得量化交易能夠處理高頻數據，並在市場中抓住微小的價格變動。從技術分析到<a href="https://www.finlab.tw/talk/" data-type="page" data-id="2262">機器學習</a>，量化交易可以應用各種不同的技術和工具來實現。</p>



<h2>常見的量化交易策略</h2>



<h3>1. 多因子選股策略</h3>



<p>多因子選股策略是量化交易中常見的一種策略，使用多個因子來評估股票的質量和未來表現，這些因子包括基本面、技術面和市場情緒等。例如，市盈率（PE）是一個衡量股票估值的基本面因子，低市盈率通常被認為是低估的股票，適合價值投資。技術面因子如<a href="https://www.finlab.tw/%e5%9d%8a%e9%96%93%e6%b2%92%e5%9c%a8%e6%95%99%e7%9a%84rsi-%e9%81%b8%e8%82%a1%e6%8a%80%e5%b7%a7/" data-type="post" data-id="585">相對強弱指數</a>（RSI）可以用來判斷市場是否過度買入或賣出，例如當RSI超過70時，通常表示股票可能被過度買入，適合考慮賣出。常見的因子有<a href="https://www.finlab.tw/industry_pe_strategy/" data-type="post" data-id="4755">本益比</a>（PE）、<a href="https://www.finlab.tw/pb-data-analysis-explain/" data-type="post" data-id="337">股價淨值比</a>（PB）、RSI指數等。多因子模型可以有效降低單一指標的風險，增加策略的穩健性。</p>



<h4>範例：月營收策略</h4>



<p>台股月營收因子策略主要依據企業的營收成長指標進行選股，具體為「營收月動能（MOM）」及「年增率（YOY）」。以下是該策略的選股與回測概要：</p>



<ul><li>MOM（月動能）：月營收動能排名前100名的股票，表示當前營收增長勢頭較強的企業。</li><li>YOY（年增率）：過去一年同比營收增長率（YOY）排名前50名的股票，代表該企業與去年同期相比，其營收有顯著的成長。</li></ul>



<p><strong>策略回測結果</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="804" src="https://www.finlab.tw/wp-content/uploads/2024/10/image-3-1024x804.png" alt="image 3" class="wp-image-6345" srcset="https://www.finlab.tw/wp-content/uploads/2024/10/image-3-1024x804.png 1024w, https://www.finlab.tw/wp-content/uploads/2024/10/image-3-300x235.png 300w, https://www.finlab.tw/wp-content/uploads/2024/10/image-3-768x603.png 768w, https://www.finlab.tw/wp-content/uploads/2024/10/image-3-1536x1205.png 1536w, https://www.finlab.tw/wp-content/uploads/2024/10/image-3.png 1682w" sizes="(max-width: 1024px) 100vw, 1024px" title="量化交易完整指南：策略、實施與風險管理 14"></figure>



<ul><li>年化回報率：+19.3%，顯示策略在長期持續投資下表現優異，提供超過一般市場的收益。</li><li>Alpha：+10.9%，表明該策略相對於市場基準有良好的超額收益。</li><li>Beta：0.83，風險低於市場平均，顯示該策略的波動性低於市場。</li><li>平均持有股票數：18檔，策略集中持有少數具有優異營收成長的股票。</li><li>最大持有股票數：30檔，策略會根據市場狀況靈活調整持股數量。</li></ul>



<p><strong>歷史績效</strong></p>



<p>從2008年到2024年，該策略的累積報酬率達到2035.22%，明顯優於基準（429.68%）。尤其在2017年後該策略表現出顯著的增長，儘管在2022年出現-9.9%的跌幅，但隨後在2023年及2024年分別錄得56.5%與55.8%的回報率，顯示出強勁的反彈能力。該策略透過營收增長因子的篩選，成功抓住了成長股的上升動能，在回測中展現出良好的抗跌能力與超額收益。</p>



<h3>2. 市場中性策略</h3>



<p>市場中性策略通過對多頭和空頭的配置來降低市場系統性風險。其核心思想是利用Beta值將整體風險控制在接近零的水平，從而減少對市場整體漲跌的敏感性。這種策略適合在市場波動較大的情況下運行，尤其對於希望降低市場風險的投資者非常有吸引力。</p>



<p>這個策略是基於月營收增長率以及成交量的 hedge 策略，選股方式是透過營收和成交量篩選多頭部位，同時做空某些具有特定條件的股票，以對沖市場風險。</p>



<p><strong>策略選股條件（多頭部位）</strong></p>



<ul><li>年增率（YOY）：挑選年營收成長前60名的股票。</li><li>月增率（MOM）：進一步篩選月營收成長前200名的股票。</li><li>成交股數：選擇當月成交股數大於50,000的股票，確保流動性。</li><li>多頭篩選：從符合以上條件的股票中，選擇營收表現最好的30檔股票進行多頭部位操作。</li></ul>



<p><strong>空頭部位條件</strong></p>



<ul><li>年增率（YOY）差表現：篩選年營收成長最差的100檔股票，這些股票的權重設定為-0.15，表示少量的空頭配置。</li></ul>



<p><strong>回測結果</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="805" src="https://www.finlab.tw/wp-content/uploads/2024/10/image-4-1024x805.png" alt="image 4" class="wp-image-6346" srcset="https://www.finlab.tw/wp-content/uploads/2024/10/image-4-1024x805.png 1024w, https://www.finlab.tw/wp-content/uploads/2024/10/image-4-300x236.png 300w, https://www.finlab.tw/wp-content/uploads/2024/10/image-4-768x603.png 768w, https://www.finlab.tw/wp-content/uploads/2024/10/image-4-1536x1207.png 1536w, https://www.finlab.tw/wp-content/uploads/2024/10/image-4.png 1680w" sizes="(max-width: 1024px) 100vw, 1024px" title="量化交易完整指南：策略、實施與風險管理 15"></figure>



<ul><li>年化回報率：+7.4%，顯示此策略提供了穩定的回報，雖然不如之前的策略，但其風險控制較為突出。</li><li>Alpha：+4.9%，相較於市場基準仍有一定的超額收益。</li><li>Beta：0.15，極低的市場風險曝露，意味著該策略風險非常低。</li><li>平均持有股票數：117檔，策略選擇分散投資以進行對沖。</li><li>最大持有股票數：129檔，顯示策略在某些時期可能會增持更多股票以保持風險平衡。</li></ul>



<p><strong>歷史績效</strong></p>



<p>從2016年到2024年，該策略累積報酬達到311.17%，相較基準（87.57%）有明顯的超額表現。尤其是在2023年及2024年，回報率分別為20.2%與18.5%，顯示出該策略的持續穩定性。此外，2022年儘管大多數市場策略下跌，但該策略僅錄得輕微的-1.0%回報，顯示出其對沖特性有效。此策略結合了多頭與空頭部位的配置，利用營收成長與成交量選股，透過對沖操作來降低市場波動帶來的風險，實現了相對穩健的長期收益。</p>



<h3>3. 趨勢跟隨策略</h3>



<p>趨勢跟隨策略是通過追隨市場的主要趨勢進行操作，分為順勢交易和逆勢交易兩種。順勢交易指的是當價格上升時跟隨上升趨勢，而逆勢交易則是在市場過度波動後進行反向操作。這種策略需要使用技術指標來確認趨勢，如均線、布林帶等。</p>



<h4>創新高延續動能策略</h4>



<p>這是一個<a href="https://www.finlab.tw/%e5%89%b5%e6%96%b0%e9%ab%98%e6%9c%89%e5%a4%9a%e9%ab%98%ef%bc%9f/" data-type="post" data-id="667">創新高延續動能策略</a>，基於股票的價格在短期內突破過去長期的高點來進行選股。具體條件是：</p>



<p><strong>策略選股條件</strong></p>



<ul><li>股價創新高：股票的收盤價在近200日內創下新高。</li><li>創新高的持續性：在過去5個交易日中，有至少3天的收盤價創下新高。這代表該股票在短期內動能強勁，具備延續上升趨勢的潛力。</li></ul>



<p><strong>策略設置</strong></p>



<ul><li>回測頻率：每兩週進行一次重新調整持倉，確保選股反映當前市場動能狀況。</li><li>倉位限制：單支股票的最大倉位設定為20%，以確保持倉的多樣性，降低單一股票風險。</li><li>停損機制：當股票的價格下跌超過20%時，觸發停損賣出，進一步控制下行風險。</li></ul>



<p><strong>回測結果</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="801" src="https://www.finlab.tw/wp-content/uploads/2024/10/image-5-1024x801.png" alt="image 5" class="wp-image-6347" srcset="https://www.finlab.tw/wp-content/uploads/2024/10/image-5-1024x801.png 1024w, https://www.finlab.tw/wp-content/uploads/2024/10/image-5-300x235.png 300w, https://www.finlab.tw/wp-content/uploads/2024/10/image-5-768x601.png 768w, https://www.finlab.tw/wp-content/uploads/2024/10/image-5-1536x1202.png 1536w, https://www.finlab.tw/wp-content/uploads/2024/10/image-5.png 1690w" sizes="(max-width: 1024px) 100vw, 1024px" title="量化交易完整指南：策略、實施與風險管理 16"></figure>



<ul><li>年化回報率：+23.9%，顯示該動能策略能有效捕捉上升趨勢的股票，帶來高回報。</li><li>Alpha：+17.6%，表示該策略相較於市場有顯著的超額收益。</li><li>Beta：0.58，該策略的波動性低於市場，顯示在捕捉動能的同時控制了風險。</li><li>平均持有股票數：27檔，策略集中持有相對少數的股票，專注於創新高的動能股。</li><li>最大持有股票數：211檔，當市場中創新高股票較多時，策略會適時增加持股數量。</li></ul>



<p><strong>歷史績效</strong> 從2009年到2024年，該策略的累積報酬率高達3448.39%，遠超基準的444.07%。尤其在2020年，該策略錄得了75.7%的驚人回報，顯示在市場上行階段捕捉動能的效果極佳。雖然2022年出現了-5.5%的跌幅，但2023年與2024年分別回升至21.2%與22.2%。</p>



<p>此策略專注於股價創新高的股票，並通過篩選持續創新高的標的來捕捉動能，透過定期調整持倉與設置停損點，有效管理風險，同時獲取高回報。</p>



<h3>4. 高頻交易策略</h3>



<p>高頻交易是一種利用市場短期波動來獲取利潤的策略，依賴於高速的計算機系統和算法來快速買入和賣出股票、期貨等金融產品。這些算法通常包括統計套利、機會識別和市場微觀結構模型等。此外，高頻交易系統需要非常低的延遲，因此交易者常常使用優化的硬件設置，例如FPGA（可編程門陣列）和高效能的網絡路由器，以確保交易指令能夠在毫秒級甚至微秒級的時間內執行。這些交易通常在毫秒級甚至更短的時間內完成，因此對於交易執行速度和基礎設施要求非常高。</p>



<h3>5. 事件驅動策略</h3>



<p>事件驅動策略是根據重大事件對市場的影響來進行交易的策略，例如企業的財報發布、政策變動等。這類策略需要快速反應以利用市場的短期波動，通常適合那些能及時獲取資訊並迅速執行交易的投資者。</p>



<h4>放空現金增資策略</h4>



<p>這是一個放空<a href="https://www.finlab.tw/followup-offering-short/" data-type="post" data-id="5640">現金增資策略</a>，專門針對在市場上進行現金增資的公司，根據特定的條件進行放空操作。具體條件如下：</p>



<p><strong>策略選股條件</strong></p>



<ul><li>現金增資比例：挑選現金增資比例大於10%的股票。現金增資通常意味著公司可能面臨資金需求，而增資對股價往往產生壓力。</li><li>每股參考淨值：該公司的每股參考淨值大於10元，這些公司通常規模較大，但增資過程中股價可能存在較大的下行風險。</li><li>放空時機：在現金增資公告後的前5天開始放空，持續到第25天。這段期間通常是市場對增資消息反應的關鍵時期，股價下跌機率較高。</li></ul>



<p><strong>回測結果</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="794" src="https://www.finlab.tw/wp-content/uploads/2024/10/image-6-1024x794.png" alt="image 6" class="wp-image-6348" srcset="https://www.finlab.tw/wp-content/uploads/2024/10/image-6-1024x794.png 1024w, https://www.finlab.tw/wp-content/uploads/2024/10/image-6-300x233.png 300w, https://www.finlab.tw/wp-content/uploads/2024/10/image-6-768x595.png 768w, https://www.finlab.tw/wp-content/uploads/2024/10/image-6-1536x1190.png 1536w, https://www.finlab.tw/wp-content/uploads/2024/10/image-6.png 1698w" sizes="(max-width: 1024px) 100vw, 1024px" title="量化交易完整指南：策略、實施與風險管理 17"></figure>



<ul><li>年化回報率：+25.4%，顯示該策略在市場放空操作中取得了相當高的收益。</li><li>Alpha：+33.3%，這表明相較於市場基準，該策略獲得了極高的超額回報。</li><li>Beta：-0.67，該策略與市場走勢呈現反向關係，屬於典型的空頭策略。</li><li>平均持有股票數：4檔，該策略較為集中，持有較少數的放空股票。</li><li>最大持有股票數：15檔，在某些時期策略會增加放空的股票數量以捕捉更大的市場機會。</li></ul>



<p><strong>歷史績效</strong> 從2010年到2021年，該策略累積報酬達到2662.92%，遠高於基準的447.52%。尤其在現金增資行為明顯增加的年份，策略表現特別突出。例如，2011年與2013年分別錄得75.2%與73.2%的高回報，而2021年更是達到145.0%。儘管在2010年與2016年出現了-18.5%和-7.3%的回撤，但策略整體回報仍然非常穩健，顯示其在特定市場條件下的有效性。</p>



<p>此策略的優勢在於能夠有效抓住現金增資期間股價的下跌機會，透過放空操作，實現穩定的高回報。</p>



<h2>量化交易的實施步驟</h2>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="852" src="https://www.finlab.tw/wp-content/uploads/2024/10/image-7-1024x852.png" alt="image 7" class="wp-image-6350" srcset="https://www.finlab.tw/wp-content/uploads/2024/10/image-7-1024x852.png 1024w, https://www.finlab.tw/wp-content/uploads/2024/10/image-7-300x250.png 300w, https://www.finlab.tw/wp-content/uploads/2024/10/image-7-768x639.png 768w, https://www.finlab.tw/wp-content/uploads/2024/10/image-7-1536x1278.png 1536w, https://www.finlab.tw/wp-content/uploads/2024/10/image-7-2048x1704.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="量化交易完整指南：策略、實施與風險管理 18"></figure>



<h3>1. 構建策略假設</h3>



<p>在進行量化交易之前，首先要針對市場提出一個假設，並找到相應的數據來支持這個假設。例如，假設某些股票在每週特定的一天更容易上漲，那麼可以收集足夠的歷史數據來進行分析驗證。</p>



<h3>2. 取得和清理數據</h3>



<p>量化交易的成功很大程度上取決於數據的質量和可靠性。首先需要從合法渠道獲取歷史數據，然後對數據進行清理，以確保其完整性和一致性。數據清理的常見步驟包括處理缺失值（例如使用插值法或刪除不完整的記錄）、去除異常值、標準化數據格式，以及確保數據的時間戳一致性。此外，還需要處理重複數據和進行數據轉換，以便符合模型的需求。這一步至關重要，因為數據錯誤或缺失將直接影響交易決策的準確性，導致模型的表現不穩定或錯誤的預測結果。</p>



<h3>3. 回測策略</h3>



<p>策略設計好後，需要通過回測來評估策略的可行性。回測是利用歷史數據模擬策略在過去的市場環境中的表現。回測時常用的指標包括夏普比率（Sharpe Ratio），用來衡量策略每單位風險所獲得的回報；以及最大下跌（Max Drawdown），用來衡量策略在歷史數據中的最大資本損失。這些指標有助於評估策略的風險與收益平衡，以確保其穩健性和可持續性。通過回測，可以判斷策略是否具有穩定的盈利能力，以及在不同市場情況下的表現。</p>



<p><strong>回測流程</strong></p>



<ol><li><strong>資料處理</strong><ul><li>收集歷史數據：收集市場的股價、財務報表、月營收等資料，作為後續分析的基礎。</li><li>清洗與預處理數據：處理缺失值、資料異常，並且對資料進行標準化或其他需要的轉換。</li><li>進行特徵工程：根據需求構建新的數據特徵，例如移動平均線、相對強弱指數（RSI）等指標。</li></ul></li><li><strong>因子分析與策略設計</strong><ul><li>因子篩選與生成：根據過往的數據計算出如本益比、自由現金流、股東權益報酬率等財務或市場指標，這些指標就是選股的&#8221;因子&#8221;。</li><li>事件研究：分析特定事件（如季度報表發布）的影響，並且選擇相關的策略。</li><li>設計策略邏輯：使用選定的因子來制定買入與賣出的邏輯，並且選擇特定的指標作為策略的觸發點。</li><li>初步回測：對策略進行簡單的測試，以檢查其是否合理並且有效。</li></ul></li><li><strong>策略優化與效能評估</strong><ul><li>調整策略參數：根據初步回測結果，調整參數，如移動平均線的長短、止損線等。</li><li>進行參數優化：使用數據分析或機器學習等技術進行參數的自動優化，找到使策略表現最好的參數組合。</li><li>計算關鍵指標：根據回測結果，計算收益率、最大回撤、夏普比率等指標來評估策略效能。</li><li>多次回測與驗證：在不同的時間區間與市場狀態下進行多次回測，檢驗策略的穩定性。</li></ul></li><li><strong>策略部署</strong><ul><li>當策略效能滿足要求後，將策略部署到真實市場。</li><li>使用 FinLab 進行策略開發的範例：</li></ul></li></ol>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">from finlab import data, backtest
import pandas as pd

# Step 1: 資料處理
price = data.get('price:收盤價')
vol = data.get('price:成交股數')
rev = data.get('monthly_revenue:當月營收')
roe = data.get('fundamental_features:ROE稅後')

# Step 2: 設計選股策略
# 條件1: 價格創年內新高
condition1 = price == price.rolling(250).max()
# 條件2: 月營收同比增長
condition2 = rev.rolling(12).mean() > rev.shift(12)
# 條件3: 股東權益報酬率大於15%
condition3 = roe > 15
# 條件4: 成交量大於 100萬股
condition4 = vol > 1000000

# 綜合條件：符合所有條件的股票
position = condition1 &amp; condition2 &amp; condition3 &amp; condition4

# Step 3: 策略回測
report = backtest.sim(position, resample='M')
report.display()
</code></pre>



<ol><li><strong>如何運作？</strong> 這段程式碼展示了一個簡單的選股策略流程：<ul><li><strong>資料處理</strong>：取得股票的收盤價、成交量、月營收和股東權益報酬率（ROE）。</li><li><strong>因子分析與策略設計</strong>：<ul><li>條件1：選擇股價創年內新高的股票。</li><li>條件2：篩選出過去12個月營收增長的股票。</li><li>條件3：要求股東權益報酬率高於15%。</li><li>條件4：流動性充足的股票（成交量超過100萬股）。</li></ul></li><li><strong>策略回測</strong>：每月重新選股並回測策略表現。這個過程簡單又有趣，接下來你就可以利用更多的因子來改進策略，最後達到滿意的效能！</li></ul></li></ol>



<p>在此步驟中，我們可以使用FinLab的工具來簡化回測過程，特別是對於有大量歷史數據和高頻交易的情況下，FinLab的工具能夠大大提高回測效率並提供詳細的績效報告。</p>



<h3>4. 優化和風險管理</h3>



<p>回測過程中發現的問題需要進一步優化，例如策略參數的調整、模型的改進等。同時，風險管理也是非常重要的一部分，包括止損設定、資金管理、和對策略風險的量化分析。任何策略都需要在獲利和風險之間找到最佳平衡。</p>



<h2>風險管理與量化交易的缺點</h2>



<p>量化交易具有許多優勢，如高效率、可執行複雜的數據分析等，但也有其固有的風險和缺點。例如，2018年由於市場波動劇烈，許多量化基金遭受重大損失，這反映出即使是高度自動化的模型，仍然可能受到突發事件的影響。此外，2007年夏天的&#8221;量化基金崩盤&#8221;事件中，幾家大型對沖基金因為市場異常波動而遭受重大損失，原因在於多數量化策略的集中性和模型的過度擬合，導致策略在極端市場狀況下失效。由於量化交易依賴於歷史數據和模型，當市場發生非預期的大幅變動（如黑天鵝事件）時，這些模型可能無法及時反應，從而導致虧損【7†source】。</p>



<p>此外，量化交易的資金需求較高，尤其是高頻交易策略需要龐大的資金和低延遲的交易設施。小資金投資者往往無法承受市場波動帶來的回檔風險。此外，數據的取得和使用也具有挑戰性，尤其是對於一般投資者來說，獲得優質數據往往需要支付高昂的費用。</p>



<h2>如何使用FinLab工具提升量化交易策略</h2>



<p><strong>FinLab工具的具體使用說明</strong></p>



<ol><li><strong>資料存取與處理</strong><ul><li><a href="https://doc.finlab.tw/getting-start" data-type="URL" data-id="https://doc.finlab.tw/getting-start" target="_blank" rel="noopener">FinLab</a> 提供了大量的金融數據，涵蓋股票價格、財務報表、月營收、基本面指標等，這些數據可以通過 <code>data.get()</code> 函數進行存取。例如，要獲取股票的收盤價資料，只需簡單輸入 <code>data.get('price:收盤價')</code>，即可取得一個 Pandas DataFrame 形式的資料。這些資料可以進行進一步處理，如計算移動平均線、滾動計算等。例如 <code>close.rolling(10).mean()</code> 可以計算 10 天的移動平均線。FinLab 還提供了額外的語法糖，像是 FinlabDataFrame 擴展了 Pandas DataFrame 的功能，使得處理不同頻率的資料更加簡便。</li></ul></li><li><strong>選股條件設定</strong><ul><li>FinLab 提供了強大的篩選功能，可以根據不同的指標來設定選股條件。例如，你可以篩選出股價達到年內新高的股票，或是篩選出營收增長或 ROE 高於某個門檻的公司。這些篩選條件可以使用類似於 Pandas 的邏輯操作符進行組合，例如 <code>condition1 &amp; condition2</code> 來結合多個條件。在這些篩選過程中，FinLab 的 <code>sustain()</code>、<code>is_largest()</code> 等函數能夠簡化篩選和時間序列的處理。</li></ul></li><li><strong>策略回測與模擬</strong><ul><li>FinLab 提供了簡便的回測工具 <code>backtest.sim()</code>，可以輕鬆進行策略的歷史模擬。只需提供一個基於篩選條件的 <code>position</code> DataFrame，設定回測的週期（例如每月換股 <code>resample='M'</code>），即可快速執行回測並得到策略的績效結果，包括收益率、夏普比率、最大回撤等指標。回測結果可以使用 <code>report.display()</code> 方法直觀展示。</li></ul></li><li><strong>語法糖與進階功能</strong><ul><li>FinLab 的 <code>FinlabDataFrame</code> 擴展了 Pandas 的標準功能，使得不同頻率的資料能夠無縫運算，省去資料對齊的麻煩。比如財報資料與股價資料具有不同頻率，FinLab 會自動對齊資料，不需要手動處理時間索引。此外，FinLab 還提供了止損、止盈、移動停損等進階功能，讓策略更具彈性和實用性。</li></ul></li></ol>



<p><strong>結論</strong> 總結來說，<a href="https://doc.finlab.tw/getting-start" target="_blank" rel="noopener">FinLab</a> 是一個功能全面且易於上手的量化投資工具，從資料收集、策略設計到回測模擬，都提供了便捷的接口與豐富的功能。無論你是新手還是進階使用者，都可以輕鬆利用 FinLab 開發和優化自己的投資策略。</p>



<h2>結論：如何開始量化交易</h2>



<p>量化交易是一個結合數據科學、金融知識和編程技術的複雜領域，但也充滿了機會。通過學習和應用常見的量化策略，如多因子選股、趨勢跟隨、高頻交易等，並且利用FinLab等專業工具進行策略回測和優化，可以大大提升交易的成功率。</p>



<p>無論你是剛入門的新手，還是想進一步提升交易績效的專業投資者，量化交易的核心在於不斷學習和調整策略，以應對不斷變化的市場。建議閱讀一些入門書籍，如Ernest Chan的《Algorithmic Trading: Winning Strategies and Their Rationale》、Yves Hilpisch的《Python for Finance: Mastering Data-Driven Finance》，這些書籍能夠幫助你掌握量化交易的基礎知識和技術。此外，像Coursera和Udemy等平台也提供了豐富的線上課程，適合不同水平的學習者，幫助你更快入門並應用所學知識。FinLab的工具可以幫助你簡化流程，並有效管理風險，使你的量化交易之旅更加順利。</p>



<p>開始你的量化交易之旅，從構建你的第一個交易策略開始，不斷優化和回測，借助FinLab工具將你的策略轉化為穩定的投資回報。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/%e9%87%8f%e5%8c%96%e4%ba%a4%e6%98%93%e5%ae%8c%e6%95%b4%e6%8c%87%e5%8d%97%ef%bc%9a%e7%ad%96%e7%95%a5%e3%80%81%e5%af%a6%e6%96%bd%e8%88%87%e9%a2%a8%e9%9a%aa%e7%ae%a1%e7%90%86/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6344</post-id>	</item>
		<item>
		<title>大跌後的底氣 &#8211; 獨家主力波動指標</title>
		<link>https://www.finlab.tw/broker_transaction_indicator/</link>
					<comments>https://www.finlab.tw/broker_transaction_indicator/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Wed, 07 Aug 2024 04:06:32 +0000</pubDate>
				<category><![CDATA[FinLab 量化平台]]></category>
		<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[籌碼面]]></category>
		<category><![CDATA[股票策略]]></category>
		<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[VIP限定]]></category>
		<category><![CDATA[歷史回測]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[量化投資]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=6277</guid>

					<description><![CDATA[券商分點理論上是非常有效果的數據，應用得當，可以用來預測股價的走勢，然而，市場上主要將券商分點資料來計算「主力買賣超」、「買賣家數差」，該指標在選股的有效程度上，並非顯著。

本文將提出一種新的方式，來提取券商分點資料，製作更有效的選股指標，其效果非常顯著，搭配回測策略能夠有效獲得卓越的效果。]]></description>
										<content:encoded><![CDATA[
<h1>介紹</h1>



<p>券商分點理論上是非常有效果的數據，應用得當，可以用來預測股價的走勢，然而，市場上主要將券商分點資料來計算「主力買賣超」、「買賣家數差」，該指標在選股上，效果不好。</p>



<p>本文將提出一種新的方式，來提取券商分點資料，製作更有效的選股指標，其效果非常顯著，搭配回測策略能夠有效獲得卓越的效果。本文將詳細說明這些概念的定義、計算方法及應用，並展示如何將這些知識綜合應用於投資策略的設計與回測。</p>



<p>建議讀者可以自行修改，將策略調整後，有很大的進步空間。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="585" src="https://www.finlab.tw/wp-content/uploads/2024/08/DALL·E-2024-08-07-12.04.12-A-minimalist-stock-price-V-shaped-recovery-chart-on-a-black-background.-The-V-shape-is-prominently-illuminated-giving-it-a-sleek-high-end-look.-The--1024x585.webp" alt="DALL·E 2024 08 07 12.04.12 A minimalist stock price V shaped recovery chart on a black background. The V shape is prominently illuminated giving it a sleek high end look. The" class="wp-image-6299" srcset="https://www.finlab.tw/wp-content/uploads/2024/08/DALL·E-2024-08-07-12.04.12-A-minimalist-stock-price-V-shaped-recovery-chart-on-a-black-background.-The-V-shape-is-prominently-illuminated-giving-it-a-sleek-high-end-look.-The--1024x585.webp 1024w, https://www.finlab.tw/wp-content/uploads/2024/08/DALL·E-2024-08-07-12.04.12-A-minimalist-stock-price-V-shaped-recovery-chart-on-a-black-background.-The-V-shape-is-prominently-illuminated-giving-it-a-sleek-high-end-look.-The--300x171.webp 300w, https://www.finlab.tw/wp-content/uploads/2024/08/DALL·E-2024-08-07-12.04.12-A-minimalist-stock-price-V-shaped-recovery-chart-on-a-black-background.-The-V-shape-is-prominently-illuminated-giving-it-a-sleek-high-end-look.-The--768x439.webp 768w, https://www.finlab.tw/wp-content/uploads/2024/08/DALL·E-2024-08-07-12.04.12-A-minimalist-stock-price-V-shaped-recovery-chart-on-a-black-background.-The-V-shape-is-prominently-illuminated-giving-it-a-sleek-high-end-look.-The--1536x878.webp 1536w, https://www.finlab.tw/wp-content/uploads/2024/08/DALL·E-2024-08-07-12.04.12-A-minimalist-stock-price-V-shaped-recovery-chart-on-a-black-background.-The-V-shape-is-prominently-illuminated-giving-it-a-sleek-high-end-look.-The-.webp 1792w" sizes="(max-width: 1024px) 100vw, 1024px" title="大跌後的底氣 - 獨家主力波動指標 19"></figure>



<h1>籌碼分點資料（Broker Transactions）</h1>



<h2>什麼是籌碼分點資料</h2>



<p>籌碼分點資料是指某一股票在不同券商之間的買賣交易情況。這些資料包括買入量、賣出量等，反映了不同券商在特定時間段內的交易行為。這些數據能提供市場上資金流動的資訊，有助於投資者理解市場動向。</p>



<h2>資料來源與取得方式</h2>



<p>在台灣，投資者可以通過一些金融資料平台，如Finlab，來獲取籌碼分點資料。這些平台提供了方便的API接口，使投資者能夠輕鬆下載和分析數據。</p>



<pre class="wp-block-code"><code lang="python" class="language-python">from finlab import data
bt = data.get('broker_transactions', force_download=True)

buysell = bt.groupby(['date', 'stock_id']).agg({'buy': 'sum', 'sell': 'sum'})\
  .reset_index().pivot(columns='stock_id', index='date', values=['buy', 'sell'])

buysell.head()</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="254" src="https://www.finlab.tw/wp-content/uploads/2024/08/image-1-1024x254.png" alt="image 1" class="wp-image-6279" srcset="https://www.finlab.tw/wp-content/uploads/2024/08/image-1-1024x254.png 1024w, https://www.finlab.tw/wp-content/uploads/2024/08/image-1-300x74.png 300w, https://www.finlab.tw/wp-content/uploads/2024/08/image-1-768x190.png 768w, https://www.finlab.tw/wp-content/uploads/2024/08/image-1-1536x381.png 1536w, https://www.finlab.tw/wp-content/uploads/2024/08/image-1-2048x508.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="大跌後的底氣 - 獨家主力波動指標 20"></figure>



<p></p>



<h2>籌碼分點資料的深度分析</h2>



<h3>過往如何通過籌碼分點資料識別主力資金動向</h3>



<p>主力資金的動向通常對市場影響巨大。通過分析籌碼分點資料中的大額交易，可以識別出主力資金的買賣行為，從而提前佈局。</p>



<h3>過往的券商分點指標</h3>



<p>過往有一些券商分點指標，對於選股有一些效果，然而實測上，顯著程度有限。以下列舉最常見的兩種指標：</p>



<h3>主力買賣超</h3>



<p><strong>定義</strong>：</p>



<p>主力買賣超是指某一特定時間段內，主要券商的買入量與賣出量之差。</p>



<p><strong>計算公式</strong>： </p>



<p>主力買賣超=∑(主要券商買入量)−∑(主要券商賣出量)</p>



<p><strong>效用：</strong></p>



<ul><li><strong>資金動向指標</strong>：主力買賣超反映了市場中資金流向的變化，主要券商的大額買入或賣出行為通常代表著市場主力資金的動向，能夠影響股票價格。</li><li><strong>市場情緒指標</strong>：通過觀察主力買賣超，投資者可以了解市場主力的投資情緒，進而做出相應的投資決策。</li></ul>



<h3>買賣家數差</h3>



<p><strong>定義</strong>：</p>



<p>買賣家數差是指買入股票的券商家數與賣出股票的券商家數之差。</p>



<p><strong>計算公式</strong>： </p>



<p>買賣家數差=買入券商家數−賣出券商家數</p>



<p><strong>效用：</strong></p>



<p><strong>市場參與度指標</strong>：買賣家數差反映了市場中多空雙方的力量對比，當買入券商家數多於賣出券商家數時，表示市場散戶的偏好。</p>



<p><strong>供需平衡指標</strong>：買賣家數差能夠幫助投資者判斷市場供需平衡狀況，從而預測未來價格走勢。</p>



<p>上述指標效果平平，接下來，我們將藉由 ChatGPT 發想更優秀的指標。</p>



<h1>券商分點資料建構指標</h1>



<h2>利用 ChatGPT 發想相關想法</h2>



<p>為了創建更好的指標，我們可以透過 ChatGPT 來輔助產生不同的 factor 進行運算，這種方法並非標新立異，其實早就在</p>



<blockquote class="wp-block-quote"><p>Cheng, Yuhan, and Ke Tang. &#8220;GPT&#8217;s idea of stock factors.&#8221;&nbsp;<em>Quantitative Finance</em>&nbsp;(2024): 1-26.</p></blockquote>



<p>被介紹過。</p>



<h2>指標種類與計算方式</h2>



<p>以下為 ChatGPT 產生的指標，其中有一些是滿有參考性的，我們可以拿來使用看看，下圖中，雖然它誤以為 ICIR 是一種協會（等等介紹這是什麼），然而也提供了一些不錯的指標：</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="941" height="1024" src="https://www.finlab.tw/wp-content/uploads/2024/08/image-5-941x1024.png" alt="image 5" class="wp-image-6293" srcset="https://www.finlab.tw/wp-content/uploads/2024/08/image-5-941x1024.png 941w, https://www.finlab.tw/wp-content/uploads/2024/08/image-5-276x300.png 276w, https://www.finlab.tw/wp-content/uploads/2024/08/image-5-768x835.png 768w, https://www.finlab.tw/wp-content/uploads/2024/08/image-5.png 1412w" sizes="(max-width: 941px) 100vw, 941px" title="大跌後的底氣 - 獨家主力波動指標 21"></figure>



<h2>產生程式碼</h2>



<p>ChatGPT 除了可以幫忙發想指標外，也可以用來產生出相對應的程式，這樣就不需要親自撰寫程式。</p>



<p></p>



<pre class="wp-block-code"><code lang="python" class="language-python">import warnings
warnings.filterwarnings('ignore')

net_volume = buysell['buy'] - buysell['sell']
buy_sell_ratio = buysell['buy'] / buysell['sell']
balance_index = (buysell['buy'] - buysell['sell']) / (buysell['buy'] + buysell['sell'])

feature_dfs = {
    'net_volume': net_volume,
    'buy_sell_ratio': buy_sell_ratio,
    'balance_index': balance_index,

}</code></pre>



<p></p>



<h2>有效性</h2>



<p>我們當然會希望這些指標是有效的，需要有一個衡量標準，能夠一致性的對於這些不同的指標進行評分，方便我們從中選出最適合選股的指標，通常我們會使用 IC、ICIR 來衡量這些指標是否對於未來的股價有相關性。</p>



<h1>Information Coefficient (IC)</h1>



<h2>介紹</h2>



<p>IC，即Information Coefficient，是衡量一個指標在預測資產回報方面的能力的數值。簡單來說，IC代表了預測回報與實際回報之間的相關性。IC的範圍一般在-1到1之間，其中正值表示預測回報與實際回報正相關，負值表示兩者負相關。IC的絕對值越高，表示預測能力越強。</p>



<p>IC的計算方法如下：</p>



<p>IC = Cov(r,x) / σrσx</p>



<p>其中，r 為實際回報，x 為預測回報，Cov(r,x) 為兩者的協方差，σr、σx​ 分別為實際回報和預測回報的標準差。</p>



<p>IC主要用於衡量單一時點上的預測能力，而ICIR則進一步綜合多個時點上的IC，評估一段時間內的整體預測能力。</p>



<h2>ICIR</h2>



<h2>如何計算ICIR</h2>



<p>ICIR的計算主要基於Information Coefficient（IC），其公式如下：</p>



<p>ICIR = Mean(IC) × Std(IC)</p>



<h2>在投資中的應用</h2>



<p>ICIR能幫助投資者評估不同策略或指標的預測能力，從而選擇具有較穩定的預測能力的策略。高ICIR值通常表示策略具有穩定的預測能力，適合在實際投資中應用。</p>



<h3>程式碼</h3>



<pre class="wp-block-code"><code lang="python" class="language-python">from finlab.tools.factor_analysis import ic

adj_close = data.get('etl:adj_close')
# 每個時間點的IC
ics = ic(feature_dfs, adj_close, days=[10, 20, 60]) 

# 取平均
ics.mean()

# 取得ICIR
ics.mean() / ics.std()</code></pre>



<h3>遞迴優化參數</h3>



<p>藉由 ICIR，我們可以疊代不同的公式，產生出更好的指標：</p>



<ol><li>產生指標庫：先計算與發想指標</li><li>計算IC、ICIR</li><li>更新指標指標庫<ol><li>移除沒有效果的指標</li><li>有效果的指標進行參數優化，列舉多個變體</li></ol></li><li>重複步驟 1</li></ol>



<h2>成果</h2>



<pre class="wp-block-code"><code lang="python" class="language-python">import numpy as np

def std(df, n):
  return df.rolling(n).std().replace(0, np.nan)

buy_change = buysell['buy'] - buysell['buy'].shift(1)
sell_change = buysell['sell'] - buysell['sell'].shift(1)
net_volume_change = net_volume - net_volume.shift(1)

feature_dfs = {
    'net_volume': net_volume,
    'buy_sell_ratio': buy_sell_ratio,
    'balance_index': balance_index,

    'avg20_net_volume': net_volume / net_volume.rolling(20).mean(),
    'avg20_buy_sell_ratio': buy_sell_ratio.rolling(20).mean(),
    'avg20_balance_index': balance_index.rolling(20).mean(),

    'sharpe5_net_volume': net_volume.rolling(5).mean() / std(net_volume, 5),
    'sharpe10_net_volume': net_volume.rolling(10).mean() / std(net_volume, 10),
    'sharpe20_net_volume': net_volume.rolling(20).mean() / std(net_volume, 20),
    'sharpe60_net_volume': net_volume.rolling(60).mean() / std(net_volume, 60),
    
    'sharpe5_balance_index': balance_index.rolling(5).mean() / std(balance_index, 5),
    'sharpe10_balance_index': balance_index.rolling(10).mean() / std(balance_index, 10),
    'sharpe20_balance_index': balance_index.rolling(20).mean() / std(balance_index, 20),
    'sharpe60_balance_index': balance_index.rolling(60).mean() / std(balance_index, 60),
    
    'sharpe5_buy_sell_ratio': buy_sell_ratio.rolling(5).mean() / std(buy_sell_ratio, 5),
    'sharpe10_buy_sell_ratio': buy_sell_ratio.rolling(10).mean() / std(buy_sell_ratio, 10),
    'sharpe20_buy_sell_ratio': buy_sell_ratio.rolling(20).mean() / std(buy_sell_ratio, 20),
    'sharpe30_buy_sell_ratio': buy_sell_ratio.rolling(30).mean() / std(buy_sell_ratio, 30),
    'sharpe60_buy_sell_ratio': buy_sell_ratio.rolling(60).mean() / std(buy_sell_ratio, 60),
}

from finlab.tools.factor_analysis import ic

adj_close = data.get('etl:adj_close')
ics = ic(feature_dfs, adj_close, days=[10, 20, 60])</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" width="559" height="596" src="https://www.finlab.tw/wp-content/uploads/2024/08/image-6.png" alt="image 6" class="wp-image-6307" srcset="https://www.finlab.tw/wp-content/uploads/2024/08/image-6.png 559w, https://www.finlab.tw/wp-content/uploads/2024/08/image-6-281x300.png 281w" sizes="(max-width: 559px) 100vw, 559px" title="大跌後的底氣 - 獨家主力波動指標 22"></figure>



<p>上圖中可以發現，最終做出來的指標，其 IC 最高，高達 0.04，其中一種指標，雖然表現並不是非常理想，但用選股策略上非常有效果，我把它叫做「主力波動指標」。</p>



<h1>主力波動與穩定性</h1>



<p>主力常常上攻後又迅速熄火，讓投資者難以捕捉到持續的上漲機會。甚至是隔日沖主力，常常當天買、隔天賣，使得券商分點特別難用。為了克服這一問題，我們需要構建一個更為有效的指標，以更準確地識別市場中的主力動向，特別是穩定買入、持續買入的主力，並提高投資決策的穩定性。</p>



<h2>指標的需求</h2>



<p>指標必須滿足以下需求：</p>



<ol><li><strong>主力買賣比率</strong>：滾動平均值（rolling mean）能夠平滑短期波動，使得我們能夠觀察到買賣比率的中期趨勢。通過計算10日滾動平均值，我們可以避免因單日大幅波動而帶來的誤判，更清晰地看到市場主力的買入行為。</li><li><strong>買入波動性</strong>：標準差（std）是衡量數據波動性的重要指標。當買賣比率的標準差較低時，意味著買賣比率在這段時間內波動較小，主力行為相對穩定。低波動性通常表明市場中存在持續且穩定的買入或賣出行為。</li><li><strong>識別持續買入</strong>：該指標將滾動平均值與標準差進行比值計算，即買賣比率的均值除以其標準差。當這個比值較高時，說明在這段時間內，買賣比率不僅處於較高水準，且波動較小，這表明市場中可能存在持續且穩定的買入行為。這些行為通常是由市場主力資金推動的，因為他們在積極且穩定地買入股票，從而推高買賣比率並保持其穩定性。</li></ol>



<h2>公式如下</h2>



<p>買賣比率 = 前 15 大主力買入 / 前 15 大主力賣出</p>



<p>主力波動 = 買賣比率的10日平均 / 買賣比率的10日​標準差</p>



<h2>效果</h2>



<p>當該指標數值較高時，說明在過去的10日內，主力買入大量且不輕易變化，這表明市場中可能存在持續且穩定的買入行為，這些行為通常由主力資金推動。相反，若該指標數值較低，則表示買賣比率波動較大且不穩定，市場中可能缺乏持續的買入力量、或是有隔日沖的行為。</p>



<p>該指標能夠獲得非常高的 IC，並且利用該指標，可以輕易做出效果顯著的策略。</p>



<h1>回測</h1>



<p>以下是一個簡單的回測範例，展示如何通過籌碼分點資料來進行策略回測，我們利用「主力波動指標」為主體，月營收YOY為輔助，來尋找短期具有爆發力的股票標的。值得一提的是，這個策略當前並非最佳解，還有很多種方式可以大幅優化此策略的效果，建議讀者可以稍做調整，而非直接使用。</p>



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

ind = FinlabDataFrame(feature_dfs['sharpe10_buy_sell_ratio'])

close = data.get('price:收盤價')
volume = data.get('price:成交股數')
rev = data.get('monthly_revenue:當月營收')

# 1. 尋找月營收YOY大於1.5的股票標的
# 2. 成交量來到 300 張，確保流動性
# 3. 以主力波動指標進行排序，選最高的 20 檔
pos = (ind)[(rev / rev.shift(12) &gt; 1.5)
  &amp; (volume &gt; 300_000)
].is_largest(20)

r = sim(pos, resample=rev.index)</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="1008" src="https://www.finlab.tw/wp-content/uploads/2024/08/image-3-1024x1008.png" alt="image 3" class="wp-image-6281" srcset="https://www.finlab.tw/wp-content/uploads/2024/08/image-3-1024x1008.png 1024w, https://www.finlab.tw/wp-content/uploads/2024/08/image-3-300x295.png 300w, https://www.finlab.tw/wp-content/uploads/2024/08/image-3-768x756.png 768w, https://www.finlab.tw/wp-content/uploads/2024/08/image-3-1536x1511.png 1536w, https://www.finlab.tw/wp-content/uploads/2024/08/image-3.png 1742w" sizes="(max-width: 1024px) 100vw, 1024px" title="大跌後的底氣 - 獨家主力波動指標 23"></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="979" src="https://www.finlab.tw/wp-content/uploads/2024/08/image-4-1024x979.png" alt="image 4" class="wp-image-6282" srcset="https://www.finlab.tw/wp-content/uploads/2024/08/image-4-1024x979.png 1024w, https://www.finlab.tw/wp-content/uploads/2024/08/image-4-300x287.png 300w, https://www.finlab.tw/wp-content/uploads/2024/08/image-4-768x734.png 768w, https://www.finlab.tw/wp-content/uploads/2024/08/image-4-1536x1468.png 1536w, https://www.finlab.tw/wp-content/uploads/2024/08/image-4.png 1636w" sizes="(max-width: 1024px) 100vw, 1024px" title="大跌後的底氣 - 獨家主力波動指標 24"></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/broker_transaction_indicator/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6277</post-id>	</item>
		<item>
		<title>槓桿動態調控策略的量化分析</title>
		<link>https://www.finlab.tw/leverage-dynamic-adjustment-strategy/</link>
					<comments>https://www.finlab.tw/leverage-dynamic-adjustment-strategy/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Wed, 22 May 2024 04:55:00 +0000</pubDate>
				<category><![CDATA[FinLab 量化平台]]></category>
		<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[技術面]]></category>
		<category><![CDATA[股票策略]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[歷史回測]]></category>
		<category><![CDATA[選股策略]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=6193</guid>

					<description><![CDATA[在投資市場中，槓桿是一種常見的放大收益工具。然而，槓桿同時也會放大風險，如何在獲取高收益的同時有效控制風險是投資者面臨的主要挑戰之一。本研究旨在探討一種動態調控槓桿策略，該策略基於最大下跌 (Maximum Drawdown, MDD) 的控制來動態調整投資部位，從而在控制風險的同時獲取可觀的收益。]]></description>
										<content:encoded><![CDATA[
<p>在投資市場中，槓桿是一種常見的放大收益工具。然而，槓桿同時也會放大風險，如何在獲取高收益的同時有效控制風險是投資者面臨的主要挑戰之一。本研究旨在探討一種動態調控槓桿策略，該策略基於最大下跌 (Maximum Drawdown, MDD) 的控制來動態調整投資部位，從而在控制風險的同時獲取可觀的收益。</p>



<h2>相關概念</h2>





<h3>最大下跌</h3>



<p>最大下跌是衡量投資組合在特定期間內從峰值到谷底的最大資產價值跌幅。具體定義為：</p>



<img src="https://s0.wp.com/latex.php?latex=MDD%28k%29+%3D+%5Cfrac%7BV_%7B%5Ctext%7Bmax%7D%7D%28k%29+-+V%28k%29%7D%7BV_%7B%5Ctext%7Bmax%7D%7D%28k%29%7D&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="MDD(k) = &#092;frac{V_{&#092;text{max}}(k) - V(k)}{V_{&#092;text{max}}(k)}" class="latex" title="槓桿動態調控策略的量化分析 25">



<p>其中，<img src="https://s0.wp.com/latex.php?latex=V%28k%29&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="V(k)" class="latex" title="槓桿動態調控策略的量化分析 26"> 是時間 <img src="https://s0.wp.com/latex.php?latex=k&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="k" class="latex" title="槓桿動態調控策略的量化分析 27"> 的資產價值，<img src="https://s0.wp.com/latex.php?latex=V_%7B%5Ctext%7Bmax%7D%7D%28k%29&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="V_{&#092;text{max}}(k)" class="latex" title="槓桿動態調控策略的量化分析 28"> 是時間 <img src="https://s0.wp.com/latex.php?latex=k&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="k" class="latex" title="槓桿動態調控策略的量化分析 27"> 之前的最大資產價值。MDD 是一個重要的風險衡量指標，因為它直接反映了投資者可能面臨的最大損失。</p>



<h2>動機</h2>



<p>在牛市中，投資者希望利用槓桿放大收益，但在熊市中又希望能有效控制風險。傳統的槓桿策略往往在市場下跌時面臨巨大風險，而不使用槓桿則可能錯失市場上漲帶來的收益。因此，本文提出基於 MDD 的動態調控槓桿策略，旨在實現高收益與低風險之間的平衡。</p>



<h2>方法</h2>



<p>本文採用宗翰教授所發表「On Data-Driven Drawdown Control with Restart Mechanism in Trading」的論文中提出的「下跌調控反饋控制」策略，其公式如下：</p>



<img src="https://s0.wp.com/latex.php?latex=M%28k%29+%3D+%5Cgamma+%5Cfrac%7Bd_%7B%5Ctext%7Bmax%7D%7D+-+d%28k%29%7D%7B1+-+d%28k%29%7D&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="M(k) = &#092;gamma &#092;frac{d_{&#092;text{max}} - d(k)}{1 - d(k)}" class="latex" title="槓桿動態調控策略的量化分析 30">



<p>其中，M(k) 是調整部位的係數，隨時間 k 變化。<img src="https://s0.wp.com/latex.php?latex=d%28k%29&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="d(k)" class="latex" title="槓桿動態調控策略的量化分析 31"> 是時間 <img src="https://s0.wp.com/latex.php?latex=k&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="k" class="latex" title="槓桿動態調控策略的量化分析 27"> 的最大下跌比例，<img src="https://s0.wp.com/latex.php?latex=d_%7B%5Ctext%7Bmax%7D%7D+&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="d_{&#092;text{max}} " class="latex" title="槓桿動態調控策略的量化分析 33"> 是使用者設定的最大可容許下跌，<img src="https://s0.wp.com/latex.php?latex=%5Cgamma&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="&#092;gamma" class="latex" title="槓桿動態調控策略的量化分析 34"> 是類似於槓桿倍數的調整參數。</p>



<p>具體操作步驟如下：</p>



<ul><li>設定初始投資金額及最大可容許下跌比例 <img src="https://s0.wp.com/latex.php?latex=d_%7B%5Ctext%7Bmax%7D%7D&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="d_{&#092;text{max}}" class="latex" title="槓桿動態調控策略的量化分析 35">。</li><li>根據市場走勢計算每個時刻的最大下跌 <img src="https://s0.wp.com/latex.php?latex=d%28k%29&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="d(k)" class="latex" title="槓桿動態調控策略的量化分析 31">。</li><li>根據公式動態調整槓桿比例 M(k)，以控制風險。</li></ul>



<h3>數字範例</h3>



<p>讓我們透過一些數字範例來更詳細說明：</p>



<p>假設我們設定的最大可容許下跌比例 <img src="https://s0.wp.com/latex.php?latex=d_%7B%5Ctext%7Bmax%7D%7D&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="d_{&#092;text{max}}" class="latex" title="槓桿動態調控策略的量化分析 35"> 為 0.2（即 20%），初始投資金額為 100,000 元，並選擇 <img src="https://s0.wp.com/latex.php?latex=%5Cgamma&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="&#092;gamma" class="latex" title="槓桿動態調控策略的量化分析 34"> 為 2。</p>



<h3>初始狀態 <img src="https://s0.wp.com/latex.php?latex=k%3D0&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="k=0" class="latex" title="槓桿動態調控策略的量化分析 39"></h3>



<ul><li>投資金額：100,000 元</li><li>最大下跌 <img src="https://s0.wp.com/latex.php?latex=d%280%29&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="d(0)" class="latex" title="槓桿動態調控策略的量化分析 40">：0</li><li>調整係數 <img src="https://s0.wp.com/latex.php?latex=M%280%29&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="M(0)" class="latex" title="槓桿動態調控策略的量化分析 41">：
<img src="https://s0.wp.com/latex.php?latex=M%280%29+%3D+2+%5Ctimes+%5Cfrac%7B0.2+-+0%7D%7B1+-+0%7D+%3D+0.4&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="M(0) = 2 &#092;times &#092;frac{0.2 - 0}{1 - 0} = 0.4" class="latex" title="槓桿動態調控策略的量化分析 42">
</li></ul>



<h3>第 1 天 <img src="https://s0.wp.com/latex.php?latex=k%3D1&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="k=1" class="latex" title="槓桿動態調控策略的量化分析 43"></h3>



<ul><li>假設市場價格下跌 5%，投資金額變為 95,000 元</li><li>當前最大下跌 <img src="https://s0.wp.com/latex.php?latex=d%281%29&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="d(1)" class="latex" title="槓桿動態調控策略的量化分析 44">：0.05（即 5%）</li><li>調整係數 <img src="https://s0.wp.com/latex.php?latex=M%281%29&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="M(1)" class="latex" title="槓桿動態調控策略的量化分析 45">：
<img src="https://s0.wp.com/latex.php?latex=M%281%29+%3D+2+%5Ctimes+%5Cfrac%7B0.2+-+0.05%7D%7B1+-+0.05%7D+%3D+0.3158&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="M(1) = 2 &#092;times &#092;frac{0.2 - 0.05}{1 - 0.05} = 0.3158" class="latex" title="槓桿動態調控策略的量化分析 46">
</li></ul>



<h3>第 2 天 <img src="https://s0.wp.com/latex.php?latex=k%3D2&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="k=2" class="latex" title="槓桿動態調控策略的量化分析 47"></h3>



<ul><li>假設市場價格再下跌 10%，投資金額變為 85,500 元</li><li>當前最大下跌 <img src="https://s0.wp.com/latex.php?latex=d%282%29&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="d(2)" class="latex" title="槓桿動態調控策略的量化分析 48">：0.145（即 14.5%）</li><li>調整係數 <img src="https://s0.wp.com/latex.php?latex=M%282%29&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="M(2)" class="latex" title="槓桿動態調控策略的量化分析 49">：
<img src="https://s0.wp.com/latex.php?latex=M%282%29+%3D+2+%5Ctimes+%5Cfrac%7B0.2+-+0.145%7D%7B1+-+0.145%7D+%3D+0.1286&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="M(2) = 2 &#092;times &#092;frac{0.2 - 0.145}{1 - 0.145} = 0.1286" class="latex" title="槓桿動態調控策略的量化分析 50">
</li></ul>



<p>從這些範例中可以看出，隨著市場下跌，調整係數 <img src="https://s0.wp.com/latex.php?latex=M%28k%29&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="M(k)" class="latex" title="槓桿動態調控策略的量化分析 51"> 會逐漸減小，從而減少投資部位，達到風險控制的效果。相反，當市場上升時，調整係數會增大，從而增加投資部位，實現槓桿效應。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-finlab wp-block-embed-finlab"><div class="wp-block-embed__wrapper">
<div class="oceanwp-oembed-wrap clr"><blockquote class="wp-embedded-content" data-secret="5bK5RIjbVo"><a href="https://www.finlab.tw/pb-data-analysis-explain/">股價淨值比能找到好股票？用歷史數據讓你感受它的厲害！</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" title="股價淨值比能找到好股票？用歷史數據讓你感受它的厲害！ &#8212; FinLab" src="https://www.finlab.tw/pb-data-analysis-explain/embed/#?secret=GFDv4ebAK2#?secret=5bK5RIjbVo" data-secret="5bK5RIjbVo" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></div>
</div></figure>



<h2>實驗</h2>



<p>本實驗通過隨機漫步 (random walk) 模擬報酬曲線，並對其最大風險和終端報酬率進行分析。共進行1000次模擬，並將結果分別用淺灰色、紅色和藍色表示不同的策略：</p>



<ul><li><strong>淺灰色</strong>：不使用槓桿的買入並持有 (buy-and-hold) 策略。</li><li><strong>紅色</strong>：單純使用兩倍槓桿的策略。</li><li><strong>藍色</strong>：使用上述公式進行動態調節部位的兩倍槓桿策略。</li></ul>



<p>以下是詳細的程式碼和註解：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers"># 匯入所需的函式庫
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 設定圖表尺寸
plt.rcParams['figure.figsize'] = (16, 6)
# 計算移動平均最大下跌
def mm(s):
    return ((s.cummax() - s) / s.cummax()).shift().rolling(10).mean()
# 初始化數據儲存的列表
means = []
means2 = []
mdds = []
mdds2 = []
means3 = []
mdds3 = []
# 進行3000次模擬
for i in range(3000):
    # 生成隨機漫步序列，模擬股票價格
    s = pd.Series(np.random.randn(250)+0.01, index=pd.date_range('1/1/2000', periods=250)).div(100).add(1).cumprod()
    
    # 計算最大下跌
    mdd = ((s.cummax() - s) / s.cummax()).max()
    # 計算動態槓桿比例
    gamma = 1.7 / (mdd + 0.1)
    size = (gamma * ((mdd + 0.1 - mm(s)) / (1 - mm(s))))
    
    # 計算動態槓桿策略的回報
    r = (s.pct_change() * size + 1).cumprod()
    rmdd = ((r.cummax() - r) / r.cummax()).max()
    # 儲存結果
    means.append(s[-1])
    means2.append(r[-1])
</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="395" src="https://www.finlab.tw/wp-content/uploads/2024/05/output-1024x395.png" alt="output" class="wp-image-6197" srcset="https://www.finlab.tw/wp-content/uploads/2024/05/output-1024x395.png 1024w, https://www.finlab.tw/wp-content/uploads/2024/05/output-300x116.png 300w, https://www.finlab.tw/wp-content/uploads/2024/05/output-768x296.png 768w, https://www.finlab.tw/wp-content/uploads/2024/05/output.png 1309w" sizes="(max-width: 1024px) 100vw, 1024px" title="槓桿動態調控策略的量化分析 52"><figcaption>最大下跌分佈（左）與終端報酬率（右）</figcaption></figure>



<h3>結果分析</h3>



<ol><li> <strong>藍色線條的最大風險控制效果顯著</strong>：藍色線條在左側的最大下跌分佈顯示，動態調節槓桿的策略有效降低了風險，最大下跌值相比紅色和淺灰色顯著減少。</li><li><strong>正終端報酬率時的表現</strong>：在終端報酬率為正的情況下，藍色和紅色線條的分佈相似，這表示動態調節槓桿策略在收益表現上與單純兩倍槓桿策略相當。 </li><li><strong>避免大額虧損</strong>：當終端報酬率接近0時，藍色線條顯示出更多的小額虧損，但總體而言，藍色線條有效避免了許多大額虧損，這顯示動態調節槓桿策略在風險管理上有明顯優勢。 

本研究提出的基於最大下跌調控的動態槓桿策略能夠在控制風險的同時實現與傳統槓桿策略相近的收益表現。通過動態調整投資部位，我們可以有效減少市場下跌時的風險，並在市場上漲時獲取可觀收益。這一策略為投資者提供了一種在牛市中放大收益、熊市中控制風險的有效工具。 </li></ol>



<h2>結論</h2>



<p>參考文獻: Hsieh, Chung-Han. &#8220;Generalization of affine feedback stock trading results to include stop-loss orders.&#8221; Automatica 136 (2022): 110051.</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-finlab wp-block-embed-finlab"><div class="wp-block-embed__wrapper">
<div class="oceanwp-oembed-wrap clr"><blockquote class="wp-embedded-content" data-secret="UZxPY5S326"><a href="https://www.finlab.tw/%e9%81%b8%e8%82%a1%e7%ad%96%e7%95%a5%e5%9b%9e%e6%b8%ac%e6%96%b0%e5%8a%9f%e8%83%bd%e6%ac%8a%e9%87%8d%e5%a4%9a%e7%a9%ba%e5%b0%8d%e6%b2%96sunburst-%e7%94%a2%e6%a5%ad%e5%88%86%e6%9e%90pandasta-%e6%8a%80/">選股策略回測有新功能！包含權重多空對沖、Sunburst 產業分析、PandasTA 技術指標 &#8211; FinLab 0.3.2.dev 再進化！</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" title="選股策略回測有新功能！包含權重多空對沖、Sunburst 產業分析、PandasTA 技術指標 &#8211; FinLab 0.3.2.dev 再進化！ &#8212; FinLab" src="https://www.finlab.tw/%e9%81%b8%e8%82%a1%e7%ad%96%e7%95%a5%e5%9b%9e%e6%b8%ac%e6%96%b0%e5%8a%9f%e8%83%bd%e6%ac%8a%e9%87%8d%e5%a4%9a%e7%a9%ba%e5%b0%8d%e6%b2%96sunburst-%e7%94%a2%e6%a5%ad%e5%88%86%e6%9e%90pandasta-%e6%8a%80/embed/#?secret=l0Y9fyysf4#?secret=UZxPY5S326" data-secret="UZxPY5S326" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></div>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/leverage-dynamic-adjustment-strategy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6193</post-id>	</item>
		<item>
		<title>每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落</title>
		<link>https://www.finlab.tw/%e6%af%8f%e5%a4%a9%e7%9c%8b%e5%a4%96%e8%b3%87%e8%b2%b7%e8%b3%a3%e8%b6%85%e5%8d%bb%e4%b8%8d%e7%9f%a5%e9%81%93%e6%80%8e%e9%ba%bc%e8%a7%a3%e8%ae%80%e5%97%8e%e5%a4%96%e8%b3%87%e9%81%bf%e9%9a%aa%e6%8c%87/</link>
					<comments>https://www.finlab.tw/%e6%af%8f%e5%a4%a9%e7%9c%8b%e5%a4%96%e8%b3%87%e8%b2%b7%e8%b3%a3%e8%b6%85%e5%8d%bb%e4%b8%8d%e7%9f%a5%e9%81%93%e6%80%8e%e9%ba%bc%e8%a7%a3%e8%ae%80%e5%97%8e%e5%a4%96%e8%b3%87%e9%81%bf%e9%9a%aa%e6%8c%87/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Thu, 09 May 2024 14:52:41 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[如何買股票]]></category>
		<category><![CDATA[歷史回測]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[選股策略]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=6176</guid>

					<description><![CDATA[近期台股回落調整，外資持續賣出台股。究竟外資是何方神聖，為什麼能夠控制整個市場？交易所每天盤後都會公佈外資買賣超數量，為什麼那麼多人在關注?又要怎麼解讀?本篇就帶大家來了解外資信息，善用外資買賣超提前避開股市大幅回落!]]></description>
										<content:encoded><![CDATA[
<p>近期台股回落調整，外資持續賣出台股。究竟外資是何方神聖，為什麼能夠控制整個市場？交易所每天盤後都會公佈外資買賣超數量，為什麼那麼多人在關注?又要怎麼解讀?本篇就帶大家來了解外資信息，善用外資買賣超提前避開股市大幅回落!</p>



<h1 id="para1">為什麼外資買賣超這麼重要?</h1>



<p>根據<a href="https://www.sfb.gov.tw/ch/home.jsp?id=1024&amp;parentpath=0%2C4%2C109" rel="noreferrer noopener" target="_blank">金融監督管理委員會</a>數據，2023年底外資及陸資持有股票市值占總市值比例達38.47%。根據證交所數據統計(2024/04/30)，台股市值最大的半導體產業，外資及陸資持股比例則達43.89%，其中權值最大的台積電(2330)，外資及陸資持股比例則達74.42%。外資是台股市場中的最大法人，像台股這樣的淺碟型市場，外資的一舉一動都會牽一髮而動全身。這也就是為什麼投資人會非常關注外資買賣超了。</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714641718333-foreign_stats1.jpg" alt="FinLab 財經實驗室" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 53"></figure>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714641732328-foreign_stats2.jpg" alt="FinLab 財經實驗室" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 54"></figure>



<h1 id="para2">外資買賣超</h1>



<p>事實上，單純看外資每日的買賣超數據，是雜訊非常多的指標，很難拿來使用。</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714641897755-1670922727509-%E5%88%86%E9%9A%94%E7%B7%9A.png" alt="sep" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 55"></figure>



<p>from finlab import data, login</p>



<p>login(&#8220;FINLAB_TOKEN&#8221;)</p>



<p>institue_net_buy = data.get(</p>



<p>&#8220;institutional_investors_trading_all_market_summary:買賣超&#8221;</p>



<p>)</p>



<p>institue_net_buy[&#8220;上市外資及陸資(不含外資自營商)&#8221;].plot()</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714641897755-1670922727509-%E5%88%86%E9%9A%94%E7%B7%9A.png" alt="sep" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 55"></figure>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714641792934-foreign_net_buy.jpg" alt="FinLab 財經實驗室" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 57"></figure>



<p>接著，我們將數據轉換成近1個月累積淨買超金額，如下圖所示，雜訊減少不少，當外資近一個月出現賣超時，台股也顯著下跌。但仍有個問題，買賣超金額並非標準化數據，沒有上下界，換句話說，買賣超金額會隨著市場成交量增減而有所不同，未必能真的反應趨勢。</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714641897755-1670922727509-%E5%88%86%E9%9A%94%E7%B7%9A.png" alt="sep" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 55"></figure>



<p>import matplotlib.pyplot as plt</p>



<p>from finlab import data, login</p>



<p>login(&#8220;FINLAB_TOKEN&#8221;)</p>



<p>institue_net_buy = data.get(</p>



<p>&#8220;institutional_investors_trading_all_market_summary:買賣超&#8221;</p>



<p>)</p>



<p>fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True)</p>



<p>close[&#8220;0050&#8221;][&#8220;2009&#8221;:].plot(ax=ax[0])</p>



<p>ax[0].legend([&#8220;0050&#8221;])</p>



<p>institue_net_buy[&#8220;上市外資及陸資(不含外資自營商)&#8221;][&#8220;2009&#8221;:].rolling(window=20).sum().plot(</p>



<p>ax=ax[1]</p>



<p>)</p>



<p>ax[1].legend([&#8220;foreign net buy&#8221;])</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714641897755-1670922727509-%E5%88%86%E9%9A%94%E7%B7%9A.png" alt="sep" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 55"></figure>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714641966487-foreign_net_buy2.jpg" alt="FinLab" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 60"></figure>



<h1 id="para3">外資淨買超天數佔比</h1>



<p>如果買賣超金額無法反應趨勢，那若我們將數據轉換成<strong>淨買超天數</strong>呢?</p>



<p><strong>指標 = 近月外資淨買超天數 / 近月交易日數</strong></p>



<p>指標介於 0 ~ 1，如下圖所示，當指標大於(小於)0.5即表示，近一個月外資有一半以上的交易日都是買超(賣超)股票。指標標準化除了能不受成交量影響外，還能直接以數值判斷市場的趨勢。當指標數值非常高，例如指標=0.7，我們能一眼看出外資連續買超多日，市場正處於多頭。</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714641897755-1670922727509-%E5%88%86%E9%9A%94%E7%B7%9A.png" alt="sep" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 55"></figure>



<p>fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True)</p>



<p>close[&#8220;0050&#8221;][&#8220;2009&#8221;:].plot(ax=ax[0])</p>



<p>ax[0].legend([&#8220;0050&#8221;])</p>



<p>(institue_net_buy[&#8220;上市外資及陸資(不含外資自營商)&#8221;][&#8220;2009&#8221;:] &gt; 0).rolling(</p>



<p>window=20</p>



<p>).mean().plot(ax=ax[1])</p>



<p>ax[1].legend([&#8220;foreign net buy&#8221;])</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714641897755-1670922727509-%E5%88%86%E9%9A%94%E7%B7%9A.png" alt="sep" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 55"></figure>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714642040000-foreign_net_buy3.jpg" alt="FinLab" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 63"></figure>



<h1 id="para4">市場回檔情境</h1>



<p>觀察過去幾次0050有大幅回落的情境，於下跌期間，外資淨買超天數佔比多小於0.5，也就是外資處於連續賣超的狀態。</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714642076425-disaster.jpg" alt="FinLab" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 64"></figure>



<h1 id="para5">回測</h1>



<p>根據市場回檔的分析，我們將回測條件設定如下</p>



<ol><li>近2個月外資淨買超天數佔比 &lt; 0.4</li><li>0050收盤價斜率(10日) &lt; 0</li></ol>



<p>一般情況持有0050，當符合上述條件，則將股票賣出，回測結果如下</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714642118709-backtest1.jpg" alt="FinLab" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 65"></figure>



<p>可以看到最大回檔減少至20%，尤其投組在2020/03疫情及2022聯準會快速升息情境下，表現十分優秀。然而肯定有讀者懷疑，為什麼2020以前的避險效果似乎不明顯，雖然最大會撤有些微減少，但績效和不避險差不多。</p>



<p>我們將持有股票改成富櫃50(006201)，再回測試試。如下圖所示，避險效果非常顯著，也就是說外資連續賣超台股的時候，中小型股票會有顯著的回落。</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714642149793-backtest2.jpg" alt="FinLab" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 66"></figure>



<h1 id="para6">結論</h1>



<ol><li>外資淨買超天數佔比是標準化的數據，介於0與1之間，能夠更精確的反應市場趨勢。</li><li>在市場有大幅回檔時，外資淨買超天數佔比多半小於0.5。</li><li>使用外資淨買超天數佔比作為避險指標能夠有效避開市場大幅回落。</li><li>使用外資淨買超天數佔比作為避險指標，在中小型股票更為有效。</li></ol>



<p>透過以上介紹，相信讀者更了解外資買賣超該怎麼解讀了吧!透過數據轉換，就能將看似平凡無奇的數據變成強而有力的避險指標。市場就是充滿了不確定性，許多神奇的數據等著大家去挖掘!</p>



<h1 id="para7">用程式自動下單</h1>



<p>FinLab 提供<a href="https://www.sinotrade.com.tw/ec/20191125/Main/index.aspx#pag1" rel="noreferrer noopener" target="_blank">永豐金 Python API</a>，下單非常簡單，只要短短幾行，程式就會幫你計算現在應該有的部位，並且進行「買賣」只需要在適當的時間（例如開盤、收盤）執行，程式就會自動下單買進賣出，將你的帳戶部位調整成獲利的形狀！再也不用自己計算每檔股票要買幾張了！非常的方便喔！</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714641897755-1670922727509-%E5%88%86%E9%9A%94%E7%B7%9A.png" alt="sep" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 55"></figure>



<p>import os</p>



<p>from finlab.online.sinopac_account import SinopacAccount</p>



<p>from finlab.online.order_executor import OrderExecutor, Position</p>



<p># 設定帳號金鑰</p>



<p>os.environ[&#8216;SHIOAJI_API_KEY&#8217;] = &#8216;永豐證券API_KEY&#8217;</p>



<p>os.environ[&#8216;SHIOAJI_SECRET_KEY&#8217;] = &#8216;永豐證券SECRET_KEY&#8217;</p>



<p>os.environ[&#8216;SHIOAJI_CERT_PERSON_ID&#8217;]= &#8216;身份證字號&#8217;</p>



<p>os.environ[&#8216;SHIOAJI_CERT_PATH&#8217;]= &#8216;永豐證券憑證路徑&#8217;</p>



<p>os.environ[&#8216;SHIOAJI_CERT_PASSWORD&#8217;] = &#8216;永豐證券憑證密碼&#8217; # 預設與身份證字號</p>



<p># 以 100 萬台幣計算當前帳戶應該有的股票</p>



<p>fund = 1000000</p>



<p>target_position = Position.from_report(report, fund)</p>



<p># 進行下單</p>



<p>acc = SinopacAccount()</p>



<p>order_executor = OrderExecutor(target_position, acc)</p>



<p>order_executor.create_orders()</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/66335a172427202ac060c8e9/content/1714641897755-1670922727509-%E5%88%86%E9%9A%94%E7%B7%9A.png" alt="sep" title="每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落 55"></figure>



<p>程式預設使用當前價格進行「限價單」但你也可以透過客製化的方式，調整成「漲跌停」、「零股」、「融資券」，非常的簡單方便，讓你在股市中複製好策略的績效！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/%e6%af%8f%e5%a4%a9%e7%9c%8b%e5%a4%96%e8%b3%87%e8%b2%b7%e8%b3%a3%e8%b6%85%e5%8d%bb%e4%b8%8d%e7%9f%a5%e9%81%93%e6%80%8e%e9%ba%bc%e8%a7%a3%e8%ae%80%e5%97%8e%e5%a4%96%e8%b3%87%e9%81%bf%e9%9a%aa%e6%8c%87/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6176</post-id>	</item>
		<item>
		<title>台灣股市選股策略 Python 起手勢</title>
		<link>https://www.finlab.tw/python-taiwan-stock-market-selection/</link>
					<comments>https://www.finlab.tw/python-taiwan-stock-market-selection/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Wed, 17 Jan 2024 21:36:09 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[歷史回測]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[選股策略]]></category>
		<category><![CDATA[量化投資]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=6065</guid>

					<description><![CDATA[探索台灣股市選股策略，了解如何利用Python進行高效股票分析，並深入分析高動能與低波動在台股市場中的應用與優勢。]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="585" src="https://www.finlab.tw/wp-content/uploads/2024/01/04b54680-486c-4af8-bf9b-20135a3396e0-1024x585.webp" alt="04b54680 486c 4af8 bf9b 20135a3396e0" class="wp-image-6069" srcset="https://www.finlab.tw/wp-content/uploads/2024/01/04b54680-486c-4af8-bf9b-20135a3396e0-1024x585.webp 1024w, https://www.finlab.tw/wp-content/uploads/2024/01/04b54680-486c-4af8-bf9b-20135a3396e0-300x171.webp 300w, https://www.finlab.tw/wp-content/uploads/2024/01/04b54680-486c-4af8-bf9b-20135a3396e0-768x439.webp 768w, https://www.finlab.tw/wp-content/uploads/2024/01/04b54680-486c-4af8-bf9b-20135a3396e0-1536x878.webp 1536w, https://www.finlab.tw/wp-content/uploads/2024/01/04b54680-486c-4af8-bf9b-20135a3396e0.webp 1792w" sizes="(max-width: 1024px) 100vw, 1024px" title="台灣股市選股策略 Python 起手勢 69"></figure>



<h2><strong>台灣股市與Python的融合</strong></h2>



<p>台灣股市，作為亞洲重要的股票交易市場之一，擁有其獨特的市場結構和交易特性。隨著科技的進步，Python成為了股市分析中不可或缺的工具。然而一般人撰寫 Python 策略時，根據我的經驗，非常容易遇到以下的問題：</p>



<ul><li>不知道要寫哪種策略</li><li>策略怎麼寫都表現不好</li><li>每次寫策略都從 0 開始，很累！</li></ul>



<p>假如你也有以上的問題，那這篇文章就是來幫助你快速上手台股選股策略，你會獲得一個選股範本，這個範本是針對台股的特性而編寫而成，雖然選取了非常多 （100 檔）以上的股票，但還是維持顯著的超額報酬表現，另外一個重點是，這個範本完全只由價量來篩選，在台股中就已經有顯著的效果。這樣的範本非常適合再修改成其他種類的策略。</p>



<p>本文將介紹如何使用Python進行台灣股市的選股策略分析，並探討高動能與低波動策略在台股市場中的應用及其優勢。</p>



<h2><strong>台灣股市概況</strong></h2>



<p>台灣股市，以其活躍的交易和廣泛的上市公司種類著稱。從傳統製造業到高科技產業，台股市場匯聚了各行各業的代表企業。瞭解市場的基本結構和運作規則，是進行有效選股的前提。</p>



<h2><strong>Python於股市分析的應用</strong></h2>



<p>Python以其強大的數據處理和分析能力，在股市數據分析中發揮著重要作用。從數據獲取、數據清洗到複雜的算法運算，Python 提供了一個高效且靈活的平台，幫助投資者深入挖掘數據背後的信息。</p>



<h2><strong>選股策略基礎概念</strong></h2>



<p>選股策略是指用一定的標準和方法從眾多股票中選擇出投資標的，簡單的例子就是，我只買 10 元以下的股票，且殖利率大於 3 的股票。</p>



<p>然而以上的方法可能不會賺錢，怎麼樣的策略會賺錢呢？有效的選股策略應該考慮市場環境、公司基本面和技術分析等多方面因素。</p>



<p>本文注重在技術分析，會參考在台灣股市中最重要，且最有用的兩個指標，</p>



<ol><li>投資者通常尋求高動能股票以追求高回報</li><li>同時也會考慮低波動股票以降低投資風險。</li></ol>



<p>利用這兩個概念，來製作選股策略，發現在台股市場中非常的有效果！而且可以篩選出大量的股票標的，這些標的有很好的超額報酬，以下是我們實驗的結果，你可以自行判斷高風險與低波動，在台股市場中的作用。好在，我們 finlab 已經幫你處理好所有資料了，你可以直接安裝 <a href="https://www.finlab.tw/python-%e7%b0%a1%e5%96%ae%e9%81%b8%e8%82%a1%e5%92%8c%e5%9b%9e%e6%b8%ac/" data-type="post" data-id="576">finlab package</a> 來下載 10 年以上的數據進行分析和驗證。</p>



<h2><strong>數據獲取與處理</strong></h2>



<p>使用Python進行股市分析的第一步是數據的獲取和處理。這包括從各種數據源獲取股票價格、成交量等信息，並進行必要的數據清洗和轉換，以便進一步分析。在 finlab package 的加持之下，使用者可以短短幾行就完成這個步驟：</p>



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

close = data.get('price:收盤價')
volume = data.get('price:成交股數')</code></pre>



<p>這篇文章由於是一個選股策略範本，所以目的在於用最簡單的資料，選取最多的股票，並且這些股票大量包含超額報酬。或許資深讀者會覺得這也太簡單了吧！沒錯，起手是就是這麼簡單，但真有效，接下來我們就來製作指標並且來分析。</p>



<h2><strong>低波動的計算</strong>與回測</h2>



<p><a href="https://www.finlab.tw/low_volatility_research/" data-type="post" data-id="5357">短期波動和長期波動</a>的計算是選股策略中的重要部分。短期波動通常反映了市場對某股票近期的反應，而長期波動則顯示了股票在較長時間內的價格穩定性。Python可以幫助快速計算這些指標:</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">std20 = (close
    .pct_change()
    .rolling(20).std()
    .rank(axis=1, pct=True)
    [close.notna()])</code></pre>



<p>為選股提供參考。一般來說，我們會希望選出來的股票「長期波動低」這並僅僅只是比較安全而已，甚至還可能讓選股策略的報酬率更好，以下是我們將波動程度按照低到高分 5 組進行回測的結果，可以發現波動度越低的股票標的，價格穩定緩步上升，長期來講能夠獲得比較好的報酬率：</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="583" height="408" src="https://www.finlab.tw/wp-content/uploads/2024/01/image.png" alt="image" class="wp-image-6066" srcset="https://www.finlab.tw/wp-content/uploads/2024/01/image.png 583w, https://www.finlab.tw/wp-content/uploads/2024/01/image-300x210.png 300w" sizes="(max-width: 583px) 100vw, 583px" title="台灣股市選股策略 Python 起手勢 70"><figcaption>波動低（藍色）長期持有比較能獲得高報酬率</figcaption></figure>



<h2><strong>台股市場的動能分析</strong></h2>



<p>台股市場非常單純，大部分的股票流動性低，只需要有幾千萬台幣，拉抬股價是非常簡單的事情，這也造就了主力買股票時，必須要分天買進，這時候就容易造成股票數天上漲，我們在這種狀之下就可以來吃主力的豆腐。我個人最喜歡用的台股指標是「RSV」指標，在分析台股市場中的高動能股票可以幫助投資者捕捉市場<a href="https://www.finlab.tw/%e6%88%90%e9%95%b7%e9%a3%86%e8%82%a1%e6%80%8e%e9%ba%bc%e6%89%be-%e8%b6%85%e7%b4%9a%e7%b8%be%e6%95%88%e9%81%b8%e8%82%a1%e6%b3%95%e5%a4%a7%e8%a7%a3%e5%af%86/" data-type="post" data-id="5129">上升趨勢</a>，從而獲得潛在的高回報。Python的數據分析能力使得這一過程更加高效和精準：</p>



<pre class="wp-block-code"><code class="">rsv60 = ((close - close.rolling(60).min()) / (close.rolling(60).max() - close.rolling(60).min())[close.notna()])
</code></pre>



<p>跟低波動的分析一樣，我們可以將 RSV 高到低分成五組來回測，可以發現長期下來 RSV 高會優於 RSV 低的報酬率，用這種方式，就可以很好的分辨出高動能，或是說，維持在高檔盤整的股票標的。</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="571" height="409" src="https://www.finlab.tw/wp-content/uploads/2024/01/image-1.png" alt="image 1" class="wp-image-6067" srcset="https://www.finlab.tw/wp-content/uploads/2024/01/image-1.png 571w, https://www.finlab.tw/wp-content/uploads/2024/01/image-1-300x215.png 300w" sizes="(max-width: 571px) 100vw, 571px" title="台灣股市選股策略 Python 起手勢 71"></figure>



<h2><strong>組合條件設定與調整</strong></h2>



<p>接下來，我們可以來結合高動能以及低波動，在Python中設定和調整選股策略的條件是至關重要的。這些條件包括但不限於股票的動能、波動性和交易量等。透過靈活調整這些條件，投資者可以根據市場環境和個人風險偏好來優化自己的投資策略。</p>



<h2><strong>Python選股模型實作</strong></h2>



<p>實際上手實作Python選股模型，可以使理論知識轉化為實際操作。利用Python編寫的選股模型不僅可以進行數據分析，還可以根據設定的條件自動選出潛在的投資標的。</p>



<h2><strong>策略回測與分析</strong></h2>



<p>策略的回測是檢驗其有效性的關鍵步驟。Python提供的回測工具可以模擬策略在過去的表現，幫助投資者評估其風險和回報潛力。</p>



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

with data.universe('TSE_OTC'):
  close = data.get('price:收盤價')
  volume = data.get('price:成交股數')

# 短期波動
std20 = (close
    .pct_change()
    .rolling(20).std()
    .rank(axis=1, pct=True)
    [close.notna()])

# 長期波動
std60 = (close
    .pct_change()
    .rolling(60).std()
    .rank(axis=1, pct=True)
    [close.notna()])

# 股價相對高低
rsv60 = ((close - close.rolling(60).min()) 
    / (close.rolling(60).max() 
        - close.rolling(60).min())[close.notna()])

conds = [
    
  # 增加你想測試的選股條件

  # 可調整  
  rsv60.rank(axis=1, pct=True) &gt; 0.9, # 高動能
  std20.rank(axis=1, pct=True) &lt; 0.8, # 低波動
  std20 &gt; std60, # 短期價格變化大

  # 台股必備，不需調整
  close &gt; close.average(60), 
  volume &gt; 100_000,
]

position_cond = reduce(lambda i, j: i &amp; j, conds)

# 也可以做一些排序
position = close[position_cond].is_smallest(200)

r = backtest.sim(position, resample='M', 
                 fee_ratio=1.425/1000*0.3, upload=False)
r.display()</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="825" src="https://www.finlab.tw/wp-content/uploads/2024/01/image-2-1024x825.png" alt="image 2" class="wp-image-6068" srcset="https://www.finlab.tw/wp-content/uploads/2024/01/image-2-1024x825.png 1024w, https://www.finlab.tw/wp-content/uploads/2024/01/image-2-300x242.png 300w, https://www.finlab.tw/wp-content/uploads/2024/01/image-2-768x619.png 768w, https://www.finlab.tw/wp-content/uploads/2024/01/image-2-1536x1237.png 1536w, https://www.finlab.tw/wp-content/uploads/2024/01/image-2-2048x1650.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="台灣股市選股策略 Python 起手勢 72"><figcaption>回測成果</figcaption></figure>



<p>雖然報酬率只有 14％，但是選的標的非常多，有將近100檔左右，這樣的選股效果算是非常顯著的。你只要根據這樣的架構，加入其他的選股條件，相信能夠達到非常不一般的選股績效。</p>



<h2><strong>風險控制與管理</strong></h2>



<p>在執行任何投資策略時，風險控制都是必不可少的。Python不僅可以幫助識別風險較低的投資機會，還可以進行投資組合的風險管理，以確保投資組合的整體風險水平符合投資者的承受能力。</p>



<h2>FAQ</h2>



<p><strong style="color: rgb(51, 51, 51); font-size: 28px;">投資組合優化技巧</strong></p>



<p>有效的投資組合優化是提高回報和降低風險的關鍵。使用Python，投資者可以進行資產配置、風險分散等策略，以優化其投資組合。這涉及到對不同股票的相關性分析，以及根據市場環境調整持股比例。</p>



<h2><strong>市場動態與策略調整</strong></h2>



<p>股市是一個不斷變化的環境，因此及時調整選股策略是非常重要的。Python的數據分析能力可以幫助投資者迅速捕捉市場趨勢的變化，並相應調整其選股策略，以應對市場的變動。</p>



<h2><strong>未來趨勢預測與策略調整</strong></h2>



<p>展望未來，台灣股市的發展趨勢及其對選股策略的影響是投資者關注的重點。利用Python進行趨勢預測，可以使投資者在市場變化前做出預判，從而及時調整策略，把握投資機會。</p>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://www.finlab.tw/python-taiwan-stock-market-selection/(在新分頁中開啟)
</div></figure>



<h2><strong>常見問題與解答</strong></h2>



<h3>如何使用Python進行台灣股市的選股分析？</h3>



<p>可以利用 finlab package 快速實作各式各樣的策略，我們在<a href="https://ai.finlab.tw/strategies" target="_blank" rel="noopener">策略平台</a>上也放了非常多的策略範本供大家使用</p>



<h2>高動能與低波動策略在台股市場中的表現如何？</h2>



<p>這是非常淺顯易懂，簡單好用長年有效的指標，適合拿來搭配籌碼面、基本面來製作各式各樣的策略。</p>



<h2>Python在選股策略中的哪些功能最為關鍵？</h2>



<p>回測，因為你才知道選出來的股票有沒有超額報酬，才能進而打敗市場。</p>



<h2>如何進行有效的策略回測？</h2>



<p>要將每個指標單獨驗證（就像是這篇文章的方式），確保這些單獨的指標，在市場上可以找到超額報酬。胡亂拼湊無效的指標，只會事半功倍喔！</p>



<h2>在變化的市場環境中，如何調整選股策略？</h2>



<p>用盡量長的歷史資料，回測出可信的績效，才能夠將策略使用的長長久久，適時的衡量策略風險，從低風險的開始研究，再慢慢往上小額嘗試高風險策略。</p>



<h2><strong>結論與未來展望</strong></h2>



<p>台灣股市擁有其獨特的市場特性，而Python作為一種強大的數據分析工具，在股市選股策略中發揮著重要作用。本文介紹了使用Python進行台灣股市選股策略的方法，包括高動能與低波動策略的分析。隨著技術的進步和市場的變化，未來將有更多機會和挑戰出現在台灣股市投資者面前。透過不斷學習和適應，投資者可以在這個充滿機會的市場中取得成功。</p>



<h2>用程式自動下單</h2>



<p>這個策略需要每天去看公司實施庫藏股的資料，每天去公開資訊交易站查詢，有點麻煩，為何不用我們提供的下單工具來輕鬆下單呢？其實下單的方式非常簡單，首先要在<a href="https://sinotrade.github.io/zh_TW/tutor/prepare/open_account/" target="_blank" rel="noopener">永豐先通過 API 申請</a>後，只需要短短幾行就可以完成：<br></p>



<pre class="wp-block-code"><code lang="python" class="language-python">import os
from finlab.online.sinopac_account import SinopacAccount
from finlab.online.order_executor import OrderExecutor, Position

# 設定帳號金鑰
os.environ['SHIOAJI_API_KEY'] = '永豐證券API_KEY'
os.environ['SHIOAJI_SECRET_KEY'] = '永豐證券SECRET_KEY'
os.environ['SHIOAJI_CERT_PERSON_ID']= '身份證字號'
os.environ['SHIOAJI_CERT_PATH']= '永豐證券憑證路徑'
os.environ['SHIOAJI_CERT_PASSWORD'] = '永豐證券憑證密碼' # 預設與身份證字號

# 以 30 萬台幣計算當前帳戶應該有的股票
fund = 300000
target_position = Position.from_report(report, fund)

# 進行下單
acc = SinopacAccount()
order_executor = OrderExecutor(target_position, acc)
order_executor.create_orders()</code></pre>



<p>只要短短幾行，程式就會幫你計算現在應該有的部位，並且進行「買賣」只需要在適當的時間（例如開盤、收盤）執行，程式就會自動下單買進賣出，將你的帳戶部位調整成獲利的形狀！再也不用自己計算每檔股票要買幾張了！非常的方便喔！</p>



<p>程式預設使用當前價格進行「限價單」但你也可以透過<a href="https://doc.finlab.tw/details/order_api/" data-type="URL" data-id="https://doc.finlab.tw/details/order_api/" target="_blank" rel="noopener">客製化</a>的方式，調整成「漲跌停」、「零股」、「融資券」，非常的簡單方便，讓你在股市中複製好策略的績效！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/python-taiwan-stock-market-selection/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6065</post-id>	</item>
		<item>
		<title>事件研究法（中）使用事件交易模組</title>
		<link>https://www.finlab.tw/event-study-usage/</link>
					<comments>https://www.finlab.tw/event-study-usage/#respond</comments>
		
		<dc:creator><![CDATA[lawrence]]></dc:creator>
		<pubDate>Mon, 30 Oct 2023 18:29:00 +0000</pubDate>
				<category><![CDATA[FinLab 量化平台]]></category>
		<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[基本面分析]]></category>
		<category><![CDATA[股票策略]]></category>
		<category><![CDATA[歷史回測]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[選股策略]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=5834</guid>

					<description><![CDATA[當台灣的上市公司宣布有關股票的特別消息，比如說要分紅或者調整股票的價值（這種情況我們稱之為除權或除息），這通常 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>當台灣的上市公司宣布有關股票的特別消息，比如說要分紅或者調整股票的價值（這種情況我們稱之為除權或除息），這通常會對公司的股票價格造成一些波動。我們的研究就是要搞清楚，這些宣布到底對股票價格有什麼影響。</p>



<p>這篇文章中，我們將介紹 finlab package 嶄新超好用的工具，讓你一秒判斷除權息究竟要做多還是做空？首先，我們會從財務的大數據庫裡面搜集這些宣布的具體信息，包括宣布的時間、具體的生效日和股票的交易變動。這樣我們就能知道哪天發生了什麼事。</p>



<p>接下來，我們會整理這些信息，把它們按照時間和股票代號排列好，這個過程就像是把一堆散亂的資料整理成清晰的列表。</p>



<p>然後我們用一種叫做事件研究的方法，來計算這些特別宣布前後，股票的價格變動情況。我們會比較這個變動和一般市場的變動有什麼不同，從而評估這個宣布的影響力度。</p>



<p>簡而言之，我們的研究就是想要了解，當公司發出某些股票相關的重要消息時，投資人的反應是怎樣的，並且這對股票價格會有什麼樣的效果。</p>



<h1>查看事件前後的異常報酬率</h1>



<p>我們將用簡單的 Python 語法來分析：</p>



<ol><li>從財務數據庫中提取除權息公告數據。</li><li>清洗和轉換數據，創建事件矩陣。</li><li>進行事件研究，計算異常收益率。</li><li>將結果以視覺化的方式呈現，分析事件對股價的影響。</li></ol>



<p>只需要簡單的幾行，就能知道事件前後的異常報酬率了。舉例而言，如果想知道除權前後的異常報酬率，只需要執行下面的程式碼，就能輸出圖表了。</p>



<h1>拿取財務資料</h1>



<p>想像一下，你是一位探險家，你手中有一張藏寶圖，這張圖上標記著一系列的「X」，代表著可能埋藏著寶藏的地點。在這個比喻中，寶藏就是一個公司特定財務事件（如除權除息）對股票價格的潛在影響，而你要做的，就是跟隨這張地圖去探索這些「X」標記處是否真的有寶藏。</p>



<p>在我們的情境中，「X」標記是數據中的除權除息事件。我們的目標是要找出這些事件是否對股票價格造成了影響。</p>



<p>首先，我們利用一個像是魔法箱子的工具 —— finlab 數據庫，這個數據庫像是藏寶圖的起點。我們叫它出來（用一行程式碼），讓它顯示出最近的幾個「X」（也就是公司的除權除息事件）。</p>



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

data.get('dividend_announcement').head()</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="491" src="https://www.finlab.tw/wp-content/uploads/2023/11/image-10-1024x491.png" alt="image 10" class="wp-image-5898" srcset="https://www.finlab.tw/wp-content/uploads/2023/11/image-10-1024x491.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/11/image-10-300x144.png 300w, https://www.finlab.tw/wp-content/uploads/2023/11/image-10-768x368.png 768w, https://www.finlab.tw/wp-content/uploads/2023/11/image-10.png 1122w" sizes="(max-width: 1024px) 100vw, 1024px" title="事件研究法（中）使用事件交易模組 73"></figure>



<ul><li>從 <code>finlab</code> 庫導入 <code>data</code> 模組。</li><li>調用 <code>get</code> 函數來檢索 <code>dividend_announcement</code> 數據集，這是一個包含公司除權息公告的數據集。</li><li>顯示了包含多個欄位的 DataFrame，這些欄位包括股票代號、公告日期、基準日期、公司名稱、所屬期間、增資配股等信息。</li></ul>



<p>然後，我們要確保我們的地圖是乾淨的，沒有重複的標記，也沒有模糊不清的部分（這就是去重和去除空值的程式碼部分）。我們還會重新繪製地圖，讓每個「X」都按照日期排好（轉換成一個新的表格）。</p>



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

event = data.get('dividend_announcement')\
    .drop_duplicates(subset=['stock_id', '除權交易日'])\
    .dropna(subset=['stock_id', '除權交易日'])\
    .pivot(index='除權交易日', columns='stock_id', values='市場別')\
    .rename_axis('date')\
    .notna()

event.head()</code></pre>



<ul><li>這段程式碼進一步處理上述提取的數據。</li><li><code>.drop_duplicates()</code> 移除重複的行。</li><li><code>.dropna()</code> 刪除含有空值的行。</li><li><code>.pivot()</code> 將數據重塑成一個以除權交易日為索引，股票代號為欄位的新 DataFrame。</li><li><code>.rename_axis('date')</code> 更改索引名稱為 <code>date</code>。</li><li><code>.notna()</code> 將所有的 NaN 值轉換為布林值 False。</li></ul>



<figure class="wp-block-image size-full"><img loading="lazy" width="898" height="344" src="https://www.finlab.tw/wp-content/uploads/2023/11/image-11.png" alt="image 11" class="wp-image-5899" srcset="https://www.finlab.tw/wp-content/uploads/2023/11/image-11.png 898w, https://www.finlab.tw/wp-content/uploads/2023/11/image-11-300x115.png 300w, https://www.finlab.tw/wp-content/uploads/2023/11/image-11-768x294.png 768w" sizes="(max-width: 898px) 100vw, 898px" title="事件研究法（中）使用事件交易模組 74"></figure>



<p>這樣就可以產生一張表格，True，對應到就是除權的股票和日期，我們可以用簡易的程式來驗證，來看除權息通常都是每年的夏天發生：</p>



<pre class="wp-block-code"><code class="">event.sum(axis=1).plot()</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" width="793" height="588" src="https://www.finlab.tw/wp-content/uploads/2023/11/image-12.png" alt="image 12" class="wp-image-5900" srcset="https://www.finlab.tw/wp-content/uploads/2023/11/image-12.png 793w, https://www.finlab.tw/wp-content/uploads/2023/11/image-12-300x222.png 300w, https://www.finlab.tw/wp-content/uploads/2023/11/image-12-768x569.png 768w" sizes="(max-width: 793px) 100vw, 793px" title="事件研究法（中）使用事件交易模組 75"></figure>



<p>接下來我們可以透過很方便的函數來產生除權息後的五日、十日、二十日、六十日以後的報酬率：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">from finlab.tools.event_study import create_factor_data

adj_close = data.get('etl:adj_close')
factor_data = create_factor_data(event, adj_close, event=event)

factor_data</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" width="1014" height="241" src="https://www.finlab.tw/wp-content/uploads/2023/11/image-13.png" alt="image 13" class="wp-image-5901" srcset="https://www.finlab.tw/wp-content/uploads/2023/11/image-13.png 1014w, https://www.finlab.tw/wp-content/uploads/2023/11/image-13-300x71.png 300w, https://www.finlab.tw/wp-content/uploads/2023/11/image-13-768x183.png 768w" sizes="(max-width: 1014px) 100vw, 1014px" title="事件研究法（中）使用事件交易模組 76"></figure>



<p>但如此還是有點不清楚，有沒有方法能來統計呢？接下來我們可以透過 event_study 來視覺化事件發生後的報酬率：</p>



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

benchmark = data.get('benchmark_return:發行量加權股價報酬指數')

r = event_study.event_study(factor_data, benchmark, adj_close.ffill())

r.head()</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="191" src="https://www.finlab.tw/wp-content/uploads/2023/11/image-14-1024x191.png" alt="image 14" class="wp-image-5902" srcset="https://www.finlab.tw/wp-content/uploads/2023/11/image-14-1024x191.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/11/image-14-300x56.png 300w, https://www.finlab.tw/wp-content/uploads/2023/11/image-14-768x143.png 768w, https://www.finlab.tw/wp-content/uploads/2023/11/image-14.png 1181w" sizes="(max-width: 1024px) 100vw, 1024px" title="事件研究法（中）使用事件交易模組 77"></figure>



<p>這樣就產生出一張表格，其中 y 軸是每一次除權息，x 軸是除權息的前後幾天的報酬率。我們可以用簡易的方式來將報酬率繪製出來：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">r.mul(100).mean().plot.bar(use_index=False)
ax = r.mean().mul(100).cumsum().plot(use_index=False)</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" width="829" height="613" src="https://www.finlab.tw/wp-content/uploads/2023/11/image-16.png" alt="image 16" class="wp-image-5904" srcset="https://www.finlab.tw/wp-content/uploads/2023/11/image-16.png 829w, https://www.finlab.tw/wp-content/uploads/2023/11/image-16-300x222.png 300w, https://www.finlab.tw/wp-content/uploads/2023/11/image-16-768x568.png 768w" sizes="(max-width: 829px) 100vw, 829px" title="事件研究法（中）使用事件交易模組 78"><figcaption>Y軸是報酬百分比，X軸是天，第零天為事件發生日。直調圖為扣除大盤的報酬率，線段為累計報酬率。</figcaption></figure>



<p>Y軸是報酬百分比，X軸是天，第零天為事件發生日。直條圖為扣除大盤的報酬率，線段為累計報酬率。</p>



<p>執行完上面的程式後，就能把數據視覺化呈現出來，運用起來相當方便。更甚者，FinLab 已經提供完整的資料集了，不用自己再用爬蟲去慢慢爬資料了！</p>



<h1>研究異常報酬率與各種因子的相關性</h1>



<p>故事到這裡就結束了，不過我們想要再來延伸應用，假如低價股或獲利不好的股票在除權息時，究竟表現會不會更差呢？只要簡單的幾行，就能輸出各項因子與異常報酬率之間的關係。我們可以用以下的方法來研究：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">import statsmodels.api as sm
import numpy as np


factor_data = create_factor_data({
    'pb': data.get('price_earning_ratio:股價淨值比'),
    'pe': data.get('price_earning_ratio:本益比'),
    }, adj_close, event=event)

res = sm.OLS(factor_data['10D'], sm.add_constant(factor_data[['pb_factor', 'pe_factor']])).fit()
print(res.summary())</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" width="865" height="619" src="https://www.finlab.tw/wp-content/uploads/2023/11/image-17.png" alt="image 17" class="wp-image-5905" srcset="https://www.finlab.tw/wp-content/uploads/2023/11/image-17.png 865w, https://www.finlab.tw/wp-content/uploads/2023/11/image-17-300x215.png 300w, https://www.finlab.tw/wp-content/uploads/2023/11/image-17-768x550.png 768w" sizes="(max-width: 865px) 100vw, 865px" title="事件研究法（中）使用事件交易模組 79"></figure>



<p>輸出結果如下，可以看到 statsmodel 提供的一份回歸結果：</p>



<ol><li><strong>Dep. Variable (因變量)</strong>: <code>10D</code> 代表我們模型的預測目標，可能是指在某事件後的10天內的股票收益率。</li><li><strong>Model (模型)</strong>: <code>OLS</code> 這表示我們使用的是普通最小二乘法(Ordinary Least Squares)進行線性回歸分析。</li><li><strong>Method (方法)</strong>: <code>Least Squares</code> 這意味著這是一種嘗試最小化誤差平方和的方法。</li><li><strong>R-squared (決定係數)</strong>: <code>0.000</code> 這個數值告訴我們模型擬合的好壞，數值範圍是0到1。接近1意味著模型能夠很好地解釋因變量的變異。在這裡接近0，意味著模型解釋力很低。這只是範例啦～不要翻白眼XDD。</li><li><strong>Adj. R-squared (調整決定係數)</strong>: <code>-0.000</code> 考慮到自變量的數量，這是對決定係數的一個調整。同樣的，這裡也顯示模型的解釋力很低。</li><li><strong>F-statistic (F統計量)</strong>: <code>0.8271</code> 這個數值用來檢測模型的整體顯著性。一個高的F統計值暗示至少有一個預測變量對因變量有顯著影響。</li><li><strong>Prob (F-statistic) (F統計量的概率值)</strong>: <code>0.437</code> 這是觀察到至少這麼大F統計量的概率，通常用來判斷模型的整體顯著性。通常p值小於0.05被認為是統計上顯著的。可見當前的數值，並沒有顯著的特性。</li><li><strong>Log-Likelihood (對數似然比)</strong>: <code>3426.5</code> 這個數值越大，表示模型越好。</li><li><strong>AIC (赤池信息準則)</strong> 和 <strong>BIC (貝葉斯信息準則)</strong>: 這兩個值越低，表示模型越好。它們是懲罰項，用於調整模型中預測變量的數量，防止過度擬合。</li><li><strong>Df Residuals (殘差自由度)</strong> 和 <strong>Df Model (模型自由度)</strong>: 分別表示殘差和模型的自由度。自由度是指在計算統計量時，數據中獨立信息的數量。</li><li><strong>Covariance Type (共變異數類型)</strong>: 這告訴我們計算共變異數（即參數估計的不確定性）的方法。</li></ol>



<h1>結論</h1>



<p>經過上述的探討，我們對事件交易有了更深入的理解。透過觀察事件前後的異常報酬率，以及研究異常報酬率與各種因子的相關性，我們能更精確地預測和評估投資策略的效果。</p>



<p>而 FinLab 的最新事件交易模組正好提供了一個完善的工具來進行這樣的分析。隨著技術的不斷進步，FinLab 未來將會推出更多別出心裁、有助於投資者的研究。讓我們一同期待，並不斷探索金融市場的無限可能！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/event-study-usage/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5834</post-id>	</item>
		<item>
		<title>僅用財報製作 30% 年報酬的美股多空對沖策略</title>
		<link>https://www.finlab.tw/financial-report-strategy-long-short/</link>
					<comments>https://www.finlab.tw/financial-report-strategy-long-short/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Sat, 07 Oct 2023 13:40:25 +0000</pubDate>
				<category><![CDATA[股票策略]]></category>
		<category><![CDATA[AI看股票]]></category>
		<category><![CDATA[FinLab 量化平台]]></category>
		<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[歷史回測]]></category>
		<category><![CDATA[程式交易]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=5806</guid>

					<description><![CDATA[本文中產生了 1000 組多空財務指標，並且利用財務指標進行多空對沖策略，回測績效高達年報酬 30%！在全球資 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>本文中產生了 1000 組多空財務指標，並且利用財務指標進行多空對沖策略，回測績效高達年報酬 30%！在全球資本市場中，美國股市佔據著不可忽視的地位，其規模與活躍度長期以來都是全球最領先的。尤其在科技、金融和消費等多個重要行業，美股市場都匯聚了眾多具有全球影響力的領先企業。對投資者而言，深入了解並善用財務指標來分析和評估美股市場的投資機會，是提高投資效益、降低投資風險的重要手段。FinLab 網站中有一個 <a href="https://ai.finlab.tw/strategyview/?uid=TJN4FDuqrwU8DML7DAjUYFIMutp2&amp;sid=%E8%B2%A1%E5%A0%B1%E6%8C%87%E6%A8%9920%E5%A4%A7" target="_blank" rel="noopener">財報 20 大的選股</a> 策略，是否能夠用在美股之中呢？效果如何呢？就讓我們來研究研究。</p>



<h2>美股策略研究簡單嗎？</h2>



<p>財務指標是反映企業經營狀況、財務健康和投資價值的重要工具。透過財務指標的分析，我們可以更加清晰地理解企業的盈利能力、資產負債狀態、營運效率以及現金流狀況，從而作出更為理性和科學的投資決策。然而當前美股已經有非常多的量化交易團隊與機構從中找尋超額報酬，所以我們在實驗中，發現並沒有像是台股一樣簡單做得出好策略。</p>



<h2>台股美股的差異？</h2>



<p>台股一般來說，我們用均線濾網就可以很有效的篩選股票，用 EPS 一定是要找 EPS 每季上升的的股票標的。然而在美股竟然發生一百八十度的轉變，例如，美股跟台股在均線的使用上，幾乎是完全相反，也就是很容易有均線回歸，漲多了就跌回去的狀況發生。而創新高的 EPS 不要以為接下來股價也會創新高，因為當天股價可能都已經反應完畢了，甚至過度反應而導致超漲。</p>



<h2>美股的財報指標還有用嗎？</h2>



<p>這就是這篇文章想要來探討的，我們使用 quandl 所有的美股指標，來預測看看究竟是否有能力做出不錯的策略。假如你是 VIP 會員，可以參考我們的財務指標 20 大策略，並且嘗試換成美股版本喔！</p>



<h2>資料分析</h2>



<p>首先，我們先取得想要來研究的資料，由於資料授權的問題，目前只能在  <a href="https://ai.finlab.tw" target="_blank" rel="noopener">finlab平台</a> 上進行程式的撰寫，不過我們近期想到一些方法來避免授權問題，當前請大家不要使用 colab ，而是直接用網頁版來執行，不然會無法運行喔！可以透過以下的程式碼拿到你想要的財報指標，我們以四種財報指標為例：</p>



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

menu = """非控制股權	data.get('us_fundamental:accoci')	float	
資產總額	data.get('us_fundamental:assets')	float	
流動資產	data.get('us_fundamental:assetsc')	float	
非流動資產	data.get('us_fundamental:assetsnc')	float	
"""

with data.us_universe('Common Stock'):
    code = menu.split('\t')[1::3]
    name = [n.replace('\n', '') for n in menu.split('\t')[0::3]]
    for n, c in zip(name, code):
        dfs[n] = eval(c)</code></pre>



<p>接下來，我們想要進行資料處理，讓財報資料做斜率、取變異等方法，提取出可能有效的資料：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">
new_feat_dfs = {}

for fname, df in dfs.items():

    if df.dtypes[0] != 'float64':
        continue

    print(fname)

    avg2 = df.average(2)
    avg4 = df.average(4)
    new_feat_dfs[fname + '_avg2'] = avg2
    new_feat_dfs[fname + '_avg4'] = avg4
    new_feat_dfs[fname + '_diff4'] = df / df.shift(4)
    new_feat_dfs[fname + '_1_avg4'] = df / avg4
    new_feat_dfs[fname + '_avg2_avg4'] = avg2 / avg4
    new_feat_dfs[fname + '_avg2_diff4'] = avg2 / avg2.shift(4)
    new_feat_dfs[fname + '_avg4_diff4'] = avg4 / avg4.shift(4)
    new_feat_dfs[fname + '_df_max4'] = df / df.rolling(4).max()
    new_feat_dfs[fname + '_df_max8'] = df / df.rolling(8).max()


feat_dfs = {**dfs, **new_feat_dfs}

with data.us_universe('Common Stock'):
    feat_dfs['money_flow'] = data.get('us_price:close') * data.get('us_price:volume')

del new_feat_dfs</code></pre>



<p>然而我們也不知道這些資料，效果究竟如何，所以可以利用機器學習的方式進行 feature 分析：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">from finlab.ml import feature

features = feature.combine(feat_dfs, resample='Q')

# 過濾成交量太小的股票
features = features[features['money_flow'] > 1e7]
features.head()</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="362" src="https://www.finlab.tw/wp-content/uploads/2023/10/image-3-1024x362.png" alt="image 3" class="wp-image-5807" srcset="https://www.finlab.tw/wp-content/uploads/2023/10/image-3-1024x362.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/10/image-3-300x106.png 300w, https://www.finlab.tw/wp-content/uploads/2023/10/image-3-768x272.png 768w, https://www.finlab.tw/wp-content/uploads/2023/10/image-3.png 1328w" sizes="(max-width: 1024px) 100vw, 1024px" title="僅用財報製作 30% 年報酬的美股多空對沖策略 80"><figcaption>資料整理成機器學習中的特徵格式</figcaption></figure>



<p>除了有這些財報的特徵外，我們也必須知道這些數值會如何影響將來的股價，所以我們可以將上圖每一個橫軸所對映的未來長跌幅給計算出來，並且計算相關性 <code>corr</code> 假如 1 代表正相關，該數值高意味著未來會上漲，假如是 -1 就代表負相關，數值高反而意味著未來會跌：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">from finlab.ml import label

labels = label.return_percentage(features.index, period=60, trade_at_price='open')

corr = features.corrwith(labels).dropna().sort_values()</code></pre>



<p>雖然給大家的例子中只有一小部分的資料，但我們自己實驗是產生了 1000 組不同的財報數值。我們只想要提取有用的資料，將其他沒用的資料過濾。也就是我們想找高度相關，或高度負相關的特徵，來進行股票的預測：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">print(corr.head(10))
print(corr.tail(10))</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" width="531" height="554" src="https://www.finlab.tw/wp-content/uploads/2023/10/image-4.png" alt="image 4" class="wp-image-5808" srcset="https://www.finlab.tw/wp-content/uploads/2023/10/image-4.png 531w, https://www.finlab.tw/wp-content/uploads/2023/10/image-4-288x300.png 288w" sizes="(max-width: 531px) 100vw, 531px" title="僅用財報製作 30% 年報酬的美股多空對沖策略 81"><figcaption>最負相關，最正相關</figcaption></figure>



<p>上圖發現一些有趣的現象，我們挑最低負相關，與最高相關的來說明。</p>



<h2>市值衝吧！</h2>



<p>在這個實驗中，「市值_1_avg4」是最高度相關的，其代表的運算方式，是「市值 / 近四季的平均市值」。為什麼近四季市值增加越多，代表未來報酬率越好呢？若一家公司近期的營運表現優於過去，其市值可能會上升，從而使得「市值 / 近四季的平均市值」的比例增加。這也反映了市場對公司未來盈利能力的信心增強。</p>



<h2>小心獲利太多啦！</h2>



<p>在上圖當中，營收_max4 是最負相關的資訊，代表此數值越高，未來股價越危險，潛在隱含可能營收會有均值回歸的效應產生，導致股價下跌。</p>



<h2>數據所代表的含意，跟常識不符合時，如何是好？</h2>



<p>當然聽數據的呀！因為金融市場裡並沒有什麼常識可言，以常識來說期貨原油結算應該是正的？（但曾經發生負的狀況）。以常識來說，股價漲太高應該不要再追了（但在台股完全就是要追上去，實驗與實際都如此證明）。為什麼常識不管用？因為在一個效率市場下，任何所謂的「常識」都會被機構交易者各種套利，例如一個常識： ROE 高是好股票，所以當公司發布時，大家知道這個常識而瞬間買入此股票，造成必須要去比拼高頻交易，看誰買的早，就能用比較低的價格買到，才能比別人更早去交易這個「常識」，但對於我這種慢半拍的人來說，當我發現這家公司很好時，股價已經反映了財報，所以這個「常識」就不符合當前科技技術橫行的市場了。雖然速度比不贏別人，那就只好去探勘一些「反常識」，「反常識」沒有人做，所以也是有很多潛在的獲利機會！但是反常識也很容易因為數據處理、探勘的方式不正確，而意外的被產生出來，所以有好的資料驗證步驟，是非常重要的，不過有點離題，我們接著繼續來做策略。</p>



<h2>去除相似的資料</h2>



<p>在上圖中我們可以看到「市值_1_avg4」以及「市值_df_max4」，其實這兩筆資料是用類似的方法來計算的，雖然都很重要，但只要用其中一種即可，沒必要兩個都用，可以把其中一筆換成其他更有意義的數據，所以我們可以驗證 features 財報數據間的相關性，將相關性高的財報數據給剔除，留下比較有代表性的即可：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">import numpy as np

cor_matrix = features[corr.index].corr().abs()
upper_tri = cor_matrix.where(np.triu(np.ones(cor_matrix.shape),k=1).astype(bool))
to_drop = [column for column in upper_tri.columns if any(upper_tri[column] > 0.8)]

long_names = corr[corr.index.isin(to_drop)].tail(30)
short_names = corr[corr.index.isin(to_drop)].head(30)</code></pre>



<p>上面程式碼中， 我們找到 long_names 以及 short_names 代表與未來價格高度正相關的指標，以及高度負相關的指標。我們將這些指標對於每個股票去評分，並且加總起來：</p>



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

score = sum([feat_dfs[f].rank(axis=1, pct=True).fillna(0) for f in long_names.index])
short_score = sum([feat_dfs[f].rank(axis=1, pct=True).fillna(0) for f in short_names.index])

score = score.index_str_to_date()
short_score = short_score.index_str_to_date()</code></pre>



<p>就可以得到每個股票的總分了！最後將總分最高的股票做多、最低的股票做空，就可以獲得更穩定的報酬率：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">import numpy as np
from finlab.dataframe import FinlabDataFrame


with data.us_universe('Common Stock'):
    close = data.get('us_price:close')
    vol = data.get('us_price:volume')

    cond1 = (close * vol).average(60) > 1e7
    cond2 = vol > 5000
    
    cond = cond1 * cond2 * (close.notna())
    pos = (FinlabDataFrame(score-short_score) * cond).is_largest(10).astype(int) * 2
    neg_pos = (FinlabDataFrame(score-short_score) * cond).is_smallest(20).astype(int)

    pos *= close.pct_change().rolling(20).std()
    neg_pos *= close.pct_change().rolling(20).std()

    pos /= pos.sum(axis=1)
    neg_pos /= neg_pos.sum(axis=1)

    total_pos = pos - neg_pos
    
    r0 = backtest.sim(total_pos, resample='W', position_limit=0.1)</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="479" src="https://www.finlab.tw/wp-content/uploads/2023/10/image-5-1024x479.png" alt="image 5" class="wp-image-5809" srcset="https://www.finlab.tw/wp-content/uploads/2023/10/image-5-1024x479.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/10/image-5-300x140.png 300w, https://www.finlab.tw/wp-content/uploads/2023/10/image-5-768x359.png 768w, https://www.finlab.tw/wp-content/uploads/2023/10/image-5.png 1150w" sizes="(max-width: 1024px) 100vw, 1024px" title="僅用財報製作 30% 年報酬的美股多空對沖策略 82"><figcaption>美股策略實做</figcaption></figure>



<p>不過這個策略滿奇怪的，2020年以前都不太會賺，雖然也沒賠太多錢（相較於純做多的策略）但我自己個人會有點忍受不了這麼多年的績效平平，可能還有改進的空間，假如讀者知道為什麼2020 年前後會有這麼大的差異，歡迎留言或在 Discord 跟我們一起討論！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/financial-report-strategy-long-short/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5806</post-id>	</item>
		<item>
		<title>事件研究法上：找到異常報酬率</title>
		<link>https://www.finlab.tw/event-study-1/</link>
					<comments>https://www.finlab.tw/event-study-1/#respond</comments>
		
		<dc:creator><![CDATA[lawrence]]></dc:creator>
		<pubDate>Wed, 27 Sep 2023 15:20:00 +0000</pubDate>
				<category><![CDATA[選股策略]]></category>
		<category><![CDATA[FinLab 量化平台]]></category>
		<category><![CDATA[股票策略]]></category>
		<category><![CDATA[歷史回測]]></category>
		<category><![CDATA[量化投資]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=5698</guid>

					<description><![CDATA[什麼是事件研究法？ 在探討事件研究法之前，想像一下，市場突然來了個大新聞，比如說美國聯準會突然宣布三個月後要升 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1>什麼是事件研究法？</h1>



<p>在探討事件研究法之前，想像一下，市場突然來了個大新聞，比如說美國聯準會突然宣布三個月後要升息1%。這時候，我們就會有幾個癥結問題需要解答：</p>



<ol><li>股價是在公告一出來就跌，還是等到真正升息了才開始反應？</li><li>是整個市場一起跌，還是說某些股票因為對利率特別敏感，所以才會跌？</li><li>如果有的股票在升息公告之前就已經在跌了，那麼這波跌勢是不是真的跟升息有關，還是因為市場的動能或者其他因素？</li></ol>



<p>事件研究法就是來幫忙回答這些問題的。它通常包含三個關鍵步驟：</p>



<ol><li>去除那些像是大盤趨勢這類已知會影響的因素；</li><li>研究股價對事件的反應特性，看看是在消息公佈的時候反應，還是在事情真的發生的時候；</li><li>分析股價下跌的原因，看看到底是市場動能在作怪，還是政策改變的緣故。</li></ol>



<p>簡單來說，事件研究法就是在告訴我們「那些突如其來的大事對市場有什麼影響」。</p>



<h1>事件研究法能做什麼？</h1>



<p>使用事件研究法不見得能讓你一夜致富，但絕對可以幫你深入了解市場的運作。對市場的深入理解，有助於你找到賺錢的機會。</p>



<p>而且，事件研究法的應用可不只在股市。在許多科學研究的領域裡頭，這個方法都很實用。無論是評估藥物對血糖控制的效果，還是看看早戀會不會對學業成績造成影響，都能用上這個方法。</p>



<p>拿早戀影響學業的研究來說吧，我們會進行以下步驟：</p>



<ol><li>排除那些已知的干擾，例如全班因為出了太難的題目而不及格。</li><li>研究成績的反應特性，就是看看是不是在告白之後，第二天的小考成績就直接掉榜了，還是成績會慢慢地下滑？</li><li>分析成績下降的原因，是不是因為戀愛花太多時間，還是因為早戀會影響到思考能力，導致腦袋變得不好使？</li></ol>



<h1>第一步：移除已知的干擾資訊</h1>



<p>第一步當然是要把那些雜訊去除掉。我們想專注在個別股票上的表現，不想被整體市場的動態給影響。CAPM模型就是這種分析的一個工具，它透過線性迴歸計算出beta值，然後用這個值來預測股價。詳細可以去看 <a href="https://www.investopedia.com/ask/answers/071415/what-formula-calculating-capital-asset-pricing-model-capm-excel.asp" target="_blank" rel="noopener">Investopedia 的介紹</a>。</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="742" height="506" src="https://www.finlab.tw/wp-content/uploads/2023/09/image-10.png" alt="image 10" class="wp-image-5718" srcset="https://www.finlab.tw/wp-content/uploads/2023/09/image-10.png 742w, https://www.finlab.tw/wp-content/uploads/2023/09/image-10-300x205.png 300w" sizes="(max-width: 742px) 100vw, 742px" title="事件研究法上：找到異常報酬率 84"></figure>



<h2>異常報酬率</h2>



<p>異常報酬率其實就是實際報酬和預期報酬之間的差異。這個數據可以幫我們剔除市場整體的影響，專注分析個股。</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="806" height="139" src="https://www.finlab.tw/wp-content/uploads/2023/09/image-12.png" alt="image 12" class="wp-image-5721" srcset="https://www.finlab.tw/wp-content/uploads/2023/09/image-12.png 806w, https://www.finlab.tw/wp-content/uploads/2023/09/image-12-300x52.png 300w, https://www.finlab.tw/wp-content/uploads/2023/09/image-12-768x132.png 768w, https://www.finlab.tw/wp-content/uploads/2023/09/image-12-800x139.png 800w" sizes="(max-width: 806px) 100vw, 806px" title="事件研究法上：找到異常報酬率 85"></figure>



<h1>第二步：研究股價的反應特性</h1>



<p>下圖的縱軸是累積平均異常報酬率，橫軸是日期，通常第零天是事件發生日。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="354" src="https://www.finlab.tw/wp-content/uploads/2023/09/image-13-1024x354.png" alt="image 13" class="wp-image-5724" srcset="https://www.finlab.tw/wp-content/uploads/2023/09/image-13-1024x354.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/09/image-13-300x104.png 300w, https://www.finlab.tw/wp-content/uploads/2023/09/image-13-768x266.png 768w, https://www.finlab.tw/wp-content/uploads/2023/09/image-13.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" title="事件研究法上：找到異常報酬率 86"></figure>



<p>只要做出這張圖，就能一目了然股價的反應特性了。從左圖可以得知，FDA Approval 後股價會立刻反應完，甚至還有一點過度反應的跡象；從右圖可以得知 Special Dividend 有反應不足的跡象。</p>



<h1>以減資研究為例</h1>



<p>讓我們回顧之前的文章，<a href="https://www.finlab.tw/capital-reduction-short/">減資策略</a>。讓我們以減資研究為例，執行第一步跟第二步。</p>



<h2>第一步：移除已知的干擾資訊</h2>



<p>只要把大盤的報酬率，還有個股的報酬率，餵給 Linear Regression 後，再計算估計值跟實際值的差，就能算出 Residuals，也就是異常報酬率了。</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" src="https://www.finlab.tw/wp-content/uploads/2023/09/image-15.png" alt="image 15" class="wp-image-5732" width="848" height="117" srcset="https://www.finlab.tw/wp-content/uploads/2023/09/image-15.png 603w, https://www.finlab.tw/wp-content/uploads/2023/09/image-15-300x41.png 300w, https://www.finlab.tw/wp-content/uploads/2023/09/image-15-600x83.png 600w" sizes="(max-width: 848px) 100vw, 848px" title="事件研究法上：找到異常報酬率 87"></figure>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" src="https://www.finlab.tw/wp-content/uploads/2023/09/image-14.png" alt="image 14" class="wp-image-5731" width="840" height="363" srcset="https://www.finlab.tw/wp-content/uploads/2023/09/image-14.png 514w, https://www.finlab.tw/wp-content/uploads/2023/09/image-14-300x130.png 300w" sizes="(max-width: 840px) 100vw, 840px" title="事件研究法上：找到異常報酬率 88"></figure>



<p>完整實作可以參考<a href="https://github.com/LemaireJean-Baptiste/eventstudy/blob/master/eventstudy/models.py" target="_blank" rel="noopener">別人的 package &amp; implementation</a>。</p>



<h2>第二步：研究股價的反應特性</h2>



<p>下圖為平均異常報酬率 (AAR) 與累積平均異常報酬率 (CAAR)。</p>



<p><img loading="lazy" width="602" height="285" src="https://lh4.googleusercontent.com/qXNIuJajou_O-D0nYVxMQFcMlu2bkJtLvmSAIJo2XWfihoTLWsehCeKYSkCgAK1KLuUZl9UszaBwCCRC4av-ooPs_h_FQIa6Kjtvf4ALkqgG_cQzVfzh-jSq2_DRo9H-ptHibASCAfiQnN_3WCimRkA" alt="qXNIuJajou O D0nYVxMQFcMlu2bkJtLvmSAIJo2XWfihoTLWsehCeKYSkCgAK1KLuUZl9UszaBwCCRC4av ooPs h FQIa6Kjtvf4ALkqgG cQzVfzh jSq2 DRo9H ptHibASCAfiQnN 3WCimRkA" title="事件研究法上：找到異常報酬率 89"></p>



<p>可以觀察到在彌補虧損減資前幾天股價就開始下跌了，並且一路跌到彌補虧損減資後五天。在接下來的系列中，我們將會教你來一起研究事件交易法，將 finlab package 中的隱藏功能給解鎖！！！</p>



<h1>結論</h1>



<p>在本文中，我們探討了事件研究法及其應用。事件研究法是一種重要的研究方法，用於分析突然發生的事件如何影響市場或其他現象。這種方法可以幫助我們回答重要的問題，如股價下跌的原因，是否因市場整體波動或特定因素引起，以及股價反應的時間特性等。</p>



<p>事件研究法的關鍵步驟包括移除已知的干擾因素，研究股價的反應特性，以及分析事件引起的原因。這些步驟幫助我們深入了解事件的影響，並排除了外部因素的干擾，使我們能夠更準確地評估事件對市場或其他現象的影響。</p>



<p>此外，事件研究法不僅適用於金融市場，還廣泛應用於各種科學研究領域。它可以幫助研究人員評估不同事件對各種現象的影響，從藥物效果到學術成績，都可以應用類似的原則進行研究。</p>



<p>最後，不妨在你身邊找看看事件研究法的題材，像是</p>



<ol><li>金紙銷量與清明節的關係</li><li>酒精攝取量與分手的關係</li><li>血糖與吃飯的關係</li></ol>



<p>也許這些事情跟交易無關，但也都是可以用事件研究法來探討的題材喔！</p>



<h1>References</h1>



<p><a href="https://www.eventstudytools.com/introduction-event-study-methodology" target="_blank" rel="noopener">https://www.eventstudytools.com/introduction-event-study-methodology</a></p>



<p><a href="https://www.investopedia.com/ask/answers/071415/what-formula-calculating-capital-asset-pricing-model-capm-excel.asp" target="_blank" rel="noopener">https://www.investopedia.com/ask/answers/071415/what-formula-calculating-capital-asset-pricing-model-capm-excel.asp</a></p>



<p><a href="https://medium.com/mlearning-ai/the-capital-asset-pricing-model-capm-financial-analysis-in-python-1a7a4f2c7650" target="_blank" rel="noopener">https://medium.com/mlearning-ai/the-capital-asset-pricing-model-capm-financial-analysis-in-python-1a7a4f2c7650</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/event-study-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5698</post-id>	</item>
	</channel>
</rss>
