<?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/category/%E7%B1%8C%E7%A2%BC%E9%9D%A2/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.finlab.tw</link>
	<description>深入淺出的量化投資，讓你在在茫茫股海中，找到專屬於自己的投資方法</description>
	<lastBuildDate>Wed, 07 Aug 2024 17:13:27 +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>大跌後的底氣 &#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 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="大跌後的底氣 - 獨家主力波動指標 1"></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="大跌後的底氣 - 獨家主力波動指標 2"></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="大跌後的底氣 - 獨家主力波動指標 3"></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="大跌後的底氣 - 獨家主力波動指標 4"></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="大跌後的底氣 - 獨家主力波動指標 5"></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="大跌後的底氣 - 獨家主力波動指標 6"></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>揭秘庫藏股：庫藏股投資策略再優化，股市條件探勘（Part 2）</title>
		<link>https://www.finlab.tw/inventory-down/</link>
					<comments>https://www.finlab.tw/inventory-down/#respond</comments>
		
		<dc:creator><![CDATA[lawrence]]></dc:creator>
		<pubDate>Sun, 31 Dec 2023 16:31:00 +0000</pubDate>
				<category><![CDATA[VIP文章]]></category>
		<category><![CDATA[基本面分析]]></category>
		<category><![CDATA[籌碼面]]></category>
		<category><![CDATA[選股策略]]></category>
		<category><![CDATA[量化投資]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=5850</guid>

					<description><![CDATA[這篇文章參考了數篇論文，並採用事件分析法去研究庫藏股的超額報酬。我們發現股票價格上漲主要集中在宣告初期，但到第四十天左右漲幅消失，甚至出現小幅下跌。並且，股價淨值比、過去二十天的報酬率以及流動資產占總資產比例這三項因素在統計上顯著影響了庫藏股宣告前的股票表現。]]></description>
										<content:encoded><![CDATA[
<h2>摘要</h2>



<p>這篇文章參考了數篇論文，並採用事件分析法去研究庫藏股的超額報酬。假如還不清楚什麼是庫藏股，可以參考<a href="https://www.finlab.tw/inventory-up/" data-type="post" data-id="5848">上一篇</a>。</p>



<p>我們發現股票價格上漲主要集中在宣告初期，但到第四十天左右漲幅消失，甚至出現小幅下跌。並且，股價淨值比、過去二十天的報酬率以及流動資產占總資產比例這三項因素在統計上顯著影響了庫藏股宣告前的股票表現。</p>



<p>最後，我們提出一種基於庫藏股宣告的交易策略，並使用FinLab回測引擎進行模擬，該策略的模擬結果達到了年化約 30% 的報酬率。</p>



<h2>論文參考</h2>



<p>經過深入分析以下幾篇論文：《<a href="https://ndltd.ncl.edu.tw/cgi-bin/gs32/gsweb.cgi/login?o=dnclcdr&amp;s=id=%22094NTU05320082%22.&amp;searchmode=basic" target="_blank" rel="noopener">庫藏股宣告效果的實證研究</a>》、《<a href="https://ndltd.ncl.edu.tw/cgi-bin/gs32/gsweb.cgi?o=dnclcdr&amp;s=id=%22097CYUT5304019%22.&amp;searchmode=basic&amp;extralimit=asc=%22%E6%9C%9D%E9%99%BD%E7%A7%91%E6%8A%80%E5%A4%A7%E5%AD%B8%22&amp;extralimitunit=%E6%9C%9D%E9%99%BD%E7%A7%91%E6%8A%80%E5%A4%A7%E5%AD%B8" target="_blank" rel="noopener">庫藏股買回宣告效果及其影響因素之研究</a>》，以及《<a href="https://ndltd.ncl.edu.tw/cgi-bin/gs32/gsweb.cgi?o=dnclcdr&amp;s=id=%22100YUNT5304023%22.&amp;searchmode=basic" target="_blank" rel="noopener">台灣上市公司庫藏股買回宣告對股票報酬之影響</a>》，我們整理出了幾個特別有趣的因子。這些因子對於理解庫藏股的影響及其在市場上的表現尤為重要。這些因子包括：</p>



<ol><li><a href="https://www.finlab.tw/pb-data-analysis-explain/" data-type="post" data-id="337">股價淨值比</a></li><li>宣告前的異常報酬率</li><li>公司是否屬於電子產業</li><li>公司的流動現金是否充足</li><li>公司的市值</li></ol>



<p>這些發現提供了對庫藏股宣告及其市場反應更深入的見解。</p>



<h2>事件交易分析法</h2>



<p>可以觀察到，漲幅都集中在前幾天。而且，到第四十天就沒有漲幅了，到最末尾甚至有一點跌幅。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="472" src="https://www.finlab.tw/wp-content/uploads/2023/11/image-1024x472.png" alt="image" class="wp-image-5851" srcset="https://www.finlab.tw/wp-content/uploads/2023/11/image-1024x472.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/11/image-300x138.png 300w, https://www.finlab.tw/wp-content/uploads/2023/11/image-768x354.png 768w, https://www.finlab.tw/wp-content/uploads/2023/11/image-1536x708.png 1536w, https://www.finlab.tw/wp-content/uploads/2023/11/image.png 1641w" sizes="(max-width: 1024px) 100vw, 1024px" title="揭秘庫藏股：庫藏股投資策略再優化，股市條件探勘（Part 2） 7"><figcaption>異常報酬率圖表</figcaption></figure>



<p>由於異常報酬率集中在庫藏股宣告的這幾天，因此後續分析都聚焦在庫藏股開始後五天。</p>



<h2>各式相關的因子</h2>



<p>在我們的研究中，我們定義了以下變數並執行了線性回歸分析</p>



<ul><li>Y：庫藏股公告前五天的報酬率</li><li>X1：股價淨值比</li><li>X2：過去二十天的報酬率</li><li>X3：市值</li><li>X4：流動資產占總資產的比例</li><li>X5：若屬於電子產業則為1，否則為0</li></ul>



<p>在這次分析中，我們觀察到X1（股價淨值比）、X2（過去二十天的報酬率）、X4（流動資產占總資產的比例）的p-value達到了顯著水平，這表明這些因素對庫藏股宣告前的股票表現有顯著影響。具體來說，股價淨值比較低、過去二十天報酬率下降較多、以及流動資產占總資產比例較高的股票，在庫藏股宣告前五天的漲幅越大。</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="576" height="457" src="https://www.finlab.tw/wp-content/uploads/2023/11/image-2.png" alt="image 2" class="wp-image-5865" srcset="https://www.finlab.tw/wp-content/uploads/2023/11/image-2.png 576w, https://www.finlab.tw/wp-content/uploads/2023/11/image-2-300x238.png 300w" sizes="(max-width: 576px) 100vw, 576px" title="揭秘庫藏股：庫藏股投資策略再優化，股市條件探勘（Part 2） 8"></figure>



<h2>交易策略</h2>



<p>值得注意的是，假設庫藏股會在 T+0 的收盤後公布，而這會使得 FinLab 的回測引擎在 T+2 的開盤買入。但實際上，在 T+1 的開盤時就能買入了，所以我們需要對 position 做 shift(-1)。</p>



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

close = data.get("price:收盤價")

# create event dataframe
start_buy = data.get('treasury_stock:預定買回期間-起')
start_buy = pd.DataFrame({
  "stock_id": [stock for stock in start_buy.columns for _ in start_buy[stock].dropna()],
  "dates": [date for stock in start_buy.columns for date in start_buy[stock].dropna()]
})
start_buy["value"] = 1
start_buy = start_buy.pivot(index="dates", columns="stock_id", values="value").notna()
start_buy = start_buy.reindex(close.index, columns=close.columns).fillna(False)
start_buy = start_buy &amp; (~start_buy.shift(-1).fillna(False))

pb = data.get('price_earning_ratio:股價淨值比')

prev_return = close.pct_change(periods=20)

liquid_asset = data.get('fundamental_features:流動資產')
total_asset = data.get('financial_statement:資產總額')
liquidity = (liquid_asset.ffill().bfill() / total_asset.ffill().bfill()) * (close &gt; 0)
liquidity = liquidity.fillna(0)

position = start_buy
position = position &amp; (pb &lt; 1)
position = position.shift(-1).rolling(5).sum().fillna(0)
report = sim(position, trade_at_price="open", fee_ratio=1.425/1000*0.2, market='TW_STOCK')
report.display()</code></pre>



<p>績效如下，還算不錯的一隻策略。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="865" height="1024" src="https://www.finlab.tw/wp-content/uploads/2023/12/image-8-865x1024.png" alt="image 8" class="wp-image-5988" srcset="https://www.finlab.tw/wp-content/uploads/2023/12/image-8-865x1024.png 865w, https://www.finlab.tw/wp-content/uploads/2023/12/image-8-253x300.png 253w, https://www.finlab.tw/wp-content/uploads/2023/12/image-8-768x909.png 768w, https://www.finlab.tw/wp-content/uploads/2023/12/image-8-1297x1536.png 1297w, https://www.finlab.tw/wp-content/uploads/2023/12/image-8-1730x2048.png 1730w, https://www.finlab.tw/wp-content/uploads/2023/12/image-8.png 1944w" sizes="(max-width: 865px) 100vw, 865px" title="揭秘庫藏股：庫藏股投資策略再優化，股市條件探勘（Part 2） 9"></figure>



<h2>結論</h2>



<p>總結來看，庫藏股不僅是企業資本操作的重要工具，也為市場參與者提供了獨特的投資機會。通過理解庫藏股的機制和其對市場的影響，投資者可以更加有效地制定策略，並利用相關的市場動態來追求盈利。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/inventory-down/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5850</post-id>	</item>
		<item>
		<title>揭秘庫藏股：智慧投資策略與市場動態的完美結合（Part 1）</title>
		<link>https://www.finlab.tw/inventory-up/</link>
					<comments>https://www.finlab.tw/inventory-up/#respond</comments>
		
		<dc:creator><![CDATA[lawrence]]></dc:creator>
		<pubDate>Sat, 30 Dec 2023 16:31:00 +0000</pubDate>
				<category><![CDATA[股票策略]]></category>
		<category><![CDATA[基本面分析]]></category>
		<category><![CDATA[籌碼面]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[選股策略]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=5848</guid>

					<description><![CDATA[庫藏股是公司購回且未注銷的自家股票，用於提高股價、防禦敵意收購、員工激勵等多重目的。它們不參與流通，不具投票權與股利資格。在台灣股市中，庫藏股操作還涉及稅務優勢。透過庫藏股，公司能提升每股盈利（EPS）並改善財務指標。投資者可以在庫藏股期間透過買盤策略獲利，儘管這種方法效果有限，但展示了利用市場動態的潛力。]]></description>
										<content:encoded><![CDATA[
<p>本文介紹什麼是庫藏股，並且以淺顯易懂的方式進行解說，並且實作年化報酬率20％以上的庫藏股策略，歡迎大家觀摩學習，推廣 FinLab。</p>



<figure class="wp-block-image size-large is-style-default"><img loading="lazy" width="1024" height="585" src="https://www.finlab.tw/wp-content/uploads/2023/11/80p1vnct-1024x585.png" alt="80p1vnct" class="wp-image-5993" srcset="https://www.finlab.tw/wp-content/uploads/2023/11/80p1vnct-1024x585.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/11/80p1vnct-300x171.png 300w, https://www.finlab.tw/wp-content/uploads/2023/11/80p1vnct-768x439.png 768w, https://www.finlab.tw/wp-content/uploads/2023/11/80p1vnct-1536x878.png 1536w, https://www.finlab.tw/wp-content/uploads/2023/11/80p1vnct.png 1792w" sizes="(max-width: 1024px) 100vw, 1024px" title="揭秘庫藏股：智慧投資策略與市場動態的完美結合（Part 1） 10"><figcaption>庫藏股如何獲利？</figcaption></figure>



<h2>庫藏股是什麼？</h2>



<p>庫藏股，是指公司購回自家股票並暫時保留而未注銷的一種股票形式。這類股票一旦被公司回購，就不會參與流通，因此不具備投票權和股利資格。企業進行庫藏股操作的目的多樣，其中包括增加每股價值、作為防禦敵意收購的策略、提供員工激勵計劃的選項，以及優化財務報表。這一策略在全球多數國家和地區的股市中普遍存在。</p>



<p>當公司決定購回股票後，這些股票可以保留為庫藏股，也可選擇注銷。注銷後，公司的股本會相應減少，從而提升每股盈利（EPS）。庫藏股的策略不僅有助於改善關鍵財務指標，如EPS，也能對股票市場的整體表現產生積極影響。台灣股市中的庫藏股操作，同時也涉及到稅務考量，相比於現金分紅，庫藏股具有稅務上的優勢。</p>



<p>更多詳細資訊，歡迎參考<a href="https://rich01.com/blog-pos-24/" target="_blank" rel="noopener">市場先生</a>的深入解析。</p>



<h2>為什麼需要庫藏股</h2>



<p>庫藏股的存在和使用通常基於以下幾個主要原因：</p>



<ol><li>增加股價和每股盈利（EPS）：通過減少流通中的股份數量，公司可以提升剩餘股份的價值和每股盈利（EPS）。這是因為在盈利不變的情況下，減少的股份數量意味著每股分攤到的盈利增加。</li><li>防禦策略：當公司面臨敵意收購的威脅時，購買庫藏股可以作為一種防禦策略。透過減少市場上可用的股份，公司可以提高敵對方收購所需的成本，從而降低被收購的風險。</li><li>資本結構最優化：公司可能認為股票被低估，因此透過買回股票來改善其資本結構，同時向市場傳達對自身價值的信心。</li><li>員工激勵計劃：庫藏股可用於員工股票選擇權計劃或其他形式的員工報酬計劃。這有助於增強員工對公司的忠誠度和激勵，因為他們直接參與到公司的表現中。</li><li>資本回報：當公司擁有多餘現金且缺乏其他高回報的投資機會時，它可能選擇透過庫藏股回報給股東。這可以視為對股東的一種獎勵。</li><li>稅務考量：以台股為例，庫藏股相比於現金分紅具有稅務上的優勢。</li><li>改善財務指標：減少流通中的股票數量有助於改善某些關鍵的財務指標，如每股盈利（EPS），從而對公司股票的市場表現產生正面影響。</li></ol>



<p>總之，庫藏股是公司財務戰略的一部分，用於達到特定的商業目標和增強股東價值。</p>



<h2>怎麼利用庫藏股事件獲利</h2>



<p>探討庫藏股獲利的途徑，我們可以考慮在庫藏股操作期間實施買盤策略。這是基於一個簡單的假設：庫藏股期間往往會吸引買家進場。以下是一段以Python編寫的策略代碼，它展示了如何利用庫藏股期間的市場動態進行投資。</p>



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

close = data.get("price:收盤價")

# create event dataframe
start_buy = data.get('treasury_stock:預定買回期間-起')
start_buy = pd.DataFrame({
  "stock_id": [stock for stock in start_buy.columns for _ in start_buy[stock].dropna()],
  "dates": [date for stock in start_buy.columns for date in start_buy[stock].dropna()]
})
start_buy["value"] = 1
start_buy = start_buy.pivot(index="dates", columns="stock_id", values="value").notna()
start_buy = start_buy.reindex(close.index, columns=close.columns).fillna(False)
start_buy = start_buy &amp; (~start_buy.shift(-1).fillna(False))

position = start_buy
position = position.shift(-1).rolling(40).sum().fillna(0)
report = sim(position, trade_at_price="open", fee_ratio=1.425/1000*0.2, market='TW_STOCK')</code></pre>



<p>雖然這種策略的效果可能有限，但它確實展示了庫藏股獲利的可能性。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="798" height="1024" src="https://www.finlab.tw/wp-content/uploads/2023/12/image-6-798x1024.png" alt="image 6" class="wp-image-5982" srcset="https://www.finlab.tw/wp-content/uploads/2023/12/image-6-798x1024.png 798w, https://www.finlab.tw/wp-content/uploads/2023/12/image-6-234x300.png 234w, https://www.finlab.tw/wp-content/uploads/2023/12/image-6-768x985.png 768w, https://www.finlab.tw/wp-content/uploads/2023/12/image-6-1198x1536.png 1198w, https://www.finlab.tw/wp-content/uploads/2023/12/image-6-1597x2048.png 1597w, https://www.finlab.tw/wp-content/uploads/2023/12/image-6.png 1954w" sizes="(max-width: 798px) 100vw, 798px" title="揭秘庫藏股：智慧投資策略與市場動態的完美結合（Part 1） 11"><figcaption>庫藏股績效</figcaption></figure>



<h2>結論</h2>



<ol><li><strong>庫藏股定義</strong>：庫藏股是公司購回但未注銷的自家股票。這些股票不在市場流通，無投票權和股利。</li><li><strong>購買原因</strong>：公司購買庫藏股可能是為了提高股價、防禦敵意收購、作為員工激勵計劃的一部分、改善財務報表等。</li><li><strong>庫藏股的影響</strong>：庫藏股可提升剩餘股份的價值和每股盈利（EPS），是資本結構調整的一種方式。</li><li><strong>使用目的</strong>：庫藏股被用於提升股價、防禦收購、員工激勵、資本回報、稅務考量、改善財務指標等。</li><li><strong>庫藏股獲利策略</strong>：透過特定的財務分析方法，可以在庫藏股期間進行投資操作，這可能帶來獲利機會，儘管收益可能有限。</li></ol>



<p>庫藏股是公司財務策略的重要一環，用於實現多元的商業目標和增強股東價值。對於投資者來說，理解庫藏股的概念和影響，可以幫助他們做出更明智的投資決策。</p>



<p>接下來，我們就要將這個簡單的策略改進，獲得更穩定的報酬率。不妨來參考一下 FinLab 的 VIP 文章「<a href="https://www.finlab.tw/inventory-down">庫藏股下：讓策略變得更好</a>」，裡面會更詳盡的介紹要怎麼善用庫藏股事件，下面是 VIP 策略的績效。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="865" height="1024" src="https://www.finlab.tw/wp-content/uploads/2023/12/image-7-865x1024.png" alt="image 7" class="wp-image-5986" srcset="https://www.finlab.tw/wp-content/uploads/2023/12/image-7-865x1024.png 865w, https://www.finlab.tw/wp-content/uploads/2023/12/image-7-253x300.png 253w, https://www.finlab.tw/wp-content/uploads/2023/12/image-7-768x909.png 768w, https://www.finlab.tw/wp-content/uploads/2023/12/image-7-1297x1536.png 1297w, https://www.finlab.tw/wp-content/uploads/2023/12/image-7-1730x2048.png 1730w, https://www.finlab.tw/wp-content/uploads/2023/12/image-7.png 1944w" sizes="(max-width: 865px) 100vw, 865px" title="揭秘庫藏股：智慧投資策略與市場動態的完美結合（Part 1） 12"><figcaption>改進版的策略</figcaption></figure>



<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/inventory-up/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5848</post-id>	</item>
		<item>
		<title>反思菲式思考 Part.3｜站在菲神的肩膀上研發策略｜預判恢復信用交易有用嗎？</title>
		<link>https://www.finlab.tw/https-www-finlab-tw-phcebus-thinking-report-part3-credit-transaction-recovery/</link>
					<comments>https://www.finlab.tw/https-www-finlab-tw-phcebus-thinking-report-part3-credit-transaction-recovery/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Mon, 28 Aug 2023 08:37:02 +0000</pubDate>
				<category><![CDATA[FinLab 量化平台]]></category>
		<category><![CDATA[基本面分析]]></category>
		<category><![CDATA[籌碼面]]></category>
		<category><![CDATA[信用交易]]></category>
		<category><![CDATA[歷史回測]]></category>
		<category><![CDATA[菲式思考]]></category>
		<category><![CDATA[選股策略]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=5523</guid>

					<description><![CDATA[很多人在策略上線後會擔心策略失效，這樣的擔心是沒有意義的，因為很多事你無法控制，可能一個漲跌幅再放寬，就一堆策 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="has-medium-font-size">很多人在策略上線後會擔心策略失效，這樣的擔心是沒有意義的，因為很多事你無法控制，可能一個漲跌幅再放寬，就一堆策略波動規律改變。<br>真正重要的是你有沒有能力研發與調整策略，有能力的話，你就不會害怕局勢變化，腦袋終有應變方法，這個能力容不容易培養？<br>老實說，從 0 到 1 很難，不是很吃交易經驗，就是很吃資料科學的能力，兩者都很難速成。要速成就要站在巨人的研究基礎上，再加上一點點資料分析的能力，就有機會有小成。<br>本篇將教你從「菲式思考」最後一個章節「嘉實XQ內建策略回測之探討」取範例，照著「<a href="https://www.finlab.tw/phcebus-thinking-report-part2-backtest-sop/">反思菲式思考 Part.2｜策略回測探討</a>」的SOP，來實作策略優化與分析的邏輯，結合 FinLab 量化平台的分析工具，打造出屬於自己的策略。</p>



<h2>可能恢復信用交易的個股</h2>



<p class="has-medium-font-size">參考自「菲式思考」p.299 策略 617。這個策略帶有基本面、籌碼面、事件面的因素，當股票的每股淨值翻到 10 元以上，就能擁有信用交易的資格，資金調度變靈活，有機會吸引投機買盤進場，讓股價往上衝，同時這也代表基本面可能有復甦跡象，一般來說「每股淨值」在 10 元以下的公司都有成長性或財務狀況不穩的狀況，若每股淨值在之後翻到 10 元以上，可能代表營運趨勢改變，會吸引看好轉機的買盤。</p>



<p class="has-medium-font-size">不論是恢復或是停止信用交易，都會在每季財報公告截止日後五個工作天進行審核是否恢復信用交易，若是在事前押寶成功，標地真的恢復信用交易，可能買盤力道強，反之押寶失敗，未如情況恢復信用交易，可能基本面仍不夠好，會引發失望賣壓。</p>



<h3>書中選股條件</h3>



<ul class="has-medium-font-size"><li>每股淨值介於 9～10元之間。</li><li>近一季營業利益率 > 0。</li><li>月營收月增率 > 5%。</li><li>近 3 個月月營收月增率平均 > 5%。</li><li>使用30天交易日回測。</li></ul>



<h2>FinLab 回測驗證</h2>



<h3>程式碼</h3>



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

收盤價 = data.get('price:收盤價') 
股價淨值比 = data.get('price_earning_ratio:股價淨值比')
每股淨值 = 收盤價/股價淨值比
營業利益率 = data.get('fundamental_features:營業利益率').deadline()
月營收月增率 = data.get('monthly_revenue:上月比較增減(%)')

c1 = (9 &lt;= 每股淨值) &amp; (每股淨值 &lt; 10)
c2 = 營業利益率 &gt; 0
c3 = 月營收月增率 &gt; 5
c4 = 月營收月增率.average(3) &gt; 5
position = c1 &amp; c2 &amp; c3 &amp; c4
report = sim(position, resample='M', upload=False)
report.display()</code></pre>



<h3>回測結果</h3>



<h4>報酬率與波動</h4>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="902" src="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.05.14-1024x902.png" alt="截圖 2023 08 28 下午1.05.14" class="wp-image-5528" srcset="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.05.14-1024x902.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.05.14-300x264.png 300w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.05.14-768x677.png 768w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.05.14-1536x1354.png 1536w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.05.14.png 1558w" sizes="(max-width: 1024px) 100vw, 1024px" title="反思菲式思考 Part.3｜站在菲神的肩膀上研發策略｜預判恢復信用交易有用嗎？ 13"></figure>



<h4>流動性風險</h4>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="346" src="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.05.37-1024x346.png" alt="截圖 2023 08 28 下午1.05.37" class="wp-image-5529" srcset="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.05.37-1024x346.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.05.37-300x101.png 300w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.05.37-768x260.png 768w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.05.37-1536x519.png 1536w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.05.37-2048x692.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="反思菲式思考 Part.3｜站在菲神的肩膀上研發策略｜預判恢復信用交易有用嗎？ 14"></figure>



<h3>回測交叉比對</h3>



<p class="has-medium-font-size">由於 FinLab 財報資料庫因要統一 IFRS 會計欄位，資料從 2013 開始，和 XQ 會有差異。<br>跑出來的數據發現平均年化報酬率、MDD(最大回撤)、勝率 都要比 XQ 回測的結果要差，這可能和書中部分條件定義不清或資料差異所導致。<br>FinLab 回測結果和 XQ 回測結果近似的地方在該策略的交易次數不多，只有 200多次 ，是比較少見的事件，策略報酬曲線類似，主要報酬都是靠近3年拉起來，2021年前的績效較不穩定。</p>



<h3>優化設定方向</h3>



<ul class="has-medium-font-size"><li>交易次數過少：需回測單因子條件，看能否用最少的條件得到最多的次數與回測報酬。由於交易次數少，可能某些月份會有 1~2檔 重壓的情況，讓波動風險難以控制，因此應要設定單檔持股比例上限。</li><li>波動過大：回檔太大，夏普率不夠高，由於該策略是低每股淨值，低每股淨值很可能也是低價股，因此加入之前研究的低價股策略來降波動，參考「<a href="https://www.finlab.tw/low_price_strategy_tw_stock/"><strong>給小資族的禮物｜低價股量化策略的實戰訣竅</strong></a>」、「<a href="https://ai.finlab.tw/strategyview/?uid=TJN4FDuqrwU8DML7DAjUYFIMutp2&amp;sid=%E8%86%BD%E5%B0%8F%E8%B2%93" target="_blank" rel="noopener">膽小貓策略</a>」。</li><li>太容易選到流動性很差的標地，有多達 38% 的股票在進出當日的交易張數低於100張，成交金額有 33％ 低於 100 萬，大資金難進出。資金較大者，最好多設定成交量或成交金額條件，降低流動性風險。</li></ul>



<h2>策略優化</h2>



<p class="has-medium-font-size">使用<a href="https://doc.finlab.tw/reference/optimize/#finlab.optimize.combinations.sim_conditions" target="_blank" rel="noopener">策略優化器</a>，找出最佳條件組合，回測統一加上單檔最大持股上限(position_limit)為 20%的設定，避免重壓的運氣成份。多加一個「低價股策略」的「低波動條件」來看看能否降低波動。</p>



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

收盤價 = data.get('price:收盤價') 
股價淨值比 = data.get('price_earning_ratio:股價淨值比')
每股淨值 = 收盤價/股價淨值比
營業利益率 = data.get('fundamental_features:營業利益率').deadline()
月營收月增率 = data.get('monthly_revenue:上月比較增減(%)')

最高價 = data.get("price:最高價")
最低價 = data.get("price:最低價")
成交股數 =  data.get("price:成交股數")

c1 = (9 &lt;= 每股淨值) &amp; (每股淨值 &lt; 10)
c2 = 營業利益率 &gt; 0
c3 = 月營收月增率 &gt; 5
c4 = 月營收月增率.average(3) &gt; 5
# 低波動條件
c5 = (1 - 最低價.rolling(60).min()/最高價.rolling(60).max()) &lt; 0.3

conditions = {'c1':c1, 'c2':c2, 'c3':c3, 'c4':c4, 'c5':c5}
report_collection = sim_conditions(conditions=conditions, resample='M', position_limit=0.2, upload=False)</code></pre>



<h3>分析結果</h3>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="363" src="https://www.finlab.tw/wp-content/uploads/2023/08/newplot-3-1024x363.png" alt="newplot 3" class="wp-image-5530" srcset="https://www.finlab.tw/wp-content/uploads/2023/08/newplot-3-1024x363.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/08/newplot-3-300x106.png 300w, https://www.finlab.tw/wp-content/uploads/2023/08/newplot-3-768x272.png 768w, https://www.finlab.tw/wp-content/uploads/2023/08/newplot-3.png 1481w" sizes="(max-width: 1024px) 100vw, 1024px" title="反思菲式思考 Part.3｜站在菲神的肩膀上研發策略｜預判恢復信用交易有用嗎？ 15"></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="980" src="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.25.40-1024x980.png" alt="截圖 2023 08 28 下午1.25.40" class="wp-image-5531" srcset="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.25.40-1024x980.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.25.40-300x287.png 300w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.25.40-768x735.png 768w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.25.40.png 1499w" sizes="(max-width: 1024px) 100vw, 1024px" title="反思菲式思考 Part.3｜站在菲神的肩膀上研發策略｜預判恢復信用交易有用嗎？ 16"></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="541" src="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.26.23-1024x541.png" alt="截圖 2023 08 28 下午1.26.23" class="wp-image-5532" srcset="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.26.23-1024x541.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.26.23-300x159.png 300w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.26.23-768x406.png 768w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.26.23-1536x812.png 1536w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.26.23.png 1602w" sizes="(max-width: 1024px) 100vw, 1024px" title="反思菲式思考 Part.3｜站在菲神的肩膀上研發策略｜預判恢復信用交易有用嗎？ 17"></figure>



<p class="has-medium-font-size">優化出的結果「c1 &amp; c2 &amp; c3」這組結果最優，相較書中原本的策略，少加條件 c4  (近 3 個月月營收月增率平均 &gt; 5%)。<br>原本「c1 &amp; c2 &amp; c3 &amp; c4」的組合再加上單檔最大持股上限後，報酬率巨幅下降到 14.7%! 可見書中原策略的報酬率很可能是重押押對的結果，不可不慎！<br>持股組合只有「c1 &amp; c2 &amp; c3、 c1 &amp; c2」這兩組報酬率超過 20%，與其他組別拉開差距，比對這兩組合的指標數值。「c1 &amp; c2 &amp; c3」優點是 MDD、avg_mdd (交易對 MDD 平均值)，向下波動風險較小，若願意犧牲一點報酬率換取回檔波動的穩定性，可以考慮調整。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="849" src="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.39.59-1024x849.png" alt="截圖 2023 08 28 下午1.39.59" class="wp-image-5533" srcset="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.39.59-1024x849.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.39.59-300x249.png 300w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.39.59-768x637.png 768w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午1.39.59.png 1468w" sizes="(max-width: 1024px) 100vw, 1024px" title="反思菲式思考 Part.3｜站在菲神的肩膀上研發策略｜預判恢復信用交易有用嗎？ 18"></figure>



<p class="has-medium-font-size">你可能會納悶「c1 &amp; c2 &amp; c3」的交易次數比「c1 &amp; c2」多？不是多一個條件嗎？原因在使用營收資料會增加換股的次數，「c1 &amp; c2」的組合持有天期會比較長，持股組合較少異動。</p>



<h2>波動分析 &amp; 停損設定</h2>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="1024" src="https://www.finlab.tw/wp-content/uploads/2023/08/newplot-4-1024x1024.png" alt="newplot 4" class="wp-image-5534" srcset="https://www.finlab.tw/wp-content/uploads/2023/08/newplot-4-1024x1024.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/08/newplot-4-300x300.png 300w, https://www.finlab.tw/wp-content/uploads/2023/08/newplot-4-150x150.png 150w, https://www.finlab.tw/wp-content/uploads/2023/08/newplot-4-768x768.png 768w, https://www.finlab.tw/wp-content/uploads/2023/08/newplot-4-600x600.png 600w, https://www.finlab.tw/wp-content/uploads/2023/08/newplot-4.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" title="反思菲式思考 Part.3｜站在菲神的肩膀上研發策略｜預判恢復信用交易有用嗎？ 19"></figure>



<p class="has-medium-font-size">我們取「c1 &amp; c2 &amp; c3」這組策略來做分析，MAE Distribution 建議了兩種停損設定，分別是勝手MAE Q3 的位置 3.68%、敗手MFE Q3 的位置 13.95%。<br>使用前者通常可以降低 MDD，並有機會提升報酬率，但因為停損較緊，勝率通常也會降低，可能把原本會大賺的標地也移除。若跑出的報酬率、勝率降幅太大則不適用。<br>使用後者則通常可維持勝率及報酬率，並止血虧損異常大的交易，但由於停損較鬆，MDD改善的機會比前者小。</p>



<h3>未設定停損</h3>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="987" src="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.46.12-1024x987.png" alt="截圖 2023 08 28 下午2.46.12" class="wp-image-5535" srcset="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.46.12-1024x987.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.46.12-300x289.png 300w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.46.12-768x740.png 768w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.46.12.png 1454w" sizes="(max-width: 1024px) 100vw, 1024px" title="反思菲式思考 Part.3｜站在菲神的肩膀上研發策略｜預判恢復信用交易有用嗎？ 20"></figure>



<h3>停損設定4%</h3>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.47.05-1024x948.png" alt="截圖 2023 08 28 下午2.47.05" class="wp-image-5536" width="840" height="777" srcset="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.47.05-1024x948.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.47.05-300x278.png 300w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.47.05-768x711.png 768w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.47.05.png 1524w" sizes="(max-width: 840px) 100vw, 840px" title="反思菲式思考 Part.3｜站在菲神的肩膀上研發策略｜預判恢復信用交易有用嗎？ 21"></figure>



<p class="has-medium-font-size">年化報酬率、夏普率、MDD、勝率皆下降，整體波動下調，勝率掉特別多。</p>



<h3>停損設定14%</h3>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="966" src="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.48.39-1024x966.png" alt="截圖 2023 08 28 下午2.48.39" class="wp-image-5537" srcset="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.48.39-1024x966.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.48.39-300x283.png 300w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.48.39-768x724.png 768w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.48.39.png 1511w" sizes="(max-width: 1024px) 100vw, 1024px" title="反思菲式思考 Part.3｜站在菲神的肩膀上研發策略｜預判恢復信用交易有用嗎？ 22"></figure>



<p class="has-medium-font-size">年化報酬率、夏普率、勝率皆下降，MDD 微幅上升。</p>



<h3>小結</h3>



<p class="has-medium-font-size">設定停損的會降低策略指標？年化報酬率還下降些了，為什麼會這樣呢？那是因為有些獲利的藍點也有很大的 MAE ，在停損的過程被犧牲掉了。<br>既然結果變差，可以不設定停損嗎？答案是「還是要設停損」，因為你不知道策略未來失效時會發生什麼事，雖然停損設定讓回測績效變差，但能在未來交易出現不利情況時，有防火牆止掉大幅虧損，避免大賠是交易的第一要務。</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="325" height="264" src="https://www.finlab.tw/wp-content/uploads/2023/08/mae_return.png" alt="mae return" class="wp-image-5538" srcset="https://www.finlab.tw/wp-content/uploads/2023/08/mae_return.png 325w, https://www.finlab.tw/wp-content/uploads/2023/08/mae_return-300x244.png 300w" sizes="(max-width: 325px) 100vw, 325px" title="反思菲式思考 Part.3｜站在菲神的肩膀上研發策略｜預判恢復信用交易有用嗎？ 23"></figure>



<h2>最終策略代碼</h2>



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

收盤價 = data.get('price:收盤價') 
股價淨值比 = data.get('price_earning_ratio:股價淨值比')
每股淨值 = 收盤價/股價淨值比
營業利益率 = data.get('fundamental_features:營業利益率').deadline()
月營收月增率 = data.get('monthly_revenue:上月比較增減(%)')

c1 = (9 &lt;= 每股淨值) &amp; (每股淨值 &lt; 10)
c2 = 營業利益率 &gt; 0
c3 = 月營收月增率 &gt; 5
position = c1 &amp; c2 &amp; c3
report = sim(position, resample='M', upload=False, position_limit=0.2, mae_mfe_window=40, stop_loss=0.14)</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="966" src="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.48.39-1024x966.png" alt="截圖 2023 08 28 下午2.48.39" class="wp-image-5537" srcset="https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.48.39-1024x966.png 1024w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.48.39-300x283.png 300w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.48.39-768x724.png 768w, https://www.finlab.tw/wp-content/uploads/2023/08/截圖-2023-08-28-下午2.48.39.png 1511w" sizes="(max-width: 1024px) 100vw, 1024px" title="反思菲式思考 Part.3｜站在菲神的肩膀上研發策略｜預判恢復信用交易有用嗎？ 22"></figure>



<h2>結論</h2>



<p class="has-medium-font-size">經過以上的策略優化與檢測邏輯，將「菲式策略」的策略 617「可能恢復信用交易的個股」優化為較穩定的版本，站在巨人的肩膀上開發策略，是不是沒有你想像中的難呢？完整的策略優或過程的程式碼從這裡<a href="https://colab.research.google.com/drive/1imY6fxY_8PXKDk4bo-eGdZp_uAr3jnw8?usp=sharing" target="_blank" rel="noopener">下載</a>，也可以到量化平台定期追蹤此<a href="https://ai.finlab.tw/notebook/?uid=TJN4FDuqrwU8DML7DAjUYFIMutp2&amp;sid=%E5%8F%AF%E8%83%BD%E6%81%A2%E5%BE%A9%E4%BF%A1%E7%94%A8%E4%BA%A4%E6%98%93" target="_blank" rel="noopener">策略的表現</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/https-www-finlab-tw-phcebus-thinking-report-part3-credit-transaction-recovery/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5523</post-id>	</item>
		<item>
		<title>投信買賣超選股策略｜時空序列分析的秘招｜停損怎麼設？</title>
		<link>https://www.finlab.tw/time_series_analysis_of_investment_trust_strategy/</link>
					<comments>https://www.finlab.tw/time_series_analysis_of_investment_trust_strategy/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Tue, 15 Nov 2022 08:47:06 +0000</pubDate>
				<category><![CDATA[FinLab 量化平台]]></category>
		<category><![CDATA[VIP文章]]></category>
		<category><![CDATA[籌碼面]]></category>
		<category><![CDATA[選股策略]]></category>
		<category><![CDATA[MAE_MFE]]></category>
		<category><![CDATA[VIP限定]]></category>
		<category><![CDATA[台股]]></category>
		<category><![CDATA[投信]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=4870</guid>

					<description><![CDATA[帝牙盧卡有著控制時間的能力，被稱作時間之神。牠可以扭曲時間以讓時間加快或減慢甚至停止。 帕路奇亞擁有扭曲空間的 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="has-medium-font-size"><br></p>



<blockquote class="wp-block-quote"><p>帝牙盧卡有著控制時間的能力，被稱作時間之神。牠可以扭曲時間以讓時間加快或減慢甚至停止。</p><p>帕路奇亞擁有扭曲空間的能力，在<a href="https://wiki.52poke.com/wiki/%E7%A5%9E%E5%A5%A5%E5%9C%B0%E5%8C%BA" target="_blank" rel="noopener">神奧地區</a>的神話裡被描述成神。它可以憑藉自己操縱空間的連接從而能夠移動到遠處的異空間～寶可夢</p></blockquote>



<figure class="wp-block-image size-full"><img loading="lazy" width="1024" height="520" src="https://www.finlab.tw/wp-content/uploads/2022/11/img_story_210928_01_01.png" alt="https://reurl.cc/bGEQEX" class="wp-image-4880" srcset="https://www.finlab.tw/wp-content/uploads/2022/11/img_story_210928_01_01.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/11/img_story_210928_01_01-300x152.png 300w, https://www.finlab.tw/wp-content/uploads/2022/11/img_story_210928_01_01-768x390.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" title="投信買賣超選股策略｜時空序列分析的秘招｜停損怎麼設？ 25"></figure>



<p class="has-medium-font-size">交易者和寶可夢訓練家的世界其實有異曲同工之妙，如果你收服「帝牙盧卡」和「帕路奇亞」，等同擁有掌握時間與空間的能力，在對戰上佔盡優勢。<br>在交易的世界裡，時間與空間指的是什麼呢？股海有句老話是「獲利是等出來的」，然而真的每個催化劑都適合等嗎？什麼樣的換股間隔才最適合？為什麼有些策略是用一週，有些用每月底？<br>在股價波動的空間裡，什麼樣的停損才適當？如何保留多數獲利、減低多數虧損？<br>如果你掌握投資市場分析時空序列的能力，等同在擁有犯規的神獸啊～</p>



<p class="has-medium-font-size">看過FinLab的「<a href="https://ai.finlab.tw/notebook/?uid=TJN4FDuqrwU8DML7DAjUYFIMutp2&amp;sid=%E6%8A%95%E4%BF%A1%E5%A4%A7%E5%93%A5%E8%B7%9F%E5%B1%81%E8%9F%B2&amp;cid=f0A8du1VqXMGVEa2u8si" target="_blank" rel="noopener">投信大哥跟屁蟲</a>」教學影片了嗎？沒看過的人，請先趕緊去看。相信看過的人都能快速掌握 Python 語法，了解策略的設定，看完後再來學這篇文章進階的小工具，了解投信大哥跟屁蟲的秘密。</p>



<h2>時間分析</h2>



<p class="has-medium-font-size">為什麼<a href="https://ai.finlab.tw/notebook/?uid=TJN4FDuqrwU8DML7DAjUYFIMutp2&amp;sid=%E6%8A%95%E4%BF%A1%E5%A4%A7%E5%93%A5%E8%B7%9F%E5%B1%81%E8%9F%B2&amp;cid=f0A8du1VqXMGVEa2u8si" target="_blank" rel="noopener">投信大哥跟屁蟲</a>換股是3天，而不是5天、10天、20天？<br>要分析其實很簡單，使用FinLab模組的 <a href="https://doc.finlab.tw/reference/optimize/#finlab.optimize.combinations.ReportCollection" target="_blank" rel="noopener">ReportCollection</a> 即可取得回測報告集合，判斷策略組合數據優劣，從策略海中快速找到體質最強的策略。 也可以觀察在同條件下的策略疊加更多條件後會有什麼變化？以下程式範例將策略程式封裝成函數，變數為換股間隔，來跑跑看2~20天不同換股週期的回測效果。</p>



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

def run_strategy(interval:int):
    close = data.get("price:收盤價")
    vol = data.get('price:成交股數')
    投信買賣超股數 = data.get('institutional_investors_trading_summary:投信買賣超股數')

    c1 = 投信買賣超股數 >= 800000
    c2 = 投信買賣超股數/vol >= 0.05

    position = c1 &amp; c2 
    position = position * close
    position = position[position>0]
    position = position.is_smallest(8)

    # 每3個交易日再平衡，與resample='3D'差異在後者是隔3日，而非3個交易日。
    position = position.loc[list(position.index)[::interval]]
    report = sim(position,trade_at_price='open', position_limit=1/3, fee_ratio=1.425/1000/3, upload=False, mae_mfe_window=40)
    return report 

from finlab.optimize.combinations import ReportCollection

# 回測2~20間隔
reports = {i:run_strategy(i) for i in range(2,21)}
# 回測報告視覺化
collection = ReportCollection(reports)
collection.plot_creturns()</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="265" src="https://www.finlab.tw/wp-content/uploads/2022/11/newplot-38-1-1024x265.png" alt="newplot 38 1" class="wp-image-4905" srcset="https://www.finlab.tw/wp-content/uploads/2022/11/newplot-38-1-1024x265.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-38-1-300x78.png 300w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-38-1-768x199.png 768w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-38-1-1536x397.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-38-1.png 2029w" sizes="(max-width: 1024px) 100vw, 1024px" title="投信買賣超選股策略｜時空序列分析的秘招｜停損怎麼設？ 26"></figure>



<p class="has-medium-font-size">跑完後發現當間隔為3天時，累積報酬率明顯優於其他天數表現。為了更確認分析，我們可以再執行<code>reports[3].display_mae_mfe_analysis()</code>來看<a href="https://www.finlab.tw/edge-ratio-follow-application/"> Edge Ratio </a>(下圖第一排中間子圖)的表現，<a href="https://www.finlab.tw/edge-ratio-follow-application/">Edge Ratio </a>簡而言之是綜合交易時間與波動關係的判斷指標，可以發現投信策略在一開始進場就有優勢 (大於1) ，但優勢隨著持有時間 (x軸) 拉長急速下降，直到第20天後才又拉升到持有3天時的高峰，可見投信買賣超的因子在短期較具有影響性，考量換股效率，持有3天是不錯的選項，可以用多次小獲利不斷去滾。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="1024" src="https://www.finlab.tw/wp-content/uploads/2022/11/newplot-31-1024x1024.png" alt="newplot 31" class="wp-image-4874" srcset="https://www.finlab.tw/wp-content/uploads/2022/11/newplot-31-1024x1024.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-31-300x300.png 300w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-31-150x150.png 150w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-31-768x768.png 768w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-31-600x600.png 600w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-31.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" title="投信買賣超選股策略｜時空序列分析的秘招｜停損怎麼設？ 27"></figure>



<h2>空間分析</h2>



<h2>勝敗手MAE分佈圖</h2>



<p class="has-medium-font-size">分析完時間，我們把換股週期3天保留下來，接下來要研究停損怎麼設定才好？好的停損是保留多數獲利，避免提早被洗掉，並能將大虧損變小虧損，降低損失，進而優化策略體質。<br>分析的第一步可以先看勝敗手的 MAE Distribution (若不知道 MAE ，請見此篇<a href="https://www.finlab.tw/display_mae_mfe_analysis/">教學文章</a>)，MAE簡單說是每筆交易持有歷程的最大虧損。<br>數據呈現一樣用 <a href="https://doc.finlab.tw/reference/analysis/#finlab.analysis.Report.display_mae_mfe_analysis" target="_blank" rel="noopener">display_mae_mfe_analysis()</a> 可以叫出。我們將圖片放大來看，可以發現贏錢的交易(藍色)的第75百分位數很小，只有0.51%，代表多數贏錢的交易在持有過程中很少碰到虧損，而輸錢的交易(紅色)的第75百分位數也不大，只有 4.2%，代表有 25% 的虧損交易的 MAE 大於 4.2%。由上述分析，我們合適的停損應落於 0.51%~4.2% 之間，只要停損設超過 0.51%，就能保留多數獲利，因為這些少數的獲利交易才會超過 0.51%，而停損設小於 4.2% ，可以將MAE 高的標地往內縮，降低潛在損失。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="862" src="https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-15-下午4.03.47-1024x862.png" alt="截圖 2022 11 15 下午4.03.47" class="wp-image-4875" srcset="https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-15-下午4.03.47-1024x862.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-15-下午4.03.47-300x253.png 300w, https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-15-下午4.03.47-768x646.png 768w, https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-15-下午4.03.47.png 1289w" sizes="(max-width: 1024px) 100vw, 1024px" title="投信買賣超選股策略｜時空序列分析的秘招｜停損怎麼設？ 28"></figure>



<h2>停損回測集</h2>



<p class="has-medium-font-size">依據上述分析，可以知道波動空間與合適的停損範圍大概在 0.51%~4.2%(可在後推一點)上下 ，我們一樣用前面示範過的方法，改將停損設定設為變數，再看停損哪一個數字最棒。FinLab 模組的 <a href="https://doc.finlab.tw/reference/optimize/#finlab.optimize.combinations.ReportCollection" target="_blank" rel="noopener">ReportCollection</a> 有熱力圖與統計數據可以幫握們分析，使用方式如下：</p>



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

def run_strategy_with_stop_loss(stop_loss:float):
    close = data.get("price:收盤價")
    vol = data.get('price:成交股數')
    投信買賣超股數 = data.get('institutional_investors_trading_summary:投信買賣超股數')

    c1 = 投信買賣超股數 >= 800000
    c2 = 投信買賣超股數/vol >= 0.05

    position = c1 &amp; c2 
    position = position * close
    position = position[position>0]
    position = position.is_smallest(8)

    # 每3個交易日再平衡，與resample='3D'差異在後者是隔3日，而非3個交易日。
    position = position.loc[list(position.index)[::3]]
    report = sim(position,trade_at_price='open', position_limit=1/3, fee_ratio=1.425/1000/3, upload=False, mae_mfe_window=40, stop_loss=stop_loss)
    return report 

from finlab.optimize.combinations import ReportCollection

stop_loss_reports = {i/1000:run_strategy_with_stop_loss(i/1000) for i in range(0,50,5)}
stop_loss_collection = ReportCollection(stop_loss_reports)
stop_loss_collection.plot_creturns().show()
stop_loss_collection.plot_stats(mode='heatmap', heatmap_sort_by='daily_mean').show()</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="265" src="https://www.finlab.tw/wp-content/uploads/2022/11/newplot-39-1-1024x265.png" alt="newplot 39 1" class="wp-image-4906" srcset="https://www.finlab.tw/wp-content/uploads/2022/11/newplot-39-1-1024x265.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-39-1-300x78.png 300w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-39-1-768x199.png 768w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-39-1-1536x397.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-39-1.png 2029w" sizes="(max-width: 1024px) 100vw, 1024px" title="投信買賣超選股策略｜時空序列分析的秘招｜停損怎麼設？ 29"></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="712" src="https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-18-下午12.58.09-1024x712.png" alt="截圖 2022 11 18 下午12.58.09" class="wp-image-4907" srcset="https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-18-下午12.58.09-1024x712.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-18-下午12.58.09-300x209.png 300w, https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-18-下午12.58.09-768x534.png 768w, https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-18-下午12.58.09-1536x1068.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-18-下午12.58.09.png 1738w" sizes="(max-width: 1024px) 100vw, 1024px" title="投信買賣超選股策略｜時空序列分析的秘招｜停損怎麼設？ 30"></figure>



<p class="has-medium-font-size">最終結果發現停損在 4.5% 的報酬率與夏普率效果最好，但很明顯可發現這個策略無論停損參數射哪一組，max_drawdown (最大回撤)都很大，超過 -40%，雖然年化報酬有 29%，但實戰上可能會扛不住大波動。</p>



<h2>大盤時空</h2>



<p class="has-medium-font-size">拉出報酬率序列來看，可以發現投信跟屁蟲策略在多頭時很猛，但在 2022 空頭時可能會碰上瘋狂停損的局面，台股中期回檔的 2015、2018 年份，該策略也有不小回檔，可能要加上大盤濾網來判斷市況是否適合順勢追擊。</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="800" height="600" src="https://www.finlab.tw/wp-content/uploads/2022/11/newplot-33.png" alt="newplot 33" class="wp-image-4877" srcset="https://www.finlab.tw/wp-content/uploads/2022/11/newplot-33.png 800w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-33-300x225.png 300w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-33-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" title="投信買賣超選股策略｜時空序列分析的秘招｜停損怎麼設？ 31"></figure>



<p class="has-medium-font-size">於是我們可以考慮加上大盤濾網，由於投信策略屬於短線的策略，會偏好使用較靈敏的大盤指標：整體市場多空排列家數來判斷，想了解其他指標，可見「<a href="https://www.finlab.tw/index_filter/">4種均線指標 | 讓你在大盤崩崩前高歌離席!</a>」。可以發現雖然犧牲了報酬率，但回撤曲線大幅優化，年化報酬你要追求報酬率極大化，還是追求穩定度？</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="800" height="600" src="https://www.finlab.tw/wp-content/uploads/2022/11/newplot-37.png" alt="newplot 37" class="wp-image-4904" srcset="https://www.finlab.tw/wp-content/uploads/2022/11/newplot-37.png 800w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-37-300x225.png 300w, https://www.finlab.tw/wp-content/uploads/2022/11/newplot-37-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" title="投信買賣超選股策略｜時空序列分析的秘招｜停損怎麼設？ 32"></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="641" src="https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-18-下午1.00.30-1024x641.png" alt="截圖 2022 11 18 下午1.00.30" class="wp-image-4908" srcset="https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-18-下午1.00.30-1024x641.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-18-下午1.00.30-300x188.png 300w, https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-18-下午1.00.30-768x481.png 768w, https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-18-下午1.00.30.png 1388w" sizes="(max-width: 1024px) 100vw, 1024px" title="投信買賣超選股策略｜時空序列分析的秘招｜停損怎麼設？ 33"><figcaption>套入大盤濾網的策略表現</figcaption></figure>



<h2>結論</h2>



<p class="has-medium-font-size"><a href="https://colab.research.google.com/drive/1srVhlqC2MFuGF93EMVpFN1XScfefTrb8?usp=sharing" target="_blank" rel="noopener">colab 範例檔</a></p>



<p class="has-medium-font-size">是不是領略到「<a href="https://ai.finlab.tw/notebook/?uid=TJN4FDuqrwU8DML7DAjUYFIMutp2&amp;sid=%E6%8A%95%E4%BF%A1%E5%A4%A7%E5%93%A5%E8%B7%9F%E5%B1%81%E8%9F%B2&amp;cid=f0A8du1VqXMGVEa2u8si" target="_blank" rel="noopener">投信大哥跟屁蟲</a>」背後的秘密了呢？趕緊把學到的招式用在你的策略，找找最適合的換股週期和停損設定，學會時空序列分析的技巧，真的會有寶可夢等級大幅提升的感覺啊！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/time_series_analysis_of_investment_trust_strategy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4870</post-id>	</item>
		<item>
		<title>低波動本益成長比策略 &#124; MAE_MFE 機器學習選股</title>
		<link>https://www.finlab.tw/low_volatility_stratgy_by_mae_mfe_ml/</link>
					<comments>https://www.finlab.tw/low_volatility_stratgy_by_mae_mfe_ml/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Mon, 07 Nov 2022 23:33:00 +0000</pubDate>
				<category><![CDATA[AI看股票]]></category>
		<category><![CDATA[FinLab 量化平台]]></category>
		<category><![CDATA[VIP文章]]></category>
		<category><![CDATA[基本面分析]]></category>
		<category><![CDATA[技術面]]></category>
		<category><![CDATA[籌碼面]]></category>
		<category><![CDATA[選股策略]]></category>
		<category><![CDATA[Kmeans]]></category>
		<category><![CDATA[MAE_MFE]]></category>
		<category><![CDATA[PEG]]></category>
		<category><![CDATA[scikit-learn]]></category>
		<category><![CDATA[VIP限定]]></category>
		<category><![CDATA[低波動]]></category>
		<category><![CDATA[台股]]></category>
		<category><![CDATA[本益成長比]]></category>
		<category><![CDATA[機器學習]]></category>
		<category><![CDATA[決策樹]]></category>
		<category><![CDATA[混淆矩陣]]></category>
		<category><![CDATA[融資使用率]]></category>
		<category><![CDATA[進場波動]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=3687</guid>

					<description><![CDATA[有時我們有了初始策略輪廓，寫出來發現年化報酬率不錯，但夏普率不高、最大回撤率過大，若拿去實戰，持有歷程會遇上信心考驗，績效跳動範圍也大。有沒有辦法讓策略能夠報酬率更高、波動更低？

本篇範例會利用基礎的機器學習演算法 Kmeans 分群 mae_mfe 指標，製作決策樹使用的 Labels，優化原本的"本益成長比"策略，示範 scikit-learn 搭配 finlab 模組是多麼強大又簡單！]]></description>
										<content:encoded><![CDATA[
<p class="has-medium-font-size">有時我們有了初始策略輪廓，寫出來發現年化報酬率不錯，但夏普率不高、最大回撤率過大，若拿去實戰，持有歷程會遇上信心考驗，績效跳動範圍也大。有沒有辦法讓策略能夠報酬率更高、波動更低？ 但選股條件那麼多，單因子策略不停去 try error 組合很沒效率，這時就是&#8221;機器學習選股&#8221;的優勢，高效分析影響性大的特徵。<br>很多人對如何將機器學習應用到投資領域很有興趣，但實作要怎麼設計？用報酬率當Label真的好嗎？太難的演算法又看不懂或難消化，到底怎麼辦？<br>本篇範例會利用基礎的機器學習演算法 Kmeans 分群 mae_mfe 指標，製作決策樹使用的 Labels，優化原本的&#8221;本益成長比&#8221;策略，示範 scikit-learn 搭配 finlab 模組是多麼強大又簡單！</p>



<h2>選定待優化的策略</h2>



<p class="has-medium-font-size"><a href="https://www.finlab.tw/finlab-tw-stock-peg-strategy/">進化後的本益比｜本益成長比選股策略</a> 一文中用簡單的單因子回歸產生一個簡潔卻有效的選股策略。為了製造比較多的回測樣本，我們將之前的策略調成每月選取20檔標的。<br><strong>留意本篇的測試資料結果可能隨著資料集增長而產生差異，回測僅供參考。</strong><br>回測年化報酬率23%是不錯的水準，夏普率勉強優於大盤的0.9，但最大回撤率蠻高的，報酬率曲線震盪有點劇烈，好幾次回檔30%，實戰的持有過程肯定會備受考驗，可以加上哪些條件解決波動的問題呢？</p>



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

pe = data.get('price_earning_ratio:本益比')
rev = data.get('monthly_revenue:當月營收')
rev_ma3 = rev.average(3)
rev_ma12 = rev.average(12)
營業利益成長率 = data.get('fundamental_features:營業利益成長率').deadline()
peg = (pe/營業利益成長率)
cond1 = rev_ma3/rev_ma12 &gt; 1.1
cond2 = rev/rev.shift(1) &gt; 0.9

cond_all = cond1 &amp; cond2
result = peg*(cond_all)
position = result[result&gt;0].is_smallest(20).reindex(rev.index_str_to_date().index, method='ffill')


report = sim(position=position,name="本益成長比", fee_ratio=1.425/1000/3,upload=True,mae_mfe_window=30,position_limit=0.05)
report.display()</code></pre>



<figure class="wp-container-2 wp-block-gallery-1 wp-block-gallery has-nested-images columns-default is-cropped">
<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="645" data-id="4735" src="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.19.18-1024x645.png" alt="截圖 2022 10 30 下午9.19.18" class="wp-image-4735" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.19.18-1024x645.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.19.18-300x189.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.19.18-768x483.png 768w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.19.18.png 1390w" sizes="(max-width: 1024px) 100vw, 1024px" title="低波動本益成長比策略 | MAE_MFE 機器學習選股 34"></figure>
</figure>



<p class="has-medium-font-size"><br></p>



<h2>製作波動性 Labels </h2>



<p class="has-medium-font-size">給對的學習目標很重要！選擇比努力更重要！<br>一般機器學習選股策略使用報酬率做 label ，但演算法只會判斷報酬率的賺賠高低，並沒有辦法學習波動特性，若給定的 label 一開始就有所限制，再怎麼學也是無法跳脫只追求高報酬的風險。 </p>



<h3>MAE &amp; MFE</h3>



<p class="has-medium-font-size"><a href="https://www.finlab.tw/display_mae_mfe_analysis/">揭開策略的波動面紗｜MAE&amp;MFE分析圖組使用指南</a> 一文中解釋了 MAE 與 MFE 的可幫助我們分析策略波動和基本應用，我們可以輕鬆由FinLab模組中的<a href="https://doc.finlab.tw/reference/analysis/#finlab.analysis.Report.get_trades" target="_blank" rel="noopener"> <code>report.get_trades()</code></a> 取得策略標的持有歷程的 MAE 與 MFE 與其他交易資料。<a href="https://doc.finlab.tw/reference/analysis/#finlab.analysis.Report.display_mae_mfe_analysis" target="_blank" rel="noopener"> <code>report.display_mae_mfe_analysis()</code></a> 則可顯示波動率分析圖組，幫助我們觀察波動分佈。</p>



<figure class="wp-container-4 wp-block-gallery-3 wp-block-gallery has-nested-images columns-default is-cropped">
<figure class="wp-block-image size-large"><img loading="lazy" width="1200" height="1200" data-id="4729" src="https://www.finlab.tw/wp-content/uploads/2022/10/newplot-1.png" alt="newplot 1" class="wp-image-4729" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/newplot-1.png 1200w, https://www.finlab.tw/wp-content/uploads/2022/10/newplot-1-300x300.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/newplot-1-1024x1024.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/10/newplot-1-150x150.png 150w, https://www.finlab.tw/wp-content/uploads/2022/10/newplot-1-768x768.png 768w, https://www.finlab.tw/wp-content/uploads/2022/10/newplot-1-600x600.png 600w" sizes="(max-width: 1200px) 100vw, 1200px" title="低波動本益成長比策略 | MAE_MFE 機器學習選股 35"></figure>
</figure>



<p class="has-medium-font-size"><br>從上圖中的 GMFE / MAE 子圖可以發現波動分佈分為三塊：</p>



<ul class="has-medium-font-size"><li>最多聚集的一塊是在左下角小賺小賠的標的。</li><li>策略獲利的標的有些是「高 GMFE 低 MAE (往上高波動、往下低波動)」，給我們帶來極高獲利，這在趨勢策略較常出現，是我們想保留的。</li><li>虧損的標的大多是 「低 GMFE 高 MAE  (往下高波動、往上低波動)」的族群，有些標的持有紀錄還有 -50% 以上不利跌幅，這些會影響到策略的波動穩定度，是我們想淘汰的拖油瓶。</li></ul>



<p class="has-medium-font-size">若能用MAE &amp; MFE 取代報酬率作為 label，就可以讓模型學習判斷波動度與報酬率，若三個分群有特徵共通性，那之後做機器學習可能可找到有效分類 「高 GMFE 低 MAE 」 與 「低 GMFE 高 MAE」的特徵。</p>



<h3>Kmeans 分群</h3>



<p class="has-medium-font-size">如何界定「高 GMFE 低 MAE 」與 「低 GMFE 高 MAE 」 ？<br>這時<a href="https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html" target="_blank" rel="noopener">非監督學習演算法Kmeans</a>就可以粉墨登場，幫我們去做分群的動作，讓模型自動幫我們藉由 GMFE 低 MAE 兩項特徵分出三個群集。<br><strong>注意分群給的數字具有隨機性！</strong>比如「高 GMFE 低 MAE 」可能分類標註為1，下次執行跳為2。<br>在模型訓練前，因用有少數大幅獲利與多數群集分太開，先使用 <code>from sklearn.preprocessing import StandardScaler</code> 將資料做正規化，將資料傳入 Kmeans 分群，並將結果繪圖呈現分佈。<br>我們把預設值 y_pred 放入原本的 trade dataframe，設為 group，就完成 label 標記了，輸出結果可以發現 Kmeans 成功幫我們分出三個顏色區塊。</p>



<pre class="wp-block-code"><code lang="python" class="language-python">import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

from sklearn.preprocessing import StandardScaler

def scale_data(data):
    scaler = StandardScaler().fit(data)
    X_scaled = scaler.transform(data)
    return X_scaled

scale_mae = scale_data(trades['mae'].values.reshape(-1, 1))
scale_gmfe = scale_data(trades['gmfe'].values.reshape(-1, 1))


plt.figure(figsize = (8, 8))
random_state = 100
X = np.hstack((scale_mae,scale_gmfe))
y_pred = KMeans(n_clusters=3,random_state=random_state).fit_predict(X)

scatter = plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.legend(*scatter.legend_elements())
plt.title("mae_gmfe kmeans")
plt.xlabel("mae")
plt.ylabel("gmfe")</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" width="942" height="855" src="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.00.52.png" alt="截圖 2022 10 30 下午9.00.52" class="wp-image-4731" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.00.52.png 942w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.00.52-300x272.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.00.52-768x697.png 768w" sizes="(max-width: 942px) 100vw, 942px" title="低波動本益成長比策略 | MAE_MFE 機器學習選股 36"></figure>



<p class="has-medium-font-size">為了讓模型更專注於「高 GMFE 低 MAE 」與 「低 GMFE 高 MAE 」 的學習，只保留 group 為1、2 (藍綠點) 的部分，我們把白點的區塊視為不影響大局的雜訊，藍色和綠色的點才是影響策略波動的關鍵</p>



<pre class="wp-block-code"><code lang="python" class="language-python">cluster_trades = trades.copy()
cluster_trades['group'] = y_pred
cluster_trades['stock_id'] = cluster_trades['stock_id'].apply(lambda s:s[:s.index(' ')])
ana_targets = cluster_trades[cluster_trades['group'].isin([1,2])]
ana_targets = ana_targets.reset_index().set_index(['stock_id', 'entry_sig_date'])</code></pre>



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



<h2>決策樹-探索低波動因子</h2>



<p class="has-medium-font-size">標注完了 label 後，就可以進行下一步，尋找有沒有選股條件能辨識label ，這就要換監督式學習登場。這部分的程式主要參考 <a href="https://hahow.in/courses/5b9d3a6dca498a001e917383/discussions" target="_blank" rel="noopener">Python 理財：打造自己的 AI 股票理專課程</a>  單元 3-7-隨機森林選股策略實作，因資料量級較小，把隨機森林換成決策樹。</p>



<h3>製作 Features</h3>



<p class="has-medium-font-size">將想測試的資料或可能的低波動因子並成 dataframe 準備進入模型訓練，特徵可以使用 <a href="https://ai.finlab.tw/database" target="_blank" rel="noopener">Finlab 資料庫</a> 取得，並將資料以 2019 年為分界點，切成訓練及測試資料集。</p>



<figure class="wp-block-image"><img alt=""/></figure>



<h3>模型測試結果</h3>



<p class="has-medium-font-size">將資料集套入 sklearn 決策樹，驗證目標為label=1的集群(低 GMFE 高 MAE )，若找到機率越高，能有效躲避波動。<br>測試結果放入 <a href="https://www.ycc.idv.tw/confusion-matrix.html" target="_blank" rel="noopener">confusion-matrix</a> 驗證結果，抓出「低 GMFE 高 MAE 」的準確度達75%，預測45(34+11) 次內有34次正確。<br>指標意義詳見～<a href="https://medium.com/nlp-tsupei/precision-recall-f1-score%E7%B0%A1%E5%96%AE%E4%BB%8B%E7%B4%B9-f87baa82a47" target="_blank" rel="noopener">Precision, Recall, F1-score簡單介紹</a>。<br></p>



<pre class="wp-block-code"><code lang="python" class="language-python">import pandas as pd
from sklearn import metrics
from sklearn.tree import DecisionTreeClassifier

label = ana_targets[ana_targets['mae']&gt; ana_targets['gmfe']]['group'].values[0]
features_name = list(features.keys())
cf = DecisionTreeClassifier(max_depth=3)
cf.fit(dataset_train[features_name], dataset_train['group'] ==label)


prediction = cf.predict(dataset_test[features_name])
confusion_matrix = metrics.confusion_matrix(dataset_test['group'] == label, prediction)
tn, fp, fn, tp = confusion_matrix.ravel()
confusion_matrix = np.array([[tp, fp],[fn, tn]])


print('f1 score:',metrics.f1_score(dataset_test['group'] == label, prediction))
print('precision score(p):',metrics.precision_score(dataset_test['group'] == label, prediction))
print('recall score(p):',metrics.recall_score(dataset_test['group'] == label, prediction))


plt.figure(figsize=(10, 6))
sns.set(font_scale=2)

ax = sns.heatmap(confusion_matrix, annot=True, cmap='Blues')
ax.set_title('Confusion Matrix with labels\n\n');
ax.set_xlabel('Actual Values')
ax.set_ylabel('Predicted Values');

## Ticket labels - List must be in alphabetical order
ax.xaxis.set_ticklabels(['True','False'])
ax.yaxis.set_ticklabels(['True','False'])

## Display the visualization of the Confusion Matrix.
plt.show()
</code></pre>



<figure class="wp-container-6 wp-block-gallery-5 wp-block-gallery has-nested-images columns-default is-cropped">
<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="954" data-id="4866" src="https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-13-下午7.16.34-1024x954.png" alt="截圖 2022 11 13 下午7.16.34" class="wp-image-4866" srcset="https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-13-下午7.16.34-1024x954.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-13-下午7.16.34-300x280.png 300w, https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-13-下午7.16.34-768x716.png 768w, https://www.finlab.tw/wp-content/uploads/2022/11/截圖-2022-11-13-下午7.16.34.png 1422w" sizes="(max-width: 1024px) 100vw, 1024px" title="低波動本益成長比策略 | MAE_MFE 機器學習選股 37"></figure>
</figure>



<p></p>



<h3>因子重要性</h3>



<p class="has-medium-font-size"><code>from sklearn.tree import plot_tree</code>  可繪製出決策樹的機器學習選股決策流程，最上頭的X[8]為&#8217;融資使用率&#8217;，使用33.6當數值分界點，X序列等同features_name排序。<br><code>cf.feature_importances_</code>  可得知重要因子的影響性分數。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="751" src="https://www.finlab.tw/wp-content/uploads/2022/10/下載-1-1024x751.png" alt="下載 1" class="wp-image-4733" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/下載-1-1024x751.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/10/下載-1-300x220.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/下載-1-768x563.png 768w, https://www.finlab.tw/wp-content/uploads/2022/10/下載-1.png 1130w" sizes="(max-width: 1024px) 100vw, 1024px" title="低波動本益成長比策略 | MAE_MFE 機器學習選股 38"><figcaption>決策樹分類流程</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="409" src="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.10.47-1024x409.png" alt="截圖 2022 10 30 下午9.10.47" class="wp-image-4734" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.10.47-1024x409.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.10.47-300x120.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.10.47-768x307.png 768w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.10.47-1536x613.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.10.47.png 2034w" sizes="(max-width: 1024px) 100vw, 1024px" title="低波動本益成長比策略 | MAE_MFE 機器學習選股 39"></figure>



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



<h3>優化測試</h3>



<p class="has-medium-font-size">參考 features_name 、 plot_tree 設定條件數值，加入條件到原本的策略，檢測能否優化。<br>檔數、部位上限、週期設定不變，只加上選股條件。數據會因資料集擴增而有差異，僅供參考。</p>



<h4 class="has-medium-font-size">低融資使用率</h4>



<p class="has-medium-font-size">加入 (融資使用率 &lt;= 34) 條件。</p>



<figure class="wp-container-8 wp-block-gallery-7 wp-block-gallery has-nested-images columns-default is-cropped">
<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="690" data-id="4737" src="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.26.22-1024x690.png" alt="截圖 2022 10 30 下午9.26.22" class="wp-image-4737" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.26.22-1024x690.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.26.22-300x202.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.26.22-768x518.png 768w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.26.22.png 1383w" sizes="(max-width: 1024px) 100vw, 1024px" title="低波動本益成長比策略 | MAE_MFE 機器學習選股 40"></figure>
</figure>



<h4 class="has-medium-font-size">低進場波動率</h4>



<p class="has-medium-font-size">加入 ( entry_volatility &lt;= 0.032) 條件。</p>



<figure class="wp-container-10 wp-block-gallery-9 wp-block-gallery has-nested-images columns-default is-cropped">
<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="701" data-id="4738" src="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.29.17-1024x701.png" alt="截圖 2022 10 30 下午9.29.17" class="wp-image-4738" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.29.17-1024x701.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.29.17-300x205.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.29.17-768x526.png 768w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.29.17.png 1385w" sizes="(max-width: 1024px) 100vw, 1024px" title="低波動本益成長比策略 | MAE_MFE 機器學習選股 41"></figure>
</figure>



<h4 class="has-medium-font-size"> </h4>



<h4 class="has-medium-font-size">低融資使用率 ＆ 低進場波動率<br></h4>



<figure class="wp-container-12 wp-block-gallery-11 wp-block-gallery has-nested-images columns-default is-cropped">
<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="692" data-id="4736" src="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.24.29-1024x692.png" alt="截圖 2022 10 30 下午9.24.29" class="wp-image-4736" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.24.29-1024x692.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.24.29-300x203.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.24.29-768x519.png 768w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-30-下午9.24.29.png 1387w" sizes="(max-width: 1024px) 100vw, 1024px" title="低波動本益成長比策略 | MAE_MFE 機器學習選股 42"></figure>
</figure>



<h4 class="has-medium-font-size"><br></h4>



<h3>回測分析</h3>



<p class="has-medium-font-size">單因子中「低融資使用率」效果最強，明顯提升「夏普率」，「最大回撤率」則變動不大。可能代表原本的策略蠻多虧損或大幅低檔震盪的源在選到高融資使用率的股票，這類股票通常是市場的大波動熱門股，持有者偏向短線操作，很不穩定。<br><br>「低進場波動度」雖然讓「年化報酬率」減少，但是「夏普率」和「最大回撤率」提升效果比「低融資使用率」更優。低進場波動度代表買入時波動穩定，比較不會碰上已漲一大段的飛天股之後的乖離過大修正，若之後要加上停損條件，也比較不會在持有初期頻繁停損被洗出場。<br><br>「低融資使用率」若與「低進場波動度」因子結合，「夏普率」 從原先策略的 0.9 拉升到1.5，「最大回撤率」降到 -17% 的水準，明顯優化回撤波動。幾乎每一年回測都是正報酬穩定度明顯提升。</p>



<h2>結論</h2>



<p class="has-medium-font-size">這樣的優化策略思路是不是很有趣呢？藉由多元 label 的設定，讓機器學習能考慮多方面去強化策略，只用 scikit learn 最基本的機器學習演算法，非監督式學習與監督式的雙流分工，就能讓優化策略的流程省時省力，趕緊來試試用機器學習選股讓策略更上一層樓吧～<br><a href="https://colab.research.google.com/drive/1Sag1kIoHY2TDXJWWbugRIz1Mq8BcCi2f?usp=sharing" target="_blank" rel="noopener">colab 範例檔</a><br><a href="https://ai.finlab.tw/strategyview/?uid=TJN4FDuqrwU8DML7DAjUYFIMutp2&amp;sid=%E4%BD%8E%E6%B3%A2%E5%8B%95%E6%9C%AC%E7%9B%8A%E6%88%90%E9%95%B7%E6%AF%94" target="_blank" rel="noopener">低波動本益成長比策略部署</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/low_volatility_stratgy_by_mae_mfe_ml/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3687</post-id>	</item>
		<item>
		<title>國安基金與庫藏股應用教學｜政府軍急了嗎？</title>
		<link>https://www.finlab.tw/treasury_stock_national_security_fund/</link>
					<comments>https://www.finlab.tw/treasury_stock_national_security_fund/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Mon, 17 Oct 2022 05:37:42 +0000</pubDate>
				<category><![CDATA[籌碼面]]></category>
		<category><![CDATA[FinLab 量化平台]]></category>
		<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[VIP文章]]></category>
		<category><![CDATA[pandas]]></category>
		<category><![CDATA[Plotly]]></category>
		<category><![CDATA[國安基金]]></category>
		<category><![CDATA[庫藏股]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=4684</guid>

					<description><![CDATA[2022 可說是亂世風雲，中國防疫政策、俄烏戰爭、通膨、美國大幅升息、企業庫存暴增...等等利空連發重挫市場，許多市場指數到 2022年10月都回檔30%，台股也在護國神山走山下，從 18000 點下殺到 13000 點以下，明顯跌入熊市。
令人不安的是救市神主牌國安基金在 2022/7/12 已進場護盤，卻仍止不住跌勢，被質疑是否過早進場送頭？如果連最後一張王牌都無法扛住，那確實麻煩大了。
本篇文章將用 Finlab 模組 與 Pandas 實作 國安基金與庫藏股 的簡易趨勢分析，讓你更加熟悉 Pandas 各種財經時序資料處理的手法。最後輸出的結果，我們會看到國安基金這次是否和以往不一樣？]]></description>
										<content:encoded><![CDATA[
<p class="has-medium-font-size">2022 可說是亂世風雲，中國防疫政策、俄烏戰爭、通膨、美國大幅升息、企業庫存暴增&#8230;等等利空連發重挫市場，許多市場指數到 2022年10月都回檔30%，台股也在護國神山走山下，從 18000 點下殺到 13000 點以下，明顯跌入熊市。<br>令人不安的是救市神主牌國安基金在 2022/7/12 已進場護盤，卻仍止不住跌勢，被質疑是否過早進場送頭？如果連最後一張王牌都無法扛住，那確實麻煩大了。<br>本篇文章將用 Finlab 模組 與 Pandas 實作 <strong>國安基金與庫藏股</strong> 的簡易趨勢分析，讓你更加熟悉 Pandas 各種財經時序資料處理的手法。最後輸出的結果，我們會看到國安基金這次是否和以往不一樣？</p>



<h2>庫藏股資料處理</h2>



<p class="has-medium-font-size">透過FinLab資料庫，我們可取得庫藏股資訊，在之前的「<a href="https://www.finlab.tw/treasury-stock-signal/">庫藏股實施家數｜崩盤後的長線抄底訊號｜左側交易</a>」文章中有相關實作，不過上篇是用「董事會決議庫藏股的日期」當訊號，這次換示範另一種寫法，使用「庫藏股實施期間」來當訊號，更能精準反應當下有在護盤的公司大概的總家數。</p>



<h3>程式範例</h3>



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

預定買回期間_起 = data.get('treasury_stock:預定買回期間-起').unstack()
預定買回期間_迄 = data.get('treasury_stock:預定買回期間-迄').unstack()
# date 為董事會決議庫藏股日期
treasury_stock = pd.DataFrame({'預定買回期間_起':預定買回期間_起, '預定買回期間_迄':預定買回期間_迄}).dropna(how='all')
treasury_stock.index.names = ['stock_id', 'date']

# 產生實施期間序列
treasury_stock['period'] = [pd.date_range(s,e).to_list() for s,e in zip(treasury_stock['預定買回期間_起'],treasury_stock['預定買回期間_迄'])] 

# 使用 explode 展開資料
treasury_stock_period = treasury_stock.explode('period')
treasury_stock_period = treasury_stock_period[['period']]

# 計算每日預計實施庫藏股的公司家數
treasury_count = treasury_stock_period.groupby(['period'])['period'].count()
benchmark = data.get('benchmark_return:發行量加權股價報酬指數')

# 日期索引對應加權大盤報酬指數
treasury_count = treasury_count.reindex(benchmark.index).fillna(0)
treasury_count.plot()</code></pre>



<h3>程式說明</h3>



<ul class="has-medium-font-size"><li>組裝資料<br>將「預定買回期間起迄」兩份資料使用 <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.unstack.html" target="_blank" rel="noopener">unstack</a> 方法 將格式從 pivot 轉換成 Series，再組裝成 DataFrame。</li><li>產生庫藏股實施日日期序列<br>將開始與結束日期傳入 <a href="https://pandas.pydata.org/docs/reference/api/pandas.date_range.html" target="_blank" rel="noopener">date_range</a> 方法，得到日期序列。</li><li>統計每日預計實施庫藏股的公司家數<br>在使用 <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html" target="_blank" rel="noopener">groupby </a>與 count 統計每日總家數前，要先使用 <a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.explode.html" target="_blank" rel="noopener">explode</a> 方法展開上一個步驟得到的日期資料。</li><li>日期索引重置<br>為了等一下畫圖顯示趨勢，將庫藏股家數趨勢的日期對應加權大盤報酬指數，讓兩條序列長度一致，方便呈現。</li><li>簡易繪圖檢視<br>最後使用dataframe內建的 plot 方法，呈現剛剛整理的數據<br><img loading="lazy" width="375" height="252" class="wp-image-4685" style="width: 150px;" src="https://www.finlab.tw/wp-content/uploads/2022/10/庫存股簡易趨勢.png" alt="庫存股簡易趨勢" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/庫存股簡易趨勢.png 375w, https://www.finlab.tw/wp-content/uploads/2022/10/庫存股簡易趨勢-300x202.png 300w" sizes="(max-width: 375px) 100vw, 375px" title="國安基金與庫藏股應用教學｜政府軍急了嗎？ 43"><br></li></ul>



<h2>取得國安基金資料</h2>



<p class="has-medium-font-size">現在 FinLab 的資料庫可以取得國安基金的進出場基本資訊了，詳見<a href="https://ai.finlab.tw/database/#national_security_fund" target="_blank" rel="noopener">資料庫</a>說明。<br>簡單一行就能取出囉 <code>data.get('national_security_fund')</code><br>目前國安基金共啟動8次。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="520" src="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-17-上午11.44.27-1024x520.png" alt="截圖 2022 10 17 上午11.44.27" class="wp-image-4686" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-17-上午11.44.27-1024x520.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-17-上午11.44.27-300x152.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-17-上午11.44.27-768x390.png 768w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-17-上午11.44.27-1536x780.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/10/截圖-2022-10-17-上午11.44.27.png 1585w" sizes="(max-width: 1024px) 100vw, 1024px" title="國安基金與庫藏股應用教學｜政府軍急了嗎？ 44"></figure>



<h2>趨勢繪圖</h2>



<p class="has-medium-font-size">將國安基金實施期間與庫藏股趨勢疊合，比較兩者訊號時間點。</p>



<h3>程式範例</h3>



<pre class="wp-block-code"><code lang="python" class="language-python">import plotly.graph_objects as go
from plotly.subplots import make_subplots

# Create figure with secondary y-axis
fig = make_subplots(specs=[[{"secondary_y": True}]])

# Add traces
fig.add_trace(
    go.Bar(x=treasury_count.index, y=treasury_count.values, marker_color='navy',name="庫藏股實施家數"),
    secondary_y=False,
)

fig.update_traces(marker_color = 'rgba(0,0,250, 0.5)',
                  marker_line_width = 0,
                  selector=dict(type="bar"))

# 大盤指數
fig.add_trace(
    go.Scatter(x=benchmark.index, y=benchmark['發行量加權股價報酬指數'],line = dict(color = '#2C191B'), name="發行量加權股價報酬指數"),
    secondary_y=True,
)

# 國安基金實施期間
for i,row in national_security_fund.iterrows():
    fig.add_vrect(x0=row['啟動時間'], x1=row['退場時間'], 
                  annotation_text=row['時空背景'], annotation_position="top left",
                  fillcolor="green", opacity=0.25, line_width=0)
    
# Add figure title
fig.update_layout(
        title={
            'text': "庫藏股與國安基金護盤趨勢",
            'x': 0.49,
            'y': 0.9,
            'xanchor': 'center',
            'yanchor': 'top'},
        legend=dict(
            orientation="h",
            yanchor="bottom",
            y=1.02,
            xanchor="right",
            x=0.3
        )
)

# Set x-axis title
fig.update_xaxes(title_text="date",
                 rangeselector=dict(
                     buttons=list([
                         dict(count=1,
                              label="1y",
                              step="year",
                              stepmode="backward"),
                         dict(count=3,
                              label="3y",
                              step="year",
                              stepmode="backward"),
                         dict(count=5,
                              label="5y",
                              step="year",
                              stepmode="backward"),
                         dict(count=10,
                              label="10y",
                              step="year",
                              stepmode="backward"),
                         dict(step="all")
                     ])
                 ),
                 rangeslider=dict(
                     visible=True
                 ),
                 type="date")



# Set y-axes titles
fig.update_yaxes(title_text="&lt;b>count&lt;/b>", secondary_y=False)
fig.update_yaxes(title_text="&lt;b>benchmark&lt;/b>", secondary_y=True,showgrid=False)
fig.show()</code></pre>



<h2>救市趨勢分析</h2>



<h3>政府救市三步</h3>



<p class="has-medium-font-size">通常政府救市的步驟如下</p>



<p class="has-medium-font-size">1.鼓勵企業實施庫藏股</p>



<p class="has-medium-font-size">2.限空令 or 找法人喝咖啡</p>



<p class="has-medium-font-size">3.國安感冒糖漿(國家金融安定基金)</p>



<p class="has-medium-font-size">庫藏股對政府最省事，因為不用自己出一毛錢就可能有效果，當然別人先動手最好。<br>企業內部人往往對自家公司價值最了解，有些又有質押股票面臨市值下修的壓力。一般來說，庫藏股這類回燒公司資金的事，經營者多會考量價格是否合理(進入低檔)才買入。<br></p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="418" src="https://www.finlab.tw/wp-content/uploads/2022/10/newplot-18-1024x418.png" alt="newplot 18" class="wp-image-4688" srcset="https://www.finlab.tw/wp-content/uploads/2022/10/newplot-18-1024x418.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/10/newplot-18-300x122.png 300w, https://www.finlab.tw/wp-content/uploads/2022/10/newplot-18-768x313.png 768w, https://www.finlab.tw/wp-content/uploads/2022/10/newplot-18-1536x627.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/10/newplot-18.png 1960w" sizes="(max-width: 1024px) 100vw, 1024px" title="國安基金與庫藏股應用教學｜政府軍急了嗎？ 45"></figure>



<p class="has-medium-font-size"><br><strong>從圖表發現，前幾次國安基金進場前，庫藏股家數(藍柱)都會先明顯變多，內部人護盤也撐不住了，國家隊才會進場。</strong><br>但這次很不一樣，雖然政府在7月初已經 <a href="https://www.gvm.com.tw/article/94817" target="_blank" rel="noopener">鼓勵企業實施庫藏股</a>，卻沒啥公司響應，於是殺盤持續。即使現在跌多，庫藏股仍靜悄悄，是不是股價不到公司派目標價 (前幾年噴太多)？還是公司派看到未來景氣風險，要保留資金過冬？ <br>還沒等到公司派進場，政府軍這次等不及了，先啟動國安基金，發現還是抵擋不住殺盤，才再祭出「<a href="https://www.storm.mg/lifestyle/4560341" target="_blank" rel="noopener">限空令</a>」，SOP似乎和以前不一樣，就怕大招放完後仍抵擋不住，這次沒庫藏股先擋第一線，要自己多扛一點。</p>



<p class="has-medium-font-size">如果政府招式出盡後，還是繼續殺呢？那很可能國安基金這個六連勝的底部訊號也會失效，讓我們繼續看下去 ~ </p>



<p class="has-medium-font-size">下一篇來教大家怎麼將庫藏股和國安基金進出場化作大盤風險濾網加入策略。</p>



<h2>程式範例檔</h2>



<p class="has-medium-font-size"><a href="https://drive.google.com/file/d/1MIVKDhqjnWvjufa7I_VEbTSarX2ips0P/view?usp=sharing" target="_blank" rel="noopener">colab連結</a><br><br>註冊 FinLab 量化平台 VIP 才能取得全時段數據喔。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/treasury_stock_national_security_fund/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4684</post-id>	</item>
		<item>
		<title>大盤融資維持率｜融資融券主力板塊Treemap｜DashBoard製作教學(4)</title>
		<link>https://www.finlab.tw/%e8%9e%8d%e8%b3%87%e8%9e%8d%e5%88%b8%e4%b8%bb%e5%8a%9b%e6%9d%bf%e5%a1%8atreemap%e5%a4%a7%e7%9b%a4%e8%9e%8d%e8%b3%87%e7%b6%ad%e6%8c%81%e7%8e%87/</link>
					<comments>https://www.finlab.tw/%e8%9e%8d%e8%b3%87%e8%9e%8d%e5%88%b8%e4%b8%bb%e5%8a%9b%e6%9d%bf%e5%a1%8atreemap%e5%a4%a7%e7%9b%a4%e8%9e%8d%e8%b3%87%e7%b6%ad%e6%8c%81%e7%8e%87/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Sun, 22 May 2022 01:32:03 +0000</pubDate>
				<category><![CDATA[籌碼面]]></category>
		<category><![CDATA[PYTHON財經]]></category>
		<category><![CDATA[生產力]]></category>
		<category><![CDATA[KOL]]></category>
		<category><![CDATA[treemap]]></category>
		<category><![CDATA[台股]]></category>
		<category><![CDATA[融券]]></category>
		<category><![CDATA[融資]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=3580</guid>

					<description><![CDATA[融資融券板塊地圖，KOL觀點實做。]]></description>
										<content:encoded><![CDATA[
<h2>投資靈感的魔鏡</h2>



<p class="has-medium-font-size">現在投資方面的KOL媒體很多，遍佈在Blog、Podcast、YT、付費訂閱平臺等媒體。很多高手透露多元視角的論點，但也很多怪力亂神的老輸講得天花亂墜，他們究竟是不是有憑有據？還是自憑經驗或印象推導？學會程式量化投資後，你就有能力用數據去驗證專家說法，不會人言亦云，看他們禁不禁得起考驗，甚至從他們的觀點延伸出更多應用靈感，光憑這個能力，你就能打敗不用腦思考的眾多韭菜。</p>



<h2>股癌節目的啟示</h2>



<p class="has-medium-font-size">股癌是國內投資主題的前幾名podcast，會有那麼多人追是有原因的，我喜歡他的接地氣的實戰內容、流暢口條、只有幹話沒有雞湯的直白性格。在比特幣Pizza日附近，市場還在波濤洶湧，看盤還不如躺在沙發，來片Pizza配啤酒和股癌的節目。</p>



<p class="has-medium-font-size"><a href="https://open.spotify.com/show/1zWxx5pKk0XBEzMupVC7UZ?fbclid=IwAR0KdsEJVbqKBj8pyLDr9r3RWcYqzvHEmku_26GJa3mEYCYhBb1znZ4oxM0" target="_blank" rel="noopener">股癌 Gooaye EP246</a>提到&#8221;小台期貨多空比和&#8221;大盤融資維持率&#8221;過往的散戶反指標特性失準的問題。內資大戶開始在小台佔比變高，散戶賠錢逐漸遠離市場，導致小台過往做錯方向的凹單特性不見。大盤融資維持率掉到150上下的偏低水位後真的洗盡籌碼讓融資斷頭了嗎？為什麼大盤融資維持率好沒跟著大盤繼續往下掉？股癌解釋因為這次海運貨櫃三雄融資餘額佔整體大盤偏高，這族群若沒崩，融資維持率不容易再往下，進而連動其他板塊的融資籌碼為補維持率而下殺。</p>



<h2>驗證大神觀點</h2>



<p class="has-medium-font-size">身為量化數據派的小編，是懷疑論者，一切都要盡可能有數據佐證，才覺得有說服力。<br>加上行動派性格，Pizza吃到一半，覺得股癌像法不錯，馬上從慵懶的沙發爬起來，打開電腦，使用FinLab模組調數據來映證一下大神說法。</p>



<h3>Treemap應用</h3>



<p class="has-medium-font-size">treemap是我很喜歡的財經資料視覺化版型，可用面積、顏色深淺比較不同維度的資料，最適合表達整體市場的複雜數據。將FinLab的treemap相關function微調，套入融資融券資料，就能快速生成啦！<a href="https://www.finlab.tw/dashboard2-plotly-treemap/">Treemap程式教學看這篇～</a></p>



<h3>融資板塊圖</h3>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="512" src="https://www.finlab.tw/wp-content/uploads/2022/05/newplot-8-1024x512.png" alt="newplot 8" class="wp-image-3581" srcset="https://www.finlab.tw/wp-content/uploads/2022/05/newplot-8-1024x512.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/05/newplot-8-300x150.png 300w, https://www.finlab.tw/wp-content/uploads/2022/05/newplot-8-768x384.png 768w, https://www.finlab.tw/wp-content/uploads/2022/05/newplot-8-1536x768.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/05/newplot-8.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" title="大盤融資維持率｜融資融券主力板塊Treemap｜DashBoard製作教學(4) 46"><figcaption>融資板塊圖</figcaption></figure>



<p class="has-medium-font-size">融資意思是借錢來投資，可視為內資資金集火的來源，通常融資市值大 (融資投入金額可能相對高)、融資使用率高的標的震盪都很大，融資投資人透過槓桿在這些標的內廝殺，若操作的好，就能享受到融資好處，短期內的到大幅獲利</p>



<p class="has-medium-font-size">從融資板塊圖(板塊面積大小=融資餘額張數*市值，顏色深淺=融資使用率)，發現長榮、陽明融資市值確實佔比高，股癌說的沒錯。更細部分析，上市融資集中在半導體、航運、電子零件、面板。櫃買的部分集中在半導體、電子零件、生技、網通、其他電子，融資使用率明顯是上櫃比上市高，櫃買市場更容易被融資所影響。</p>



<h3>融券板塊圖</h3>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="512" src="https://www.finlab.tw/wp-content/uploads/2022/05/newplot-9-1024x512.png" alt="newplot 9" class="wp-image-3582" srcset="https://www.finlab.tw/wp-content/uploads/2022/05/newplot-9-1024x512.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/05/newplot-9-300x150.png 300w, https://www.finlab.tw/wp-content/uploads/2022/05/newplot-9-768x384.png 768w, https://www.finlab.tw/wp-content/uploads/2022/05/newplot-9-1536x768.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/05/newplot-9.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" title="大盤融資維持率｜融資融券主力板塊Treemap｜DashBoard製作教學(4) 47"><figcaption>融券板塊圖</figcaption></figure>



<p class="has-medium-font-size">融券是空方勢力的指標，跟融資的熱門標的一樣，常是短期大震盪的標的。融資和融券常在熱門標的同步升溫，此時就看哪方做對方向，高券資比、股價持續暴漲就容易形成空軍死亡螺旋的尬空行情，高融資使用率、股價持續大跌就容易形成多軍死亡螺旋的斷頭潮。</p>



<p class="has-medium-font-size">從融券板塊圖(板塊面積大小=融券餘額張數*市值，顏色深淺=融券使用率)，發現航運貨櫃三雄融券市值佔比也偏高，IC設計熱門股也是空軍著墨所在。上市融券集中在半導體、航運、電子零件、化工。其中化工的融券使用率很高。櫃買的融券資金集中在半導體、光電、電子零件、網通、其他電子，其中很大一塊集火在近期的電子指標股:元太。融券使用率上則在半導體、農業科技、網通、電腦週邊、觀光上有明顯偏高比例。</p>



<h2>結論</h2>



<p class="has-medium-font-size">融資券主力集中在櫃買市場，持有以上族群的比例若偏高，小心被籌碼混戰的颱風尾掃到。<br>透過專家論點結合量化分析的技巧，馬上又得到一個不錯的應用，若能每天累積一個這樣的成果，一年下來，肯定在投資、思考、程式能力有所進步。<br><br>你也很常看投資KOL的內容嗎？趕緊用程式來實作、驗證他們的想法，若有不錯的想法想實證，但開發不出來，也歡迎分享給我們知道，幫你、教你來實作～</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/%e8%9e%8d%e8%b3%87%e8%9e%8d%e5%88%b8%e4%b8%bb%e5%8a%9b%e6%9d%bf%e5%a1%8atreemap%e5%a4%a7%e7%9b%a4%e8%9e%8d%e8%b3%87%e7%b6%ad%e6%8c%81%e7%8e%87/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3580</post-id>	</item>
		<item>
		<title>大盤融資維持率｜Plotly-多重圖組｜DashBoard製作教學(3)</title>
		<link>https://www.finlab.tw/plotly-%e5%a4%9a%e9%87%8d%e5%9c%96%e7%b5%84%e8%9e%8d%e8%b3%87%e7%b6%ad%e6%8c%81%e7%8e%87dashboard%e8%a3%bd%e4%bd%9c%e6%95%99%e5%ad%b83/</link>
					<comments>https://www.finlab.tw/plotly-%e5%a4%9a%e9%87%8d%e5%9c%96%e7%b5%84%e8%9e%8d%e8%b3%87%e7%b6%ad%e6%8c%81%e7%8e%87dashboard%e8%a3%bd%e4%bd%9c%e6%95%99%e5%ad%b83/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Wed, 18 May 2022 08:03:12 +0000</pubDate>
				<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[生產力]]></category>
		<category><![CDATA[籌碼面]]></category>
		<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[Plotly]]></category>
		<category><![CDATA[大盤融資維持率]]></category>
		<category><![CDATA[資料視覺化]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=3560</guid>

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



<h2></h2>



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



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



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



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

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

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



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



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



<h3>目標結果</h3>



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



<h3>程式範例</h3>



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

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

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


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

                                    )
                    )

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

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

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

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


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

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


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

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


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

# Add figure title


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

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



<h3>多重子圖</h3>



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



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



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



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



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



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



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



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



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



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



<h3>layout設定</h3>



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



<h3>結語</h3>



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



<h3><a href="https://drive.google.com/file/d/19XQAi4_K9onxcxOszAytJ9X8bsKYCrzr/view?usp=sharing" target="_blank" rel="noopener">colab程式範例</a></h3>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/plotly-%e5%a4%9a%e9%87%8d%e5%9c%96%e7%b5%84%e8%9e%8d%e8%b3%87%e7%b6%ad%e6%8c%81%e7%8e%87dashboard%e8%a3%bd%e4%bd%9c%e6%95%99%e5%ad%b83/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3560</post-id>	</item>
		<item>
		<title>大盤融資維持率｜地板指標幫你搶長線反彈｜0050擇時策略優化？</title>
		<link>https://www.finlab.tw/mt_rate_strategy/</link>
					<comments>https://www.finlab.tw/mt_rate_strategy/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Sun, 13 Jun 2021 14:45:56 +0000</pubDate>
				<category><![CDATA[大盤漲跌]]></category>
		<category><![CDATA[籌碼面]]></category>
		<category><![CDATA[台股]]></category>
		<category><![CDATA[融資]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=2715</guid>

					<description><![CDATA[PTT股板每天都會update市場融資進出統計資料，當大盤漲又融資增時，鄉民高喊“神鬼主力融資進場”。大盤漲又 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>PTT股板每天都會update市場融資進出統計資料，當大盤漲又融資增時，鄉民高喊“神鬼主力融資進場”。大盤漲又融資減時，鄉民高喊“融資主力跑路”。大盤跌又融資減時，鄉民期待“殺出汁，我要看到血流成河”。大盤跌又融資增時，鄉民又酸酸“傻多融資抄底攤平”。</p>



<p>問題是鄉民喊半天，對交易有什麼實質幫助？大盤融資餘額到底要怎麼看才能抓買賣點？本篇文章簡述融資維持率指標的應用，希望理出一條思路，另外探討能否用於0050的擇時操作，績效會比長期持有0050好嗎？</p>



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



<p>計算公式：<strong>融資維持率=股票現值 /&nbsp;融資金額</strong></p>



<p>舉例：買進100元的股票，融資成數6成，<strong>融資維持率</strong>=100/60=1.67</p>



<p>1.67可視為融資維持率初始值，104年後，台股漲跌幅從7%調整到10%，信用交易整戶擔保維持率自104年5月4日起從120%調整為130%。整戶擔保維持率意思是若股票現值小於“帳戶融資金額*1.3倍”，投資人若不補融資保證金，將面臨斷頭危機。舉例：買進100元的股票，融資成數6成，股價跌破60*11.3=78元(下跌22%約連兩根跌停)，將面臨營業員margin call(融資追繳令)。主管機關限縮融資維持率，目的是在於提醒投資人在漲跌幅放大後，要更注意風險。</p>



<h3>大盤融資維持率(mt_rate)</h3>



<p>將<strong>融資維持率</strong>應用到大盤可使用下列公式計算：</p>



<p><strong>市場個股融資張數*股價現值/整體市場融資餘額</strong></p>



<p>由此可得知整體融資股票在市場的存活狀況，mt_rate高於167%，代表融資有賺錢，低於則代表遇到套牢情況。統計2009-2021年現今，mt_rate約處於1.3-1.9間分布，73%的天數低於167%水位，多數時候融資是套牢的。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="375" height="248" src="https://www.finlab.tw/wp-content/uploads/2021/06/融資維持率分佈.png" alt="融資維持率分佈" class="wp-image-2716" srcset="https://www.finlab.tw/wp-content/uploads/2021/06/融資維持率分佈.png 375w, https://www.finlab.tw/wp-content/uploads/2021/06/融資維持率分佈-300x198.png 300w" sizes="(max-width: 375px) 100vw, 375px" title="大盤融資維持率｜地板指標幫你搶長線反彈｜0050擇時策略優化？ 49"></figure>



<p>mt_rate變化與加權報酬指數變化無明顯正相關。不能直接當指標使用。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="435" src="https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午9.48.13-1024x435.png" alt="截圖 2021 06 13 下午9.48.13" class="wp-image-2718" srcset="https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午9.48.13-1024x435.png 1024w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午9.48.13-300x127.png 300w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午9.48.13-768x326.png 768w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午9.48.13.png 1292w" sizes="(max-width: 1024px) 100vw, 1024px" title="大盤融資維持率｜地板指標幫你搶長線反彈｜0050擇時策略優化？ 50"></figure>



<p>mt_rate變化劇烈，化為均線形態與大盤比較能見趨勢，發現指數長期多頭，而融資維持率高高低低波動劇烈，2009-2010、2014-2015、2020-2021維持率處於高檔，融資賺到笑呵呵，當mt_rate_ma10跌破mt_rate_ma60代表融資套牢壓力變重，容易在短期多殺多。</p>



<p>2009-2011年市場走出金融海嘯，融資餘額大進場，在2011年時，融資餘額從2000億增到3000億，但mt_rate背離，呈現整體市場的融資在凹單攤平加碼，後續引發2011大殺盤，不過這樣明顯背離的情況在之後比較少見。</p>



<p>2011、2015、2018、2020的mt_rate_ma10曾經暴跌到1.4上下低位，之後清出融資籌碼，再拉出長多反彈行情。</p>



<p>2016-2020年初，融資餘額呈現低迷量能，長年壓在2000億低檔，直到新冠肺炎後撒幣行情再度引發融資資金逐鹿市場的熱潮。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="241" src="https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午9.42.54-1024x241.png" alt="截圖 2021 06 13 下午9.42.54" class="wp-image-2717" srcset="https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午9.42.54-1024x241.png 1024w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午9.42.54-300x71.png 300w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午9.42.54-768x181.png 768w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午9.42.54-1536x361.png 1536w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午9.42.54-2048x482.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="大盤融資維持率｜地板指標幫你搶長線反彈｜0050擇時策略優化？ 51"><figcaption>融資維持率(mt_rate)與加權報酬指數</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="262" src="https://www.finlab.tw/wp-content/uploads/2021/06/margin_transactions-1024x262.png" alt="margin transactions" class="wp-image-2719" srcset="https://www.finlab.tw/wp-content/uploads/2021/06/margin_transactions-1024x262.png 1024w, https://www.finlab.tw/wp-content/uploads/2021/06/margin_transactions-300x77.png 300w, https://www.finlab.tw/wp-content/uploads/2021/06/margin_transactions-768x196.png 768w, https://www.finlab.tw/wp-content/uploads/2021/06/margin_transactions.png 1432w" sizes="(max-width: 1024px) 100vw, 1024px" title="大盤融資維持率｜地板指標幫你搶長線反彈｜0050擇時策略優化？ 52"><figcaption>上市融資餘額與上市融資餘額MA_60</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="259" src="https://www.finlab.tw/wp-content/uploads/2021/06/mt_rate-drawdown-1024x259.png" alt="mt rate drawdown" class="wp-image-2723" srcset="https://www.finlab.tw/wp-content/uploads/2021/06/mt_rate-drawdown-1024x259.png 1024w, https://www.finlab.tw/wp-content/uploads/2021/06/mt_rate-drawdown-300x76.png 300w, https://www.finlab.tw/wp-content/uploads/2021/06/mt_rate-drawdown-768x194.png 768w, https://www.finlab.tw/wp-content/uploads/2021/06/mt_rate-drawdown.png 1447w" sizes="(max-width: 1024px) 100vw, 1024px" title="大盤融資維持率｜地板指標幫你搶長線反彈｜0050擇時策略優化？ 53"><figcaption>mt_rate回撤<br></figcaption></figure>



<h2>策略開發</h2>



<p>初步觀察mt_rate_ma10低檔約在1.67*0.85上下，此時進場中長期勝率高。</p>



<p>mt_rate_ma10高檔約1.67*1.1上下，此時若mt_rate_ma10低於mt_rate_ma60，可能引發高檔多殺多。</p>



<p>簡單畫進出場圖，初步觀察能躲掉幾波主要殺盤。</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.15.10-1024x501.png" alt="截圖 2021 06 13 下午10.15.10" class="wp-image-2722" width="580" height="283" srcset="https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.15.10-1024x501.png 1024w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.15.10-300x147.png 300w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.15.10-768x376.png 768w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.15.10-1536x752.png 1536w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.15.10-2048x1003.png 2048w" sizes="(max-width: 580px) 100vw, 580px" title="大盤融資維持率｜地板指標幫你搶長線反彈｜0050擇時策略優化？ 54"><figcaption>mt_rate進場訊號觀察</figcaption></figure>



<h3>條件設定</h3>



<p>1.mt_rate_ma10低於1.67*0.85或mt_rate_ma10向上穿越 mt_rate_ma60進場。</p>



<p>2.mt_rate_ma10高於1.67*1.1或mt_rate_ma60向下穿越 mt_rate_ma10出場。</p>



<p>3.以0050為操作標的。</p>



<p>若不使用均線條件，容易太早因為點到高檔位階就被洗掉。</p>



<h3>回測</h3>



<p>以上述條件操作0050元大50ETF，對標加權報酬指數，2009年化表現如下，年化約10%，雖然有賺錢，但表現劣於大盤指數，避掉大跌的同時，也避掉不少大漲，尤其是2009-2017，慘輸。</p>



<p>drawdown優於大盤，堅持指標低檔進場，波動相對穩健，MDD小於20，一般策略通常會在30%以上。</p>



<h4>2009-2021</h4>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="379" src="https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.19.37-1024x379.png" alt="截圖 2021 06 13 下午10.19.37" class="wp-image-2724" srcset="https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.19.37-1024x379.png 1024w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.19.37-300x111.png 300w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.19.37-768x284.png 768w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.19.37-1536x569.png 1536w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.19.37-2048x758.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="大盤融資維持率｜地板指標幫你搶長線反彈｜0050擇時策略優化？ 55"></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="800" height="600" src="https://www.finlab.tw/wp-content/uploads/2021/06/newplot-4.png" alt="newplot 4" class="wp-image-2725" srcset="https://www.finlab.tw/wp-content/uploads/2021/06/newplot-4.png 800w, https://www.finlab.tw/wp-content/uploads/2021/06/newplot-4-300x225.png 300w, https://www.finlab.tw/wp-content/uploads/2021/06/newplot-4-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" title="大盤融資維持率｜地板指標幫你搶長線反彈｜0050擇時策略優化？ 56"><figcaption>策略drawdown小於指數</figcaption></figure>



<h4>2018-2021</h4>



<p>效果優於2009-2017，報酬率優於大盤，MDD降到16%，有躲掉2018下半年、202003新冠肺炎、202105台灣疫情的主要下殺，由於這段時間融資處在大多頭順勢盤，ma_10與ma_60訊號較明確，沒像前些年高檔震檔，有抱到長波段，2009-2017被洗掉太多次。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="383" src="https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.30.12-1024x383.png" alt="截圖 2021 06 13 下午10.30.12" class="wp-image-2726" srcset="https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.30.12-1024x383.png 1024w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.30.12-300x112.png 300w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.30.12-768x288.png 768w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.30.12-1536x575.png 1536w, https://www.finlab.tw/wp-content/uploads/2021/06/截圖-2021-06-13-下午10.30.12-2048x767.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="大盤融資維持率｜地板指標幫你搶長線反彈｜0050擇時策略優化？ 57"></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="800" height="600" src="https://www.finlab.tw/wp-content/uploads/2021/06/newplot-5.png" alt="newplot 5" class="wp-image-2728" srcset="https://www.finlab.tw/wp-content/uploads/2021/06/newplot-5.png 800w, https://www.finlab.tw/wp-content/uploads/2021/06/newplot-5-300x225.png 300w, https://www.finlab.tw/wp-content/uploads/2021/06/newplot-5-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" title="大盤融資維持率｜地板指標幫你搶長線反彈｜0050擇時策略優化？ 58"></figure>



<h2>結論</h2>



<p>大盤融資維持率的低檔很適合當進場點依據，但高檔不容易判斷當出場訊號，準確度比較低，這可能和市場漲跌幅規則和融資操作慣性隨時間改變有關，早期與近年的趨勢不太一樣。</p>



<p>要用此指標長期打敗指數蠻難的，可能要搭配其他指標抓出場點。雖然回測來看劣於大盤這幾年多頭表現，但對左側交易投資人來說，是一個不錯的抄底指標，大盤融資維持率低於1.5時融資常急殺出甜蜜點，可以考慮慢慢向下買進，中長期勝率大。</p>



<p>可以延伸的研究方向是個股融資使用率和大盤融資維持率的相關性～這以後再來探討。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/mt_rate_strategy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2715</post-id>	</item>
	</channel>
</rss>
