<?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>Uncategorized &#8211; FinLab</title>
	<atom:link href="https://www.finlab.tw/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.finlab.tw</link>
	<description>深入淺出的量化投資，讓你在在茫茫股海中，找到專屬於自己的投資方法</description>
	<lastBuildDate>Mon, 17 Jun 2024 19:00:45 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.11</generator>

<image>
	<url>https://www.finlab.tw/wp-content/uploads/2020/07/favicon.png</url>
	<title>Uncategorized &#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>台股突破21,000，居高思危，用選擇權未平倉量避開股市潛在下跌風險</title>
		<link>https://www.finlab.tw/%e5%8f%b0%e8%82%a1%e7%aa%81%e7%a0%b421000%ef%bc%8c%e5%b1%85%e9%ab%98%e6%80%9d%e5%8d%b1%ef%bc%8c%e7%94%a8%e9%81%b8%e6%93%87%e6%ac%8a%e6%9c%aa%e5%b9%b3%e5%80%89%e9%87%8f%e9%81%bf%e9%96%8b%e8%82%a1/</link>
					<comments>https://www.finlab.tw/%e5%8f%b0%e8%82%a1%e7%aa%81%e7%a0%b421000%ef%bc%8c%e5%b1%85%e9%ab%98%e6%80%9d%e5%8d%b1%ef%bc%8c%e7%94%a8%e9%81%b8%e6%93%87%e6%ac%8a%e6%9c%aa%e5%b9%b3%e5%80%89%e9%87%8f%e9%81%bf%e9%96%8b%e8%82%a1/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Mon, 03 Jun 2024 22:16:57 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=6221</guid>

					<description><![CDATA[截止至2024-05-31，加權指數收21,174點，下跌190點(-0.89%)。在股市征戰的各位肯定也覺得 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>截止至2024-05-31，加權指數收21,174點，下跌190點(-0.89%)。在股市征戰的各位肯定也覺得最近股市漲幅頗大，年初至今已漲超3200點(+18%)，市場一有風吹草動，就會遭遇強勁的獲利了結賣壓。此時我們應居高思危，尋找空頭避險的指標，避開潛在下跌風險。本文我們將帶領讀者了解【選擇權未平倉量】，以及如何使用這個指標來做避險。</p>



<h1 id="para1">選擇權未平倉量</h1>



<p>在選擇權市場中，所謂的OI指的是選擇權未平倉量，選擇權未平倉量是指某特定市場在某交易日結束時，多方所持有或空方所拋空的契約口數。它代表市場當時所存在的契約口數，未平倉量等於多頭的總部位或空頭的總部位。當未平倉量越多，代表有越多人將資金押注在這個衍生性商品上，也代表影響越多資金的賺賠，所以有些投資人會將未平倉量當作市場的籌碼數據。</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/6659896b76821c21681ee5d4/content/1717144053517-OI.jpg" alt="OI" title="台股突破21,000，居高思危，用選擇權未平倉量避開股市潛在下跌風險 1"></figure>



<h1 id="para2">Put/Call 未平倉比率</h1>



<p><strong>Put/Call 未平倉比率 = (Put未平倉量 / Call未平倉量 &#8211; 1) * 100%</strong></p>



<p>透過賣權未平倉量除以買權未平倉量後減 1，再乘上 100%，以 0 為基準點。數據大於 0 表示賣權未平倉大於買權未平倉，反之則小於。</p>



<p>台灣的選擇權交易中，以法人機構為主的大戶多為賣方（sell），因為法人擁有較佳的風險控管能力與行情判斷能力。散戶通常為選擇權的買方（buy），一買（buy）一賣（sell）就成為法人賣給散戶的行為，成交後就計算為未平倉。</p>



<p>從選擇權賣方角度看，Put/Call 未平倉比率數值越大通常看成偏多指標，因為Put未平倉量比Call未平倉量多，可以推斷賣Put多，更不容易跌破支撐；如果Put/Call 未平倉比率越小則相反，代表賣CALL較多，看上漲遇壓不容易突破。</p>



<p>Put/Call 未平倉比率通常用來判斷市場情緒，當 Put/Call 未平倉比率創下新高或新低時，代表市場出現極端悲觀或樂觀的狀況，後續容易發生轉折。</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/6659896b76821c21681ee5d4/content/1717144084035-put_call_ratio.png" alt="OI" title="台股突破21,000，居高思危，用選擇權未平倉量避開股市潛在下跌風險 2"></figure>



<h1 id="para3">避險指標</h1>



<p>由於 Put/Call 未平倉比率是雜訊非常多，常常前一天是未平倉比率大於0，隔天又變小於0了，指標雜訊過多會讓投資人信心不足，因此我們將用簡單移動平均將數據平滑化。如下圖所示，每日的雜訊減少不少，且指標在小於0時，大盤多伴隨劇烈跌幅。</p>



<pre class="wp-block-code"><code lang="python" class="language-python"> import matplotlib

  import matplotlib.pyplot as plt

matplotlib.rc("font", family="Microsoft JhengHei")

  from finlab import data, login



  login("FINLAB_TOKEN")



  index_price = data.get("stock_index_price:收盤指數")["上市發行量加權股價指數"]

  pc_ratio = get_put_call_ratio() # 需自行至期交所網頁下載資料



  indexes = index_price.index.intersection(pc_ratio.index)

  index_price = index_price.loc[indexes]

  pc_ratio = pc_ratio.loc[indexes]



  fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True, figsize=(10, 8))

  index_price.plot(ax=ax[0], label="加權指數")

  ax[0].legend(loc="upper left")

  pc_ratio.rolling(window=30, min_periods=1).mean().plot(

    ax=ax[1], label="Put/Call 未平倉比率 - MA(30)"

  )

  ax[1].axhline(y=0, color="black", line)

  ax[1].legend(loc="upper left")</code></pre>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/6659896b76821c21681ee5d4/content/1717144106801-put_call_ratio_ma.png" alt="OI" title="台股突破21,000，居高思危，用選擇權未平倉量避開股市潛在下跌風險 3"></figure>



<h1 id="para4">災難情境</h1>



<p>我們觀察過去一些股市大幅回落的時期，2008年金融海嘯、2012年Fed縮減購債恐慌、2015年中國股災、2018年中美貿易戰爭、2020年新冠疫情、2022-23年Fed快速升息，可以看到股市大幅回落的時期，Put/Call 未平倉比率(MA30)的數值大部分皆是負值。</p>



<p>相信讀者一定也有發現，上述6個災難時期有一個特別例外，Put/Call 未平倉比率(MA30)的數值非常的高，從指標完全看不出股是曾經經歷30-40%的下跌。筆者至今仍沒有好的解釋，期待能收到經歷這段時期的讀者們解答。</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/6659896b76821c21681ee5d4/content/1717144136864-disaster1.png" alt="disaster" title="台股突破21,000，居高思危，用選擇權未平倉量避開股市潛在下跌風險 4"></figure>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/6659896b76821c21681ee5d4/content/1717144148251-disaster2.png" alt="disaster" title="台股突破21,000，居高思危，用選擇權未平倉量避開股市潛在下跌風險 5"></figure>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/6659896b76821c21681ee5d4/content/1717144160847-disaster3.png" alt="disaster" title="台股突破21,000，居高思危，用選擇權未平倉量避開股市潛在下跌風險 6"></figure>



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



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



<p>回測期間: 2001-12-24 ~ 2024-05-30&nbsp;</p>



<p>避險邏輯:&nbsp;</p>



<p>當 Put/Call 未平倉比率(MA30) &gt;= 0 時，持有大盤指數</p>



<p>當 Put/Call 未平倉比率(MA30) &lt; 0 時，出清持股</p>



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

  import matplotlib

  import matplotlib.pyplot as plt



  matplotlib.rc("font", family="Microsoft JhengHei")



  login("FINLAB_TOKEN")



  # data

  benchmark = data.get("stock_index_price:收盤指數")["上市發行量加權股價指數"]

  pc_ratio = get_put_call_ratio()["20100101":] # 需自行至期交所網頁下載資料

  indexes = benchmark.index.intersection(pc_ratio.index)

  benchmark = benchmark.loc[indexes]

  pc_ratio = pc_ratio.loc[indexes]



  # position

  position = (

    ((pc_ratio.rolling(window=30, min_periods=1).mean() > 0)).shift(1).fillna(False)

  ) # 需做shift(1)，因 Put/Call 未平倉量是盤後資料



  rets = benchmark.pct_change()

  rets.loc[~position] = 0

  s_equity = (rets + 1).cumprod()

  mdd = s_equity / s_equity.rolling(window=s_equity.shape[0], min_periods=1).max() - 1



  # benchmark

  rets_benchmark = benchmark.pct_change()

  s_benchmark = (rets_benchmark + 1).cumprod()

  mdd_benchmark = (

    s_benchmark

    / s_benchmark.rolling(window=s_benchmark.shape[0], min_periods=1).max()

    - 1

  )

  

  # plot

  fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True, figsize=(10, 8))

  s_equity.plot(ax=ax[0], label="benchmark (hedge)")

  s_benchmark.plot(ax=ax[0], label="benchmark")

  ax[0].legend()



  mdd.plot(ax=ax[1], label="MDD - benchmark (hedge)")

  mdd_benchmark.plot(ax=ax[1], label="MDD - benchmark")

  ax[1].legend()</code></pre>



<p>回測避險後的大盤指數，年化報酬率為8.5%(原始:8.2%)，最大回撤為28.7%(原始:58.3%)，雖然報酬率僅些微優於未避險的大盤指數，但最大回撤卻少了將近一半!這也是避險帶來最大的好處，讓你在持有大盤指數ETF時，能控制下檔風險。</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/6659896b76821c21681ee5d4/content/1717147889261-backtestTWA00.png" alt="backtest" title="台股突破21,000，居高思危，用選擇權未平倉量避開股市潛在下跌風險 7"></figure>



<p>相信讀者仍然沒有感受到Put/Call 未平倉比率帶來的效益，我們將持有的指數改成櫃買指數試試。年化報酬率8.8%(原始:5.6%)，最大回撤37.4%(原始:76.4%)，不僅年化報酬率有幅提升，最大回撤也減少不少。這也說明了，當市場趨於恐慌時，中小型股會遭受更嚴重的賣壓，因此避險的效果會更加明顯。</p>



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/6659896b76821c21681ee5d4/content/1717147913253-backtestTWC00.png" alt="backtest" title="台股突破21,000，居高思危，用選擇權未平倉量避開股市潛在下跌風險 8"></figure>



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



<ol><li>選擇權未平倉量代表市場當時所存在的契約口數，當未平倉量越多，代表有越多人將資金押注在這個衍生性商品上，也代表影響越多資金的賺賠，所以有些投資人會將未平倉量當作市場的籌碼數據。</li><li>Put/Call 未平倉比率數值越大通常看成偏多指標，因為Put未平倉量比Call未平倉量多，可以推斷賣Put多，更不容易跌破支撐；如果Put/Call 未平倉比率越小則相反，代表賣CALL較多，看上漲遇壓不容易突破。</li><li>觀察過去一些股市大幅回落的時期，Put/Call 未平倉比率(MA30)的數值大部分皆是負值。</li><li>使用Put/Call 未平倉比率(MA30)作為避險工具，能夠大幅降低最大回撤，控制下檔風險。</li><li>櫃買指數的避險效果較加權指數為佳。</li></ol>



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



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



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/6659896b76821c21681ee5d4/content/1717144226428-1670922727509-%E5%88%86%E9%9A%94%E7%B7%9A.png" alt="sep" title="台股突破21,000，居高思危，用選擇權未平倉量避開股市潛在下跌風險 9"></figure>



<p>import os</p>



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



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



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



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



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



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



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



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



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



<p>fund = 1000000</p>



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



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



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



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



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



<figure class="wp-block-image"><img src="https://richclub.blob.core.windows.net/article/6659896b76821c21681ee5d4/content/1717144226428-1670922727509-%E5%88%86%E9%9A%94%E7%B7%9A.png" alt="sep" title="台股突破21,000，居高思危，用選擇權未平倉量避開股市潛在下跌風險 9"></figure>



<p>程式預設使用當前價格進行「限價單」但你也可以透過客製化的方式，調整成「漲跌停」、「零股」、「融資券」，非常的簡單方便，讓你在股市中複製好策略的績效！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/%e5%8f%b0%e8%82%a1%e7%aa%81%e7%a0%b421000%ef%bc%8c%e5%b1%85%e9%ab%98%e6%80%9d%e5%8d%b1%ef%bc%8c%e7%94%a8%e9%81%b8%e6%93%87%e6%ac%8a%e6%9c%aa%e5%b9%b3%e5%80%89%e9%87%8f%e9%81%bf%e9%96%8b%e8%82%a1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6221</post-id>	</item>
		<item>
		<title>如何利用主力買賣超張數預測台灣股市趨勢：深入分析與策略指南</title>
		<link>https://www.finlab.tw/main-force-indicator-for-0051/</link>
					<comments>https://www.finlab.tw/main-force-indicator-for-0051/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Mon, 13 May 2024 03:59:45 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=6179</guid>

					<description><![CDATA[摘要 本文旨在探討主力買賣超張數指標與台灣股市價格表現之間的相關性，並評估該指標在市場趨勢預測和風險管理中的有 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1>摘要</h1>



<p>本文旨在探討主力買賣超張數指標與台灣股市價格表現之間的相關性，並評估該指標在市場趨勢預測和風險管理中的有效性。透過對台灣主要股票的交易數據分析，本研究發現主力買賣超張數與未來一個月大盤價格呈現顯著的負相關（-0.08）。此外，我們提出了一套基於主力買賣超數據的投資策略，旨在幫助投資者避開市場的潛在下跌風險。本文的分析不僅有助於投資者更好地理解市場力量如何影響股價，還提供了一種新的工具來增強其投資組合的風險管理。</p>



<h3>介紹</h3>



<p>台灣股市作為亞洲主要的金融市場之一，一直是全球和區域投資者關注的焦點。在此背景下，主力買賣超張數作為一個反映大型投資者交易行為的指標，其對股市的價格影響力不容忽視。過去的研究多集中於技術分析或基本面分析，而對於券商大額交易的研究相對較少。因此，本研究旨在填補這一空白，透過深入分析券商分點的買賣數據，探討主力買賣超與股市表現之間的關聯性。</p>



<h3>指標公式</h3>



<p>在本研究中，主力買賣超指標的計算方式如下：</p>



<ol><li><strong>主力買賣超加權</strong>：<ul><li>計算每個股票的主力買賣超與該股票收盤價的乘積，這表示主力對該股票投入的資金量。 主力買賣超加權=主力買賣超張數×收盤價主力買賣超加權=主力買賣超張數×收盤價</li></ul></li><li><strong>市場總值</strong>：<ul><li>計算所有股票的收盤價與其成交股數的乘積，表示市場總成交金額。 市場總值=收盤價×成交股數市場總值=收盤價×成交股數</li></ul></li><li><strong>日總和計算</strong>：<ul><li>將上述兩個值對所有股票進行求和，得到每日的主力買賣超加權總和與市場總值總和。 日主力買賣超加權總和=∑所有股票主力買賣超加權日主力買賣超加權總和=∑所有股票​主力買賣超加權 日市場總值總和=∑所有股票市場總值日市場總值總和=∑所有股票​市場總值</li></ul></li><li><strong>比率計算與移動平均</strong>：<ul><li>計算每日的主力買賣超加權總和與市場總值總和的比率，並應用20日移動平均以平滑該指標。 ind=(日主力買賣超加權總和日市場總值總和).rolling(20).mean()</li><li>ind=(日市場總值總和日主力買賣超加權總和​).rolling(20).mean()</li></ul></li></ol>



<p>透過以上指標的計算，本文旨在建立一套評估主力買賣超影響股市的方法論，並進一步分析其對未來股市價格趨勢的預測能力。</p>



<pre class="wp-block-code"><code lang="python" class="language-python"># 安裝 finlab 套件並將安裝日誌輸出到 log.txt 檔案
!pip install finlab > log.txt

# 引入 finlab 套件中的 data 模組
from finlab import data

# 從 finlab data 模組中取得券商分點交易數據，強制重新下載最新數據
券商分點資料 = data.get('broker_transactions', force_download=True)

# 處理券商分點資料，將買入和賣出數據轉換為浮點數，並依日期和股票代號進行分組求和
broker_volume = (
    券商分點資料
      .reset_index()[['buy', 'sell', 'stock_id', 'date']]
      .assign(buy=lambda df: df.buy.astype(float), sell=lambda df: df.sell.astype(float))
      .groupby(['date','stock_id']).sum()
      .reset_index()
      .pivot(index='date', columns='stock_id')
)

# 刪除原始的券商分點資料，釋放記憶體
del 券商分點資料

# 計算主力買賣超的張數，即買入量減去賣出量
主力買賣超張數 = broker_volume.buy - broker_volume.sell

adj = data.get('etl:adj_close')
close = data.get('price:收盤價')
volume = data.get('price:成交股數')

ind = ((主力買賣超張數 * close).sum(axis=1) / (close * volume).sum(axis=1)).rolling(20).mean()</code></pre>



<p></p>



<h3>相關性分析與大盤比較</h3>



<p>在對主力買賣超張數進行計算和分析後，本文接著使用相關性分析（Correlation Analysis）來評估主力買賣超指標與大盤股價走勢之間的關聯。相關性分析是一種統計方法，用於量化兩個變量之間的線性相關程度。在本研究中，我們特別關注的是主力買賣超張數與未來一個月大盤價格變動之間的相關性。</p>



<h4>相關係數的計算</h4>



<p>相關係數（Correlation Coefficient），通常表示為 <em>r</em>，其值介於 -1 和 1 之間，其中：</p>



<ul><li>r=1 表示兩個變量間存在完美的正線性關係。</li><li>r=−1 表示兩個變量間存在完美的負線性關係。</li><li><em>r</em>=0 表示兩個變量間沒有線性關係。</li></ul>



<p>在本研究中，相關係數的計算公式為：</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="182" src="https://www.finlab.tw/wp-content/uploads/2024/05/image-4-1024x182.png" alt="image 4" class="wp-image-6184" srcset="https://www.finlab.tw/wp-content/uploads/2024/05/image-4-1024x182.png 1024w, https://www.finlab.tw/wp-content/uploads/2024/05/image-4-300x53.png 300w, https://www.finlab.tw/wp-content/uploads/2024/05/image-4-768x136.png 768w, https://www.finlab.tw/wp-content/uploads/2024/05/image-4.png 1060w" sizes="(max-width: 1024px) 100vw, 1024px" title="如何利用主力買賣超張數預測台灣股市趨勢：深入分析與策略指南 11"></figure>



<p>其中，<em>x</em> 和 <em>y</em> 分別代表主力買賣超張數和大盤指數的日收盤價。</p>



<h4>主力買賣超與大盤的比較</h4>



<p>為了評估主力買賣超指標對於市場趨勢的預測能力，本文將主力買賣超張數的變動與大盤指數（如台灣加權指數）的變動進行比較。透過計算這兩者之間的相關係數，我們發現了 -0.08 的負相關，這意味著當主力買賣超指數顯示買超時，大盤指數未來一個月有輕微的下跌趨勢。儘管這個相關性不強，但它提供了一個有趣的見解，即市場可能已對大型買單的影響反應過度，從而導致短期內價格的調整。</p>



<pre class="wp-block-code"><code lang="python" class="language-python">ind.loc['2022':].plot()
pct.loc['2022':].plot(secondary_y=True)</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" width="876" height="496" src="https://www.finlab.tw/wp-content/uploads/2024/05/image-5.png" alt="image 5" class="wp-image-6185" srcset="https://www.finlab.tw/wp-content/uploads/2024/05/image-5.png 876w, https://www.finlab.tw/wp-content/uploads/2024/05/image-5-300x170.png 300w, https://www.finlab.tw/wp-content/uploads/2024/05/image-5-768x435.png 768w" sizes="(max-width: 876px) 100vw, 876px" title="如何利用主力買賣超張數預測台灣股市趨勢：深入分析與策略指南 12"><figcaption>指標與0051的關係</figcaption></figure>



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

adj = data.get('etl:adj_close')
close = data.get('price:收盤價')
volume = data.get('price:成交股數')

ind = ((主力買賣超張數 * close).sum(axis=1) / (close * volume).sum(axis=1)).rolling(20).mean()
pct = adj['0051'].shift(-20) / adj['0051'].shift(-1)

pd.DataFrame({
    'ind': ind,
    'pct': pct,
}).dropna().corr()</code></pre>



<p>-0.08</p>



<h3>回測結果摘要</h3>



<p>本研究進行了一項回測，比較了使用主力買賣超指標（以下稱為指標）與未使用該指標的0051股票表現。時間範圍從2018年2月12日至2024年5月9日。回測結果揭示了以下重要發現：</p>



<ol><li><strong>總回報</strong>：使用指標的策略獲得了240.60%的總回報，而未使用指標的策略則為210.53%。這表明使用主力買賣超指標的策略在此期間表現更佳。</li><li><strong>年化回報（CAGR）</strong>：使用指標的策略具有21.71%的複合年增長率（CAGR），相比之下，未使用指標的策略為19.92%。</li><li><strong>最大回撤</strong>：使用指標的策略在風險控制方面表現較好，最大回撤為-10.64%，而未使用指標的策略最大回撤達-31.30%。</li><li><strong>Sharpe比率和Sortino比率</strong>：使用指標的策略具有較高的Sharpe比率（1.99）和Sortino比率（3.24），顯示出較高的風險調整後回報，而未使用指標的策略分別為1.15和1.76。</li><li><strong>月度和年度表現</strong>：使用指標的策略在月度和年度表現方面同樣表現優越，特別是在避免大幅下跌方面更為有效，表現在最差月份和年度的回撤幅度較小。</li><li><strong>波動性和風險指標</strong>：使用指標的策略日常和月常波動性較低，日常波動率為10.53%，月常波動率為13.62%，未使用指標的策略分別為17.77%和18.61%。</li></ol>



<figure class="wp-block-image size-full"><img loading="lazy" width="808" height="465" src="https://www.finlab.tw/wp-content/uploads/2024/05/image-6.png" alt="image 6" class="wp-image-6186" srcset="https://www.finlab.tw/wp-content/uploads/2024/05/image-6.png 808w, https://www.finlab.tw/wp-content/uploads/2024/05/image-6-300x173.png 300w, https://www.finlab.tw/wp-content/uploads/2024/05/image-6-768x442.png 768w" sizes="(max-width: 808px) 100vw, 808px" title="如何利用主力買賣超張數預測台灣股市趨勢：深入分析與策略指南 13"><figcaption>回測結果</figcaption></figure>



<p>這些結果表明，主力買賣超指標能有效提升投資回報並降低風險，尤其是在控制最大回撤和提高風險調整後回報方面具有顯著效果。此外，使用該指標的策略在市場低迷時期能更好地保護投資，減少損失，顯示出其在市場風險管理中的潛在價值。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/main-force-indicator-for-0051/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6179</post-id>	</item>
		<item>
		<title>每天看外資買賣超卻不知道怎麼解讀嗎?外資避險指標大公開，讓你提前避開股市大幅回落</title>
		<link>https://www.finlab.tw/%e6%af%8f%e5%a4%a9%e7%9c%8b%e5%a4%96%e8%b3%87%e8%b2%b7%e8%b3%a3%e8%b6%85%e5%8d%bb%e4%b8%8d%e7%9f%a5%e9%81%93%e6%80%8e%e9%ba%bc%e8%a7%a3%e8%ae%80%e5%97%8e%e5%a4%96%e8%b3%87%e9%81%bf%e9%9a%aa%e6%8c%87/</link>
					<comments>https://www.finlab.tw/%e6%af%8f%e5%a4%a9%e7%9c%8b%e5%a4%96%e8%b3%87%e8%b2%b7%e8%b3%a3%e8%b6%85%e5%8d%bb%e4%b8%8d%e7%9f%a5%e9%81%93%e6%80%8e%e9%ba%bc%e8%a7%a3%e8%ae%80%e5%97%8e%e5%a4%96%e8%b3%87%e9%81%bf%e9%9a%aa%e6%8c%87/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Thu, 09 May 2024 14:52:41 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[如何買股票]]></category>
		<category><![CDATA[歷史回測]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[選股策略]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=6176</guid>

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



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



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



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



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



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



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



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



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



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



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



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



<p>)</p>



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



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



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



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



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



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



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



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



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



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



<p>)</p>



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



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



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



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



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



<p>)</p>



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



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



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



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



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



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



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



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



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



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



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



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



<p>window=20</p>



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



<p>import os</p>



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



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



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



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



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



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



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



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



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



<p>fund = 1000000</p>



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



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



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



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



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



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



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

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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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

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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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

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

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

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

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

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

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

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

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

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

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



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



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



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



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



<h2>FAQ</h2>



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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

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

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

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



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



<p>程式預設使用當前價格進行「限價單」但你也可以透過<a href="https://doc.finlab.tw/details/order_api/" data-type="URL" data-id="https://doc.finlab.tw/details/order_api/" target="_blank" rel="noopener">客製化</a>的方式，調整成「漲跌停」、「零股」、「融資券」，非常的簡單方便，讓你在股市中複製好策略的績效！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/python-taiwan-stock-market-selection/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6065</post-id>	</item>
		<item>
		<title>現金及約當現金：如何評估企業的現金流？</title>
		<link>https://www.finlab.tw/%e7%8f%be%e9%87%91%e5%8f%8a%e7%b4%84%e7%95%b6%e7%8f%be%e9%87%91%e5%a6%82%e4%bd%95%e8%a9%95%e4%bc%b0%e4%bc%81%e6%a5%ad%e7%9a%84%e7%8f%be%e9%87%91%e6%b5%81/</link>
					<comments>https://www.finlab.tw/%e7%8f%be%e9%87%91%e5%8f%8a%e7%b4%84%e7%95%b6%e7%8f%be%e9%87%91%e5%a6%82%e4%bd%95%e8%a9%95%e4%bc%b0%e4%bc%81%e6%a5%ad%e7%9a%84%e7%8f%be%e9%87%91%e6%b5%81/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Thu, 22 Dec 2022 16:10:02 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></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>
		<category><![CDATA[資金成本]]></category>
		<category><![CDATA[資金流量]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=4998</guid>

					<description><![CDATA[現金及約當現金是企業能夠立即使用的資金，對於企業的經營和發展具有重要意義。現金及約當現金可以用於滿足企業的短期償付債務的需要，例如薪資、租金、借款利息等。它們也可以用於進行投資或收購等活動，以增加企業的營業收入或擴大企業的經營範圍。此外，現金及約當現金也是投資者和借款人考慮企業財務狀況時的重要參考指標。企業持有足夠的現金及約當現金，可以讓投資者放心，表明企業有能力償付債務；而借款人則可以更有信心地向企業提供融資。]]></description>
										<content:encoded><![CDATA[
<p><a href="https://wiki.mbalib.com/zh-tw/%E7%BA%A6%E5%BD%93%E7%8E%B0%E9%87%91" target="_blank" rel="noopener">現金及約當現金</a>是企業能夠立即使用的資金，對於企業的經營和發展具有重要意義。現金及約當現金可以用於滿足企業的短期償付債務的需要，例如薪資、租金、借款利息等。它們也可以用於進行投資或收購等活動，以增加企業的營業收入或擴大企業的經營範圍。此外，現金及約當現金也是投資者和借款人考慮企業財務狀況時的重要參考指標。企業持有足夠的現金及約當現金，可以讓投資者放心，表明企業有能力償付債務；而借款人則可以更有信心地向企業提供融資。</p>



<p>您可以在 <a href="https://ai.finlab.tw " target="_blank">https://ai.finlab.tw </a>來下載現金及約當現金的歷史資料，也可以參考<a href="https://www.finlab.tw/%e5%8f%b0%e7%81%a3%e8%82%a1%e5%b8%82%e6%9c%80%e5%bc%b7%e7%9a%84-python-package/" data-type="post" data-id="2886">相關教學</a>。</p>



<h2>現金及約當現金的用處</h2>



<ol><li>現金及約當現金可以幫助企業了解當前的現金及約當現金狀況，並判斷是否需要尋求融資或調整支出以提高現金流量。</li><li>現金及約當現金可以用來評估企業的償債能力，即企業是否有足夠的現金及約當現金來償付債務。</li><li>現金及約當現金可以用來評估企業的投資回報率，即企業投資所得的收益是否足以抵消投資成本。</li><li>現金及約當現金可以幫助企業計算其資金成本，即企業在獲得資金的同時所需付出的成本。</li><li>現金及約當現金可以幫助企業評估其營運效率，即企業是否能夠有效地使用現金及約當現金達到最大化獲利。</li></ol>



<h2>現金及約當現金有哪些不同的算法嗎？</h2>



<p>現金及約當現金的計算方法主要有兩種：現值法和市場價值法。</p>



<h3>現值法</h3>



<p>是指將可以在短期內轉換成現金的金融工具的未來價值折現至當前價值，再加上現金的數額，得出現金及約當現金的總額。</p>



<h3>市場價值法</h3>



<p>是指將可以在短期內轉換成現金的金融工具的市場價值加上現金的數額，得出現金及約當現金的總額。</p>



<p>在實際應用中，市場價值法比現值法更常用，因為市場價值法能夠更精確地反映企業當前持有的現金及約當現金的實際價值。但是，市場價值法也有一些缺點，例如它無法反映金融工具未來的現金流量，因此可能會出現偏差。</p>



<h2>現金及約當現金舉一個試算範例？</h2>



<p>假設一家企業當前持有的現金為1,000元，同時還持有一張3個月期的政府債券，價值為1,500元，那麼這家企業的現金及約當現金就是2,500元。</p>



<h2>現金及約當現金高和低代表什麼意思？多少算是合理？</h2>



<p>現金及約當現金高，意味著企業持有的現金及約當現金較多，通常被視為企業經營狀況較好的指標。現金及約當現金低，則意味著企業持有的現金及約當現金較少，可能需要尋求融資或降低支出以提高現金流量。</p>



<p>不過，現金及約當現金的高低並不是單純由數額大小決定的，也要考慮到企業的經營特性、行業特性、經濟環境等因素。因此，要判斷現金及約當現金的高低，需要對比企業同行業或同期的現金及約當現金水平，並進行綜合分析。</p>



<h2>使用現金及約當現金的三個注意事項</h2>



<h3>選擇合適的計算方法</h3>



<p>在計算現金及約當現金時，需要選擇合適的計算方法，才能更精確地反映企業當前的現金及約當現金狀況。一般而言，市場價值法比現值法更常用。</p>



<h3>注意金融工具的期限</h3>



<p>在選擇可以轉換成現金的金融工具時，需要注意這些金融工具的期限，避免選擇期限過長的金融工具。通常，期限不超過三個月的金融工具才能被視為現金等值物。</p>



<h3>注意現金及約當現金的變化趨勢</h3>



<p>企業的現金及約當現金數額會隨著時間而變化，因此在使用現金及約當現金時，需要注意其變化趨勢。如果企業的現金及約當現金數額逐漸下降，可能需要尋求融資或調整支出以提高現金流量。反之，如果企業的現金及約當現金數額逐漸上升，則可以考慮對外投資或擴大營運。</p>



<h2>與現金及約當現金很像的財務指標有哪些？有何不同？</h2>



<p>與現金及約當現金很像的財務指標有以下幾項：</p>



<h3>現金及約當現金比率（Cash and Cash Equivalents Ratio）</h3>



<p>現金及約當現金比率是指企業現金及約當現金與資產總額的比例。該比率越高，代表企業持有的現金及約當現金越多，通常被視為企業經營狀況較好的指標。</p>



<h3>現金比率（Cash Ratio）</h3>



<p>現金比率是指企業現金與資產總額的比例。該比率越高，代表企業持有的現金越多，通常被視為企業經營狀況較好的指標。</p>



<h3>現金流量比率（Cash Flow Ratio）</h3>



<p>現金流量比率是指企業現金流量與資產總額的比例。該比率越高，代表企業的現金流量越多，通常被視為企業經營狀況較好的指標。</p>



<p>與現金及約當現金的不同在於，現金及約當現金是指企業持有的現金及可以迅速轉換成現金的金融工具，而現金流量比率則是指企業在一定時期內的現金流入和現金流出的比例。</p>



<h2>現金及約當現金有用嗎？你的觀點為何？</h2>



<p>現金及約當現金在財務分析中是非常有用的指標。它可以幫助企業了解當前的現金及約當現金狀況，並判斷是否需要尋求融資或調整支出以提高現金流量。此外，現金及約當現金還可以用來評估企業的償債能力和投資回報率。因此，我認為現金及約當現金是非常有用的財務指標。</p>



<h2>現金及約當現金有哪些限制？</h2>



<p>現金及約當現金有以下幾個限制：</p>



<ol><li>現金及約當現金只能反映當前的狀況，無法預測未來的變化。</li><li>現金及約當現金僅能反映一個公司的資金狀況，無法反映整個市場的變化。</li><li>現金及約當現金的計算方式有很多種，可能會導致結果有所差異。</li><li>現金及約當現金僅能反映企業的資金流動狀況，無法反映企業的獲利能力。</li></ol>



<h2>總結</h2>



<p>現金及約當現金是指企業持有的現金及可以迅速轉換成現金的金融工具。它是一個重要的財務指標，可以幫助企業了解當前的現金及約當現金狀況，並判斷是否需要尋求融資或調整支出以提高現金流量。此外，現金及約當現金還可以用來評估企業的償債能力和投資回報率。</p>



<p>然而，現金及約當現金也有一些限制需要注意，例如只能反映當前的狀況，無法預測未來的變化；僅能反映一個公司的資金狀況，無法反映整個市場的變化；計算方式有很多種，可能會導致結果有所差異；僅能反映企業的資金流動狀況，無法反映企業的獲利能力。</p>



<p>總之，現金及約當現金是一個重要的財務指標，但在使用時也需要注意它的局限性。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/%e7%8f%be%e9%87%91%e5%8f%8a%e7%b4%84%e7%95%b6%e7%8f%be%e9%87%91%e5%a6%82%e4%bd%95%e8%a9%95%e4%bc%b0%e4%bc%81%e6%a5%ad%e7%9a%84%e7%8f%be%e9%87%91%e6%b5%81/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4998</post-id>	</item>
		<item>
		<title>1 分鐘學會！使用 Lux API 自動視覺化 Pandas 資料</title>
		<link>https://www.finlab.tw/lux-api-tutorial/</link>
					<comments>https://www.finlab.tw/lux-api-tutorial/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Tue, 23 Aug 2022 14:56:48 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[選股策略]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=4216</guid>

					<description><![CDATA[藉由 Lux API 我們可以很快速的自動產生出非常多有意義的圖表，Lux 常常會帶給我資料處的靈感，希望你也可以從中感受到 Lux 強大之處。]]></description>
										<content:encoded><![CDATA[
<p>資料多了起來，反而不知道要如何繪圖，藉由 <a href="https://github.com/lux-org/lux" target="_blank" data-type="URL" data-id="https://github.com/lux-org/lux" rel="noreferrer noopener">Lux API</a> 我們可以很快速的自動產生出非常多有意義的圖表，Lux 常常會帶給我資料處的靈感，希望你也可以從中感受到 Lux 強大之處。</p>



<p>例如，我們回測完的結果，通常會存在 report.get_trades() 之中，由於 trades 是一張 pd.DataFrame，我們就可以使用 Lux 來幫我們產生有用的圖表，讓我們掌握每一筆交易的盈虧！</p>



<h2>安裝 Lux Package</h2>



<p>安裝 lux 非常的簡單，只要使用 pip 即可安裝：</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">pip install lux-api &gt; log.txt
pip install finlab &gt; log.txt</code></pre>



<h2>撰寫策略</h2>



<p>這邊我們也安裝 <a href="https://www.finlab.tw/%e5%8f%b0%e7%81%a3%e8%82%a1%e5%b8%82%e6%9c%80%e5%bc%b7%e7%9a%84-python-package/" data-type="post" data-id="2886">finlab package</a> 來寫回測使用，我們以一個簡單的「<a href="https://ai.finlab.tw/strategies" data-type="URL" data-id="https://ai.finlab.tw/strategies" target="_blank" rel="noreferrer noopener">股價淨值比</a>」策略為範例：</p>



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

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

# 條件 1
收盤價大於五 = 收盤價 &gt; 5

# 條件 2
季線 = 收盤價.rolling(60).mean()
收盤價在季線之上 = 收盤價 &gt; 季線

# 條件 3
總條件 = (收盤價 * 股價淨值比)[收盤價大於五&amp;收盤價在季線之上].is_smallest(20)

report = backtest.sim(總條件, resample='Q')</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="481" src="https://www.finlab.tw/wp-content/uploads/2022/08/image-3-1024x481.png" alt="image 3" class="wp-image-4218" srcset="https://www.finlab.tw/wp-content/uploads/2022/08/image-3-1024x481.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/08/image-3-300x141.png 300w, https://www.finlab.tw/wp-content/uploads/2022/08/image-3-768x361.png 768w, https://www.finlab.tw/wp-content/uploads/2022/08/image-3.png 1444w" sizes="(max-width: 1024px) 100vw, 1024px" title="1 分鐘學會！使用 Lux API 自動視覺化 Pandas 資料 34"><figcaption>策略報酬</figcaption></figure>



<p>雖然這是範例策略，不過績效也滿好的，歡迎大家自行調整修改成自己的策略喔！</p>



<h2>顯示逐筆歷史交易</h2>



<p>接下來我們可以把每一筆交易的資料給印出來：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">trades = report.get_trades()
trades</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="349" src="https://www.finlab.tw/wp-content/uploads/2022/08/image-4-1024x349.png" alt="image 4" class="wp-image-4219" srcset="https://www.finlab.tw/wp-content/uploads/2022/08/image-4-1024x349.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/08/image-4-300x102.png 300w, https://www.finlab.tw/wp-content/uploads/2022/08/image-4-768x262.png 768w, https://www.finlab.tw/wp-content/uploads/2022/08/image-4-1536x524.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/08/image-4-2048x698.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="1 分鐘學會！使用 Lux API 自動視覺化 Pandas 資料 35"><figcaption>策略的逐筆交易</figcaption></figure>



<p>這個 trades 中有很多交易資料，包含：</p>



<p>* 最大下跌（MDD）</p>



<p>* 潛在最大獲利（MFE）</p>



<p>* 潛在最大虧損（MAE）</p>



<p>* 潛在最大虧損發生前的最大獲利（BMFE）</p>



<p>* 持有多長的時間(pdays)</p>



<p>非常多數據，有點不清楚它們之間的關係，沒關係，讓 Lux 幫你將這些數據整理視覺化。</p>



<h2>Lux 資料視覺化</h2>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">import lux
import pandas as pd
from google.colab import output
output.enable_custom_widget_manager()

trades = report.get_trades()
trades = pd.DataFrame(trades.values, index=trades.index, columns=trades.columns)
trades.intent = ['return']
trades</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="352" src="https://www.finlab.tw/wp-content/uploads/2022/08/image-5-1024x352.png" alt="image 5" class="wp-image-4220" srcset="https://www.finlab.tw/wp-content/uploads/2022/08/image-5-1024x352.png 1024w, https://www.finlab.tw/wp-content/uploads/2022/08/image-5-300x103.png 300w, https://www.finlab.tw/wp-content/uploads/2022/08/image-5-768x264.png 768w, https://www.finlab.tw/wp-content/uploads/2022/08/image-5-1536x528.png 1536w, https://www.finlab.tw/wp-content/uploads/2022/08/image-5.png 1962w" sizes="(max-width: 1024px) 100vw, 1024px" title="1 分鐘學會！使用 Lux API 自動視覺化 Pandas 資料 36"><figcaption>Lux 視覺自動化</figcaption></figure>



<p>這樣我們就能清楚瞭解這些資料之間的關連了！非常的實用，然而 Lux 與 FinlabDataFrame 可能會有點不兼容，所以建議程式碼跑完回測後，在 import lux 這樣才不會在運算 DataFrame 時報錯喔！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/lux-api-tutorial/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4216</post-id>	</item>
		<item>
		<title>Python 實作：現在該不該買山寨幣？</title>
		<link>https://www.finlab.tw/python-%e5%af%a6%e4%bd%9c%ef%bc%9a%e7%8f%be%e5%9c%a8%e8%a9%b2%e4%b8%8d%e8%a9%b2%e8%b2%b7%e5%b1%b1%e5%af%a8%e5%b9%a3%ef%bc%9f/</link>
					<comments>https://www.finlab.tw/python-%e5%af%a6%e4%bd%9c%ef%bc%9a%e7%8f%be%e5%9c%a8%e8%a9%b2%e4%b8%8d%e8%a9%b2%e8%b2%b7%e5%b1%b1%e5%af%a8%e5%b9%a3%ef%bc%9f/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Sun, 06 Feb 2022 01:51:25 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=3259</guid>

					<description><![CDATA[山寨幣，眾說紛紜的市場，有人在其中賺了數百倍，有人賠了所有身家，假如你跟我一樣有做山寨幣，現在應該差不多被腰斬 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>山寨幣，眾說紛紜的市場，有人在其中賺了數百倍，有人賠了所有身家，假如你跟我一樣有做山寨幣，現在應該差不多被腰斬了吧XD。我個人一月份虧損也非常多，大約是 -30% 左右，所以失敗就是要記取教訓，下次要更謹慎！於是就有了這篇文章，希望幫到大家，寫程式精進山寨幣交易技術！</p>



<h2>山寨幣的風險</h2>



<p>並不是所有人都適合投資（投機）山寨幣，任何金融產品，假如有不合理的期待，承受了不該冒的風險，虧損會非常凌遲身心。所以接下來就一起來看一些數據，評估自己究竟要不要交易山寨幣。</p>



<h3><meta charset="utf-8">山寨幣與比特幣比較</h3>



<p>藉由 finlab package，可以很簡單的繪製出下圖：</p>



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

c = finlab.data('crypto:close')
c.pct_change().mean(axis=1).add(1)['2020':].cumprod().plot()
c['BTCUSDT'].pct_change().add(1)['2020':].cumprod().plot()</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" width="374" height="260" src="https://www.finlab.tw/wp-content/uploads/2022/02/image.png" alt="image" class="wp-image-3260" srcset="https://www.finlab.tw/wp-content/uploads/2022/02/image.png 374w, https://www.finlab.tw/wp-content/uploads/2022/02/image-300x209.png 300w" sizes="(max-width: 374px) 100vw, 374px" title="Python 實作：現在該不該買山寨幣？ 37"></figure>



<p>藍色是<meta charset="utf-8">山寨幣整體市場走勢圖，是用所有山寨幣每天的漲跌幅平均來計算的。相較於橘色的比特幣，走勢更為劇烈，是容易爆賺暴賠的市場。一年當中好幾次 -50% 的下跌幅度，當然獲利也是非常驚人，所以要看你的風險承受能力，假如你沒辦法讓資產常常被除以2，那你不應該全部都持有<meta charset="utf-8">山寨幣。除了風險以外，你還需要考量到宏觀的要素。</p>



<h3>宏觀趨勢和信仰分析</h3>



<p>這是個很投機的市場，同時也是很有未來性的市場。你假如深入了解就會理解，這可能是人類歷史文明重要的里程碑。但你也可能持有截然不同的觀點，認為區塊<meta charset="utf-8">鏈是彫蟲小技，拿來做資金盤的噱頭，勢必走向不可挽回的泡沫。</p>



<p>另外也有很多議題值得探究：</p>



<ul><li>究竟去中心化是否必要？</li><li><meta charset="utf-8">區塊<meta charset="utf-8">鏈的能源消耗問題？</li><li>政府對於<meta charset="utf-8">區塊鏈的未來政策？</li><li><meta charset="utf-8">區塊鏈對於未來潛在的應用場景？</li></ul>



<p>以上這些問題，你的答案不同，都會嚴重影響你投資<meta charset="utf-8">區塊鏈的比例，但正確答案沒有人說的準，這已經是接近信仰的問題，你可以反覆的思考，得到屬於你的答案。</p>



<h2>現在是買入時機嗎？</h2>



<p>因為加密貨幣市場有週期性，就算你覺得最近已經暴跌夠多了，夠慘了，慘夠了也該反彈了吧？但其實比特幣也只是回歸到長期歷史均價，也就是說，真正熊市時，市場還可以再往下探，深不見底。例如以下實驗：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">altc = c.pct_change().mean(axis=1).add(1).cumprod()
(altc/altc.ffill().rolling(250*6).mean()).plot()

(c['BTCUSDT']/c['BTCUSDT'].ffill().rolling(250*6).mean()).plot()
pd.Series(1, index=c.index).plot()</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" width="383" height="262" src="https://www.finlab.tw/wp-content/uploads/2022/02/image-2.png" alt="image 2" class="wp-image-3262" srcset="https://www.finlab.tw/wp-content/uploads/2022/02/image-2.png 383w, https://www.finlab.tw/wp-content/uploads/2022/02/image-2-300x205.png 300w" sizes="(max-width: 383px) 100vw, 383px" title="Python 實作：現在該不該買山寨幣？ 38"></figure>



<p>上圖，藍色<meta charset="utf-8">山寨幣一年漲跌幅數據（不是累計的，而是與去年同期比較的報酬率），最高來到 7 也就是一年獲利 600% 倍，最低大約是 0.26 也就是一年虧損了 -74%。你仔細觀察靠近 2022-2 當前的時間軸，對應到的數值是 0.87，比最低的 0.26 高出不少！！！這也就代表，以歷史來借鏡，最低還可以再跌 50%！</p>



<h3>2021，2022，不應該用一樣的投資方式</h3>



<p>我去年比較偏重選幣，並且承受持續在下跌的風險，不出場。這樣的好處是不會錯過上漲的時機。因為擇時買入賣出的資金利用率不太好，會有很多閒置的資金，雖然可以穩定風險，但是獲利也會相對減少（這邊討論的是現貨），這在 2021 年帶給我非常好的報酬。然而當資金越滾越大，且國際市場資金慢慢收緊，另外加密貨幣牛市倒數中，勢必得越來越謹慎，才不會血本無歸。</p>



<h3>2022 金融氾濫行情即將結束</h3>



<p>我所說的牛市倒數中，是指時間上，而非價格上，你真要說我，比特幣年底前破 10 萬，這也是可能的。但由於這兩年行情真的算滿好的，有起有落，不可不慎。加密貨幣屬於風險商品，所以走勢會跟股票等風險市場連動。當股市下跌，經濟不景氣時，加密貨幣市場也會連帶受影響。我也不是說股市不會漲，而是覺得 2022 可能要接近最後的瘋狂。</p>



<p>所以最近開始研究<meta charset="utf-8">買賣<meta charset="utf-8">山寨幣的時機點。</p>



<h3>買賣<meta charset="utf-8">山寨幣的時機點</h3>



<p>例如像是 <a href="https://www.blockchaincenter.net/altcoin-season-index/" class="rank-math-link" target="_blank" rel="noopener">altcoin season index </a>就是一個很好的指標。衡量比特幣近一個月的報酬率在山寨幣中的排名，我們可以用 Python 很快的實作：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">c.pct_change(20*6).rank(pct=True, axis=1)['BTCUSDT']['2021-5-1':].plot()
altc['2021-5':].plot(secondary_y=True)</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" width="391" height="274" src="https://www.finlab.tw/wp-content/uploads/2022/02/image-3.png" alt="image 3" class="wp-image-3263" srcset="https://www.finlab.tw/wp-content/uploads/2022/02/image-3.png 391w, https://www.finlab.tw/wp-content/uploads/2022/02/image-3-300x210.png 300w" sizes="(max-width: 391px) 100vw, 391px" title="Python 實作：現在該不該買山寨幣？ 39"></figure>



<p>藍色數值為比特幣的排名，當排名接近 1.0 代表排名靠前，0 則是排名靠後。而橘色的是山寨幣的價格走勢。</p>



<p>當<meta charset="utf-8">比特幣排名靠前面時，都是<meta charset="utf-8">山寨幣價格相對來說比較低的時刻，反之，當<meta charset="utf-8">比特幣排名靠後，代表<meta charset="utf-8">山寨幣都超越了<meta charset="utf-8">比特幣的漲幅，那山寨幣市場可能會有小泡沫。用這種方式可以確認，目前 2022 年 2 月，可能是潛在較適合逢低佈局<meta charset="utf-8">山寨幣的時刻喔！不過投資市場沒人說的準，只能下好離手，聽天由命了。大家可以用上述程式碼，再去作一些更精密的回測，說不定會有不錯的發現喔！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/python-%e5%af%a6%e4%bd%9c%ef%bc%9a%e7%8f%be%e5%9c%a8%e8%a9%b2%e4%b8%8d%e8%a9%b2%e8%b2%b7%e5%b1%b1%e5%af%a8%e5%b9%a3%ef%bc%9f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3259</post-id>	</item>
		<item>
		<title>5 個步驟設定選股條件，股票爆發力更上一層樓！</title>
		<link>https://www.finlab.tw/5-%e5%80%8b%e6%ad%a5%e9%a9%9f%e8%a8%ad%e5%ae%9a%e9%81%b8%e8%82%a1%e6%a2%9d%e4%bb%b6%ef%bc%8c%e8%82%a1%e7%a5%a8%e7%88%86%e7%99%bc%e5%8a%9b%e6%9b%b4%e4%b8%8a%e4%b8%80%e5%b1%a4%e6%a8%93%ef%bc%81/</link>
					<comments>https://www.finlab.tw/5-%e5%80%8b%e6%ad%a5%e9%a9%9f%e8%a8%ad%e5%ae%9a%e9%81%b8%e8%82%a1%e6%a2%9d%e4%bb%b6%ef%bc%8c%e8%82%a1%e7%a5%a8%e7%88%86%e7%99%bc%e5%8a%9b%e6%9b%b4%e4%b8%8a%e4%b8%80%e5%b1%a4%e6%a8%93%ef%bc%81/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Sun, 21 Nov 2021 16:43:32 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=2940</guid>

					<description><![CDATA[策略公開，大部分都會無效化，唯有自己打造，永不失效 我們在新的選股平台中，分享了一堆策略，但是這些是公開的策略 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<blockquote class="wp-block-quote"><p>策略公開，大部分都會無效化，唯有自己打造，永不失效</p></blockquote>



<p>我們在<a href="https://ai.finlab.tw/strategies" class="rank-math-link" target="_blank" rel="noopener">新的選股平台中，分享了一堆策略</a>，但是這些是公開的策略，大家都看得到，所以難保之後不會失效。所以唯有打造自己的策略，你才更有底氣，在股票市場中生存！</p>



<p>設計股票策略，對剛開始進入股市，或是剛使用選股系統的人來說，並不簡單。我有看過初學者，花很多精力，直接爆寫長達 100 行程式碼選股，用了超多條件，但效果還是不太好。所以決定分享一個 SOP，只要遵照以下幾個步驟，通常都可以找到不錯的策略，量化交易不難，而設計策略其實可以很單純。</p>



<h2>1. 尋找因子</h2>



<p>這邊說的因子，也不是什麼特別的東西，而是日常所使用的一些指標，可以是「股東權益報酬率」或是「RSI」指標，不論是技術面或是基本面，只要是可以量化的數值，都可以拿來當作因子。可以到我們的<a href="https://ai.finlab.tw/database" class="rank-math-link" target="_blank" rel="noopener">資料庫搜索</a>看看，是否有你感興趣的資料。我們提供了大部分股票的資料，除了分點券商外（太貴還沒買），你想的到的因子都可以製作。目前（2021/11/21）完全免費，你可以趁這個時機全部下載下來試試看。</p>



<h2>2. 判定效果</h2>



<p>找到了想選股的資料，我們要先確定因子是否有效果，你要設計一個條件式，來測試單一因子是否有選股的效果。以「股東權益報酬率」來說明，我會設計從寬鬆到嚴苛，撰寫選股條件，範例如下：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">from finlab import data
roe = data.get('fundamental_features:ROE稅後')

roe_rank = roe.rank(axis=1, pct=True)
stocks1 = roe_rank &gt; 0.2 # 寬鬆，選擇前 80% 的股票
stocks2 = roe_rank &gt; 0.4
stocks3 = roe_rank &gt; 0.6
stocks4 = roe_rank &gt; 0.8 # 嚴苛，選擇前 20% 的股票</code></pre>



<p>我會將上述四個條件都試試，回測總報酬率或是夏普值，以程式碼中的 stocks4 為範例：</p>



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

report = backtest.sim(stocks4, resample="Q", fee_ratio=0, tax_ratio=0))</code></pre>



<p>這邊的換股頻率是「每季 (Q)」，因為「股東權益報酬率」是每個季度會公佈，所以我們只關注每季價格的變化，但假如你的指標是價格，則可以使用其他的頻率，例如「每週 (W)」或是「每月 (M)」。有些人製作因子，也會用「近四季平均或累計」來表示，並且以「每年 (A)」為單位換股，這樣也是可以的。假如上述回測有長期打贏大盤，那可以說，這個因子可能是有用的！</p>



<p>但很多人看回測看的是「報酬率累計是否比大盤高」，這是不正確的做法，一個極端的例子就是，當一個策略報酬率如下：</p>



<ul><li>第一天比大盤多 3%</li><li>之後每一天都跟大盤的報酬率一模一樣。</li></ul>



<p>這樣此策略的「報酬率累加」永遠都比大盤的高，但實際交易並沒有顯著的效果。所以平常除了看 alpha beta sharpe 之外，也可以目測「報酬率累計跟大盤差距越來越大」，假如有的話，才代表此因子時時刻刻都在發揮作用。</p>



<h2>3. 決定是否棄用因子</h2>



<p>假如你發現此因子沒有任何作用（回測都比大盤爛），請你先直接棄用，而不是加入其他的因子。有點像是蓋大樓，假如地基沒有打穩，地震就會垮。你要設想 2000 檔股票裡面，其實只有幾檔是寶，假如今天用了差勁的因子不小心過濾移除了，錯過挑選它的好機會，有可能只選出一些烏合之眾，就算再用好的濾網，也選不出好股票。所以請直接將此因子移除吧！</p>



<h2>4. 篩選條件</h2>



<p>當做完上述檢測，你發現這個因子真的有用！就可以開始針對因子設定條件，你可以將第二步驟已經回測的數據拿出來，例如總報酬率如下（示意）：</p>



<ol><li>篩選出前 80％ 的股票：總報酬 300%</li><li>篩選出前 60% 的股票：總報酬 500%</li><li>篩選出前 40％ 的股票：總報酬 700%</li><li>篩選出前 20% 的股票：總報酬 700%</li></ol>



<p>以上四種條件，從寬鬆到嚴格，你會使用哪一個條件呢？要記住我們的目的在於「總體報酬率高」及「有效分散風險」，前者當然是為了賺錢，而後者是為了「少賠錢」。有了以上得目的，相信你不難選出第三個：「篩選出前 40％ 的股票」當作是最佳的條件了。你會發現 3 跟 4 篩選出的股票數量不同，但是報酬率都差不多，在同樣的報酬率下，越多股票對你越有利，除了分散風險外的好處，由於樣本數多，也不太會過擬合。還有額外的好處是：你保留足夠多的股票，可以再加入其他的因子來篩選出更有上漲潛力的股票。</p>



<h2>5. 重複 1~4 步驟</h2>



<p>假如你留有足夠多的股票，這時候就可以再加入因子，看看是否能提升報酬率。有些因子之間會有加成效果，而有些則沒有。你甚至可以調整因子篩選的順序，不過會建議主要的因子不要再改順序了，除非你想做一個完全不同的策略。至於到底有多少因子才夠呢？其實並不一定，但最終目的是篩選出 20～30 檔股票以內，畢竟太多股票對一般人來說也是很難一次買齊。</p>



<p>選擇較少股票，這其實是一件不容易的事情，因為股票少，整體投資組合勢必波動變大。因此在股票少的狀況下，必須確保策略報酬波動小，就是這個階段的關鍵。</p>



<p>新因子額外篩選股票，程式的寫法，如下：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">stocks4 = (stocks4 * new_factor).is_largest(30)</code></pre>



<p>其中 stocks4 就是原本篩選出來的股票，數值為 0 (False) 或 1 (True) 代表是否被選入，而 new_factor 就是新因子，這樣就可以用新的因子篩選出前 30 名的股票，這邊的 new_factor 是大於零，且越大越好。假如所有股票的 new_factor 同時有正負，要記得加上一個 threshold，讓 new_factor + th 的數值一定為正：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">stocks1 = (stocks1 * (new_factor + th)).is_largest(10)</code></pre>



<p>組合好就可以將篩選完的股票進行回測囉！</p>



<pre class="wp-block-code"><code lang="python" class="language-python">backtest.sim(stocks1, resample='Q')</code></pre>



<p>以下還有一些複雜的方法，但是個人覺得用以上的方法找好策略已經綽綽有餘，除非你每一種因子都已經玩很無聊，那以下比較進階的方法就適合你：</p>



<h2>進階：非線性</h2>



<p>這個世界並不是線性的，以上述的範例「股東權益報酬率」來說，我們只是假設其數值越高越好，將因子與績效之間的關係假想成是線性。但現實生活中，報酬率與因子之間可能是非線性的，例如「股東權益報酬率」太高，有可能會有均值回歸的狀況發生，使未來股票走勢不好。假如希望可以做的更精細，可以在上述第四步驟中，再額外調整篩選股票的區間段，例如將股票依照因子大小分成五份來回測。</p>



<h2>進階：N 階因子</h2>



<p>另外，上述步驟中，是假設因子之間並沒有關連，但事實上它們之間會交互作用，例如你單純買「投信買進」的股票可能沒什麼用，但是假如你買「股價暴跌投信還買進」的股票，可能就有用。可以在上述第四步驟中，再額外加入這種反向因子，但是條件越多就會越複雜，要盡量避免過於複雜而導致過擬合喔！</p>



<h2>總結</h2>



<p>選股策略千百種，上述方法是我覺得一定可以產生出好策略的 SOP，但關鍵在於，不要盲目加入一堆條件，把好的股票都篩掉了！要慎選因子。現在就開始使用我們免費公開的超好用回測系統來選股吧！</p>



<p>https://ai.finlab.tw</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/5-%e5%80%8b%e6%ad%a5%e9%a9%9f%e8%a8%ad%e5%ae%9a%e9%81%b8%e8%82%a1%e6%a2%9d%e4%bb%b6%ef%bc%8c%e8%82%a1%e7%a5%a8%e7%88%86%e7%99%bc%e5%8a%9b%e6%9b%b4%e4%b8%8a%e4%b8%80%e5%b1%a4%e6%a8%93%ef%bc%81/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2940</post-id>	</item>
		<item>
		<title>台股研究室實作風險因子Beta｜單因子選股｜風險因子Beta｜Ep.1</title>
		<link>https://www.finlab.tw/%e5%8f%b0%e8%82%a1%e7%a0%94%e7%a9%b6%e5%ae%a4%e5%af%a6%e4%bd%9c%ef%bd%9c%e5%96%ae%e5%9b%a0%e5%ad%90%e9%81%b8%e8%82%a1%ef%bd%9c%e9%a2%a8%e9%9a%aa%e5%9b%a0%e5%ad%90beta%ef%bd%9cep-1/</link>
					<comments>https://www.finlab.tw/%e5%8f%b0%e8%82%a1%e7%a0%94%e7%a9%b6%e5%ae%a4%e5%af%a6%e4%bd%9c%ef%bd%9c%e5%96%ae%e5%9b%a0%e5%ad%90%e9%81%b8%e8%82%a1%ef%bd%9c%e9%a2%a8%e9%9a%aa%e5%9b%a0%e5%ad%90beta%ef%bd%9cep-1/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Sun, 09 May 2021 11:58:26 +0000</pubDate>
				<category><![CDATA[股票策略]]></category>
		<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[技術面]]></category>
		<category><![CDATA[選股策略]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=2655</guid>

					<description><![CDATA[beta大的台股投組放中長期小心閃尿啊，瘋狗流愛抓高beta的，停損要設好，長期凹下場不好。中長期投組可納入風險因子當作篩選因子，低波動進場，放著好安心。]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://www.books.com.tw/products/0010858230" target="_blank" rel="noopener"><img loading="lazy" width="261" height="336" src="https://www.finlab.tw/wp-content/uploads/2021/05/台股研究室.jpeg" alt="台股研究室" class="wp-image-2657" srcset="https://www.finlab.tw/wp-content/uploads/2021/05/台股研究室.jpeg 261w, https://www.finlab.tw/wp-content/uploads/2021/05/台股研究室-233x300.jpeg 233w" sizes="(max-width: 261px) 100vw, 261px" title="台股研究室實作風險因子Beta｜單因子選股｜風險因子Beta｜Ep.1 40"></a><figcaption>圖片來源：博客來</figcaption></figure></div>


<p></p>



<p>市面上論述量化交易的中文著作不多，講台股的更少，葉怡成教授去年出版的「<a href="https://www.books.com.tw/products/0010858230" rel="sponsored noopener" class="rank-math-link" target="_blank">台股研究室</a>」是鳳毛麟角的大作，以各種選股因子與模型回測最近12年的台灣股市，<br>全面檢視台股投資的方法。涵蓋價值因子、獲利因子、風險因子、規模因子、慣性因子，分析全面，回測與分析的注意事項也有點到，針對單因子和多因子策略作探討，比較可惜的是該書無提供相關代碼，這點Finlab課程的內容剛好可以補上，利用Python課程的技巧親身實作葉教授的分析，驗證的同時，更能內化書中的內容，改良成屬於自己的策略。這一系列會從單因子開始實作。</p>



<h2>風險因子理論基礎</h2>



<p>參考台股研究室Ch.10 &amp; 維基百科</p>



<p>&#8220;&#8221;&#8221;</p>



<p>在投資學上，風險指的是報酬率的不確定性，總風險由非系統風險和系統性風險組成。</p>



<p>非系統風險為特定公司發生的風險，例如罷工、火災、經理人背信等等，可透過多元化投資組合抵銷。</p>



<p>系統風險發生於企業外部，無法被多元化投資組合抵銷，也稱作市場風險，系統風險的大小可用<img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/7ed48a5e36207156fb792fa79d29925d2f7901e8" alt="\beta " title="台股研究室實作風險因子Beta｜單因子選股｜風險因子Beta｜Ep.1 41">&nbsp;(beta)系數衡量。表示一段時間內股票或投資組合的漲跌比率相對於市場的漲跌比率的比值。例如beta=1.3，則代表市場漲跌1%，投資組合的漲跌期望值為1.3%，與市場走勢同步，波動較市場大。若beta=-0.5%則代表市場漲跌1%，投資組合的漲跌期望值為-0.5%，與市場走勢異步，波動較市場小。</p>



<p>beta係數利用回歸的方法計算，可簡單歸類：<br>beta係數絕對值等於1即證券的價格與市場一同變動。<br>beta係數絕對值高於1即證券價格比總體市場更波動。<br>beta係數絕對值低於1即證券價格的波動比市場為低。<br>如果beta =0表示沒有風險。</p>



<p>其他相關理論內容可自行參考書籍或<a href="https://kopu.chat/2017/05/29/%E5%8D%81%E5%88%86%E9%90%98%E8%AE%80%E6%87%82%E6%8A%95%E8%B3%87%E7%90%86%E8%B2%A1%E5%AD%B8-%E6%8A%95%E8%B3%87%E5%9F%BA%E9%87%91%E4%B8%80%E5%A4%A9%E5%88%B0%E6%99%9A%E8%81%BD%E5%88%B0%E7%9A%84/" class="rank-math-link" target="_blank" rel="noopener">網站資料</a></p>



<p>&#8220;&#8221;&#8221;</p>



<h2>投資組合Beta實作</h2>



<p>完整程式碼連結置底。</p>



<p>帶入投資組合標的與權重、還原股價、benchmark資料即可做成，這邊使用發行量加權報酬指數，使用python內建的統計套件“from scipy import stats”的linregress(線性回歸)計算出beta和alpha，</p>



<pre class="wp-block-code"><code lang="python" class="language-python">tickers = ['1101', '2330', '6261', '6263', '9939']
weights = [0.1,0.2,0.25,0.25,0.2]

def get_alpha_beta(tickers:list,weights:list,start_date=None,end_date=None,limit=None,price_data=None,benchmark_ret=None,plot=False):
    if price_data is None:
        price_data =data.get_adj()
    price_data = price_data[tickers]
    if start_date:
        price_data = price_data[price_data.index &gt;= start_date]
    if end_date:
        price_data = price_data[price_data.index &lt;= end_date]
    if limit:
        price_data = price_data.iloc[-limit:]
    ret_data = price_data.replace(0,np.nan).fillna(method='ffill').pct_change()[1:]
    port_ret = (ret_data * weights).sum(axis = 1)
    if benchmark_ret is None:
        benchmark_ret=data.get('benchmark_return:發行量加權股價報酬指數').pct_change()[1:].loc[port_ret.index].iloc[:,-1]
    if plot:
        df=pd.concat([benchmark_ret, port_ret], axis=1)
        df.columns=['benchmark','port']
        sns.regplot(x='benchmark',y='port',data=df)
        plt.xlabel("Benchmark Returns")
        plt.ylabel("Portfolio Returns")
        plt.title("Portfolio Returns vs Benchmark Returns")
        plt.show()
    beta, alpha = stats.linregress(benchmark_ret.values,port_ret.values)[:2]
    return beta, alpha

get_alpha_beta(tickers,weights,'2020-1-1','2021-4-30',plot=True)</code></pre>



<p class="has-text-align-center"><img loading="lazy" width="401" height="278" class="wp-image-2658" style="width: 400px" src="https://www.finlab.tw/wp-content/uploads/2021/05/beta_port.png" alt="beta port" srcset="https://www.finlab.tw/wp-content/uploads/2021/05/beta_port.png 401w, https://www.finlab.tw/wp-content/uploads/2021/05/beta_port-300x208.png 300w" sizes="(max-width: 401px) 100vw, 401px" title="台股研究室實作風險因子Beta｜單因子選股｜風險因子Beta｜Ep.1 42"><br>　　</p>



<h2>Beta 選股策略</h2>



<p>台股研究室採用T+2季做為財報消息公布後的進場點，Q1-Q4分別在同年<br>7月、同年11月、隔年1月、隔年4月的1日進場，避免先視偏差，採取比較延遲進場的保守作法，實務上一般人也很難跟消息跟很緊，這樣的設定是合理的。</p>



<p>選股與回測策略條件如下</p>



<p>1. beta以進場日前200天計算。</p>



<p>2. 每回合持有一季，不帶入稅費計算，主要看分組趨勢。</p>



<p>3. 參考台股研究室，beta分10組，分組的數值由大到小，第1組為beta最大前10%，第10組為beta最小的10%，以此類推。分組回測主要是方便觀察單因子是否為單調線性，若是，策略效果較顯著，若為曲折線型，則參考度較小。</p>



<p>程式細節：<br>使用pandas的rank與cut分組，cut比較少在使用，執得認識一下。<br>https://pandas.pydata.org/docs/reference/api/pandas.cut.html</p>



<pre class="wp-block-code"><code lang="python" class="language-python">beta_cal_range=200
now = datetime.now().strftime("%Y-%m-%d")
dates=pd.date_range(start='2008-1-1', end=now , freq='3MS')

df_set=[]
for date in dates:
    print(f'process {date}')
    price_data =data.get_adj()
    port_ret = price_data[price_data.index &lt; date].replace(0,np.nan).fillna(method='ffill').pct_change()[1:].iloc[-beta_cal_range:].dropna(axis=1)
    benchmark_ret=data.get('benchmark_return:發行量加權股價報酬指數').pct_change()[1:].loc[port_ret.index].iloc[:,-1]
    df=pd.DataFrame([{'stock_id':i,'beta':stats.linregress(benchmark_ret.values,port_ret[i])[0] } for i in port_ret.columns])
    df['date']=date
    df['beta_rank']=df['beta'].rank(pct=True)
    labels=[str(i) for i in range(10,0,-1)]
    df['label']=pd.cut(df['beta_rank'],bins=[i/10 for i in range(0,11,1)], labels=labels)
    df_set.append(df)

df_all=pd.concat(df_set)

label_group=df_all.copy()
label_group=label_group.set_index(['stock_id','date'])
add_profit_prediction(label_group)
label_group=label_group.groupby(['date','label'])[['beta','return']].mean()
label_group=label_group.dropna()
label_group=label_group.reset_index()
label_group['cumprod_return']=label_group.groupby(['label'])[['return']].cumprod()
label_group</code></pre>



<h2>回測結果</h2>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="244" src="https://www.finlab.tw/wp-content/uploads/2021/05/newplot-1024x244.png" alt="newplot" class="wp-image-2659" srcset="https://www.finlab.tw/wp-content/uploads/2021/05/newplot-1024x244.png 1024w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-300x72.png 300w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-768x183.png 768w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-1536x366.png 1536w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot.png 1678w" sizes="(max-width: 1024px) 100vw, 1024px" title="台股研究室實作風險因子Beta｜單因子選股｜風險因子Beta｜Ep.1 43"><figcaption>各季大部分分組呈現左高右低，beta小的組別在多頭沒那麼強勢時，風險比beta大的組別好，尤其是金融海嘯的空頭時期。近期多頭強勢，beta大的吃香。</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="244" src="https://www.finlab.tw/wp-content/uploads/2021/05/newplot-1-1024x244.png" alt="newplot 1" class="wp-image-2660" srcset="https://www.finlab.tw/wp-content/uploads/2021/05/newplot-1-1024x244.png 1024w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-1-300x72.png 300w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-1-768x183.png 768w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-1-1536x366.png 1536w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-1.png 1678w" sizes="(max-width: 1024px) 100vw, 1024px" title="台股研究室實作風險因子Beta｜單因子選股｜風險因子Beta｜Ep.1 44"></figure>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://www.finlab.tw/wp-content/uploads/2021/05/newplot-2-1024x320.png" alt="newplot 2" class="wp-image-2661" width="580" height="181" srcset="https://www.finlab.tw/wp-content/uploads/2021/05/newplot-2-1024x320.png 1024w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-2-300x94.png 300w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-2-768x240.png 768w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-2-1536x481.png 1536w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-2.png 1678w" sizes="(max-width: 580px) 100vw, 580px" title="台股研究室實作風險因子Beta｜單因子選股｜風險因子Beta｜Ep.1 45"><figcaption>beta越大的組別(label小的)下一季的股票波動很大，且大跌次數多。beta越小的組別(label大的)下一季的股票波動較小，跌次數少，上漲仍會吃到，雖然抗跌抗漲，但抗漲的幅度沒想像中大，抗跌的好處蓋過抗漲。</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="320" src="https://www.finlab.tw/wp-content/uploads/2021/05/newplot-3-1024x320.png" alt="newplot 3" class="wp-image-2662" srcset="https://www.finlab.tw/wp-content/uploads/2021/05/newplot-3-1024x320.png 1024w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-3-300x94.png 300w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-3-768x240.png 768w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-3-1536x481.png 1536w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-3.png 1678w" sizes="(max-width: 1024px) 100vw, 1024px" title="台股研究室實作風險因子Beta｜單因子選股｜風險因子Beta｜Ep.1 46"><figcaption>長期獲利累積下來，beta小的組別9、10表現很好，累積報酬率明顯大過beta大的組別，回撤率小，穩穩向上。</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://www.finlab.tw/wp-content/uploads/2021/05/newplot-4-1-1024x244.png" alt="newplot 4 1" class="wp-image-2664" width="580" height="138" srcset="https://www.finlab.tw/wp-content/uploads/2021/05/newplot-4-1-1024x244.png 1024w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-4-1-300x72.png 300w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-4-1-768x183.png 768w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-4-1-1536x366.png 1536w, https://www.finlab.tw/wp-content/uploads/2021/05/newplot-4-1.png 1678w" sizes="(max-width: 580px) 100vw, 580px" title="台股研究室實作風險因子Beta｜單因子選股｜風險因子Beta｜Ep.1 47"><figcaption>beta小的組別明顯選出來的標的以小型股(冷門股)居多，lebel.10股本中位數為60000張，lebel.9股本中位數為60000張。股本趨勢隨beta越大上升。對資金較大的人，流動性需要考慮。</figcaption></figure>



<h2>結論</h2>



<p>實作出來的結果與葉教授書中圖片的結果相似，單因子策略有效。證實冒著較高的風險，不一定報酬較高，反而冒著較低的波動風險，長期能獲得較好的績效。相關結果的解釋可參閱書中內容。</p>



<p>beta大的台股投組放中長期小心閃尿啊，瘋狗流愛抓高beta的，停損要設好，長期凹下場不好。中長期投組可納入風險因子當作篩選因子，低波動進場，放著好安心。</p>



<p>beta單因子策略即始劃分10組，用最小beta的投資仍有百檔標的，需要進一步搭配其他因子減少標的和優化，考量流動性問題，將第9組一併納入可減少部分流動性風險。</p>



<h2><a href="https://colab.research.google.com/drive/1CzssV_XTqkOjRqdi6YltkYxpctjWBSAH?usp=sharing" class="rank-math-link" target="_blank" rel="noopener">colab程式連結</a></h2>



<p>供各位先進參考</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/%e5%8f%b0%e8%82%a1%e7%a0%94%e7%a9%b6%e5%ae%a4%e5%af%a6%e4%bd%9c%ef%bd%9c%e5%96%ae%e5%9b%a0%e5%ad%90%e9%81%b8%e8%82%a1%ef%bd%9c%e9%a2%a8%e9%9a%aa%e5%9b%a0%e5%ad%90beta%ef%bd%9cep-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2655</post-id>	</item>
	</channel>
</rss>
