<?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>財經PYTHON教學 &#8211; FinLab</title>
	<atom:link href="https://www.finlab.tw/tag/%E8%B2%A1%E7%B6%93python%E6%95%99%E5%AD%B8/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.finlab.tw</link>
	<description>深入淺出的量化投資，讓你在在茫茫股海中，找到專屬於自己的投資方法</description>
	<lastBuildDate>Fri, 12 Aug 2022 21:31:42 +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>財經PYTHON教學 &#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>年報酬30％的泡沫選股策略秘技大公開 &#124; 實際下單做實驗 &#124; FinLab 財經實驗室</title>
		<link>https://www.finlab.tw/bitcoin-stock-bubble-analysis-lppl-strategy/</link>
					<comments>https://www.finlab.tw/bitcoin-stock-bubble-analysis-lppl-strategy/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Fri, 22 Jan 2021 07:21:45 +0000</pubDate>
				<category><![CDATA[PYTHON財經]]></category>
		<category><![CDATA[FinLab YouTube]]></category>
		<category><![CDATA[大盤漲跌]]></category>
		<category><![CDATA[股票策略]]></category>
		<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[選股策略]]></category>
		<category><![CDATA[PYTHON]]></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=2479</guid>

					<description><![CDATA[這支影片將教你，如何打造歷史績效 30％ 的泡沫選股策略，並且用一百萬測試看看
我們現在處於一個大泡泡中，
全球指數漲翻天，
更不缺像是比特幣、特斯拉這種倍數增長的個股，
你要怎麼在這樣的炒作行情下獲利，甚至是高效獲利，
將小泡泡吹成大泡泡，
就讓我們用數學的方法算給你看！]]></description>
										<content:encoded><![CDATA[
<p>這支影片將教你，如何打造歷史績效 30％ 的泡沫選股策略，並且用實單交易測試給你看！</p>



<p>我們現在處於一個大泡泡中，</p>



<p>全球指數漲翻天，</p>



<p>更不缺像是比特幣、特斯拉這種倍數增長的個股，</p>



<p>你要怎麼在這樣的炒作行情下獲利，甚至是高效獲利，</p>



<p>將小泡泡吹成大泡泡，</p>



<p>就讓我們用數學的方法算給你看！</p>



<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<p class="responsive-video-wrap clr"><iframe title="【 股票投資教學】年報酬30％的泡沫選股策略秘技大公開 | 實際下單做實驗 | FinLab 財經實驗室" width="1200" height="675" src="https://www.youtube.com/embed/8yPkQjaFVEk?start=342&#038;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
</div></figure>



<p>當前全球股市指數都頻頻創高，</p>



<p>有些人引以為戒，調節部位，</p>



<p>有些人享受當下，乘風破浪，多賺一把，</p>



<p>你是哪一種人呢？</p>



<h2>LPPLS 如何幫助我們選股呢？</h2>



<p>我們今天要介紹的選股方式，</p>



<p>就是利用泡沫，將你的資產越吹越大！</p>



<p>具體而言要如何辦到呢？</p>



<p>這個影片中你會學到如何用 LPPL 來選股，</p>



<p>找出潛在的泡沫股票，</p>



<p>讓市場的瘋狂將這些標的推升，</p>



<p>在泡沫吹大後，</p>



<p>趁著還沒有爆掉之前，趕快出脫，</p>



<p>再轉手下一檔股票，不斷的轉換！</p>



<p>上禮拜我們介紹了 LPPLS 泡沫檢視器，</p>



<p>可以幫你預測泡沫何時來臨，以及泡沫發生的機率，</p>



<p>並且免費贈送<a href="https://www.youtube.com/redirect?v=z4aIbe2jVVE&amp;redir_token=QUFFLUhqa3hSTmU1N3A0MnZzNWVUX2ZBdHZtSnB4ZDlYd3xBQ3Jtc0tuZnVYSG0tTUUyb1o1UnZiMUZkQXR5d0lPMmRJNkJuV3k0ZmIyWDFEY28wMnZHcTZ2bDMxRjIzczlFbUhlVmlEWjNSeV9pMXRtZnMzZUx4TnhyQ0tmTllCNWwyR05QOTd4Q1RURzlnNVZvLWpUcUVqbw%3D%3D&amp;event=video_description&amp;q=https%3A%2F%2Fcolab.research.google.com%2Fdrive%2F1oEMk8-yvhaWHP9DwE6bO_uzazPcvEvAY%3Fusp%3Dsharing" target="_blank" aria-label="一套工具 (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">一套工具</a>，讓你診斷，</p>



<p>還沒看的，可以先去看<a href="https://www.finlab.tw/bitcoin-stock-bubble-analysis-lppl/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">上一集</a>，</p>



<p>看完那篇，就會更瞭解其中的數學原理喔！</p>



<p>LPPLS 要如何檢測是否有泡沫呢？</p>



<p>簡單來講，LPPLS 假如想要預測當下的泡沫</p>



<p>就會使用很多不同大小的時間窗格，</p>



<p>針對每個時間窗格，都去檢測時間序列是否有泡沫，</p>



<p>由於 LPPL 演算法並不穩定，所以每個時間窗格，都會給出不同的答案</p>



<p>有些時間窗格會顯示有泡沫，而有些則不會。</p>



<p>所以 LPPLS 就是將所有的結果匯總起來，</p>



<p>例如範例中，有18個時間窗格，那其中有5個窗格顯示有泡沫，</p>



<p>則發生泡沫的機率就是 5 / 18</p>



<p>那我們就來做實驗吧！</p>



<p> </p>



<p>我們實驗涉及了台股2000檔股票、</p>



<p>乘以共3000多天的歷史資料！</p>



<p>乘以每天 18 個時間窗格的分析</p>



<p>總共進行了4 百萬次的 LPPL 分析</p>



<p>只換你一個讚和訂閱就好了，是不是很划算？</p>



<h2>用 LPPLS 分析 0050</h2>



<p>接下來就讓我們來看一下分析好的結果吧！</p>



<p>我們針對每檔股票 每20天跑一次LPPL，</p>



<p>以台灣50ETF為例子，我們可以看到</p>



<p>紅色的是價格，</p>



<p>而藍色為每20天的 LPPL 的顯示結果，</p>



<p>數值高代表可能有泡沫，</p>



<p>數值低代表是反泡沫，也就是可能會有觸底反彈的事件發生</p>



<p>由於我們是每20天執行一次LPPL</p>



<p>所以訊號會比較稀疏</p>



<p>但大致上還是可以預測低點或是高點</p>



<p><img loading="lazy" width="602" height="340" src="https://lh6.googleusercontent.com/L3cIiZU8vxU_aIf92jaRswBfDin6FW8a-jdFBsfPMM_2-d9DjWsvMKEnZ_GQN8B7rH9O1vG2GswrTtETp9VCJ4I5iSuBKDIGqnBboRm48G9MWkBJ-nlbXEfX40ddQsf6YTiCzEOv" alt="L3cIiZU8vxU aIf92jaRswBfDin6FW8a jdFBsfPMM 2 d9DjWsvMKEnZ GQN8B7rH9O1vG2GswrTtETp9VCJ4I5iSuBKDIGqnBboRm48G9MWkBJ nlbXEfX40ddQsf6YTiCzEOv" title="年報酬30％的泡沫選股策略秘技大公開 | 實際下單做實驗 | FinLab 財經實驗室 1"></p>



<h2>LPPLS 台股總體分析</h2>



<p>在下面的圖中，我們針對每一檔股票，</p>



<p>都去執行上述 LPPL 的計算</p>



<p>就可以得到在某個時刻，</p>



<p>台股整體究竟有幾檔股票有泡沫，或是反向泡沫</p>



<p>首先，我們可以以2020年底，繪製出有多少股票可能會有泡沫，並且泡沫的程度是多少。</p>



<p>橫軸是LPPL得分，就跟我們剛剛說的一樣，</p>



<p>數值是正的代表股票越容易有泡沫，</p>



<p>0代表不會有泡沫</p>



<p>數值是負的代表股票可能有反向泡沫，</p>



<p>而縱軸則是得到該分數的股票的數量，</p>



<p>由於2020年底瘋狂上漲，</p>



<p>我們可以看到很多股票都有泡沫的現象</p>



<p>例如滑鼠指的這裡，大約有140檔股票，得分為 1 ，代表140檔股票有潛在泡沫發生，</p>



<figure class="wp-block-image"><img src="https://lh6.googleusercontent.com/rPZJWUppoh8aGciSd_-F3efS-_FIXk31c7jgK-t9-X_N3fcq32hZ4vdKejL7ZSXDipaF8GGSSznwF2lIaoXWSdIwq8g291-P1K1J-OEtFcE9tN96IEtznSjqDurWBU6B0gtYKu1h" alt="rPZJWUppoh8aGciSd F3efS FIXk31c7jgK t9 X N3fcq32hZ4vdKejL7ZSXDipaF8GGSSznwF2lIaoXWSdIwq8g291 P1K1J OEtFcE9tN96IEtznSjqDurWBU6B0gtYKu1h" title="年報酬30％的泡沫選股策略秘技大公開 | 實際下單做實驗 | FinLab 財經實驗室 2"></figure>



<p>另外，我們以2020年疫情崩盤為例子，</p>



<p>可以看到 4 月 8 號時的全體台股，LPPL 分佈圖，</p>



<p>這個分佈圖，大部分的股票得分是負的，代表有反向的泡沫，是反向操作的好時機</p>



<figure class="wp-block-image"><img src="https://lh6.googleusercontent.com/Q6kEOtPi8vQaxCKPo7pDacy8L8LUHc27lNCA23H56mw_U23sc_vmrJX4YBDH8yZUNDz67UuM_dh8S7KzSXZSKzv6p4ZIOAmPMWV0KgzmYJQwicPGAI3SM1Lv1pX_fNgr5w-WxxUf" alt="Q6kEOtPi8vQaxCKPo7pDacy8L8LUHc27lNCA23H56mw U23sc vmrJX4YBDH8yZUNDz67UuM dh8S7KzSXZSKzv6p4ZIOAmPMWV0KgzmYJQwicPGAI3SM1Lv1pX fNgr5w" title="年報酬30％的泡沫選股策略秘技大公開 | 實際下單做實驗 | FinLab 財經實驗室 3"></figure>



<p>我們可以將每20天的股票，</p>



<p>所有得分加總起來會得到下圖，</p>



<p>紅色是加權指數報酬率，</p>



<p>藍色是所有股票得分總和，</p>



<p>設計一個簡單的策略，</p>



<p>當得分來到-500以下，</p>



<p>並且分數逐底時，自信進場</p>



<p>這些時刻就是自信進場接刀，賭身家的時間了！（開玩笑的）</p>



<figure class="wp-block-image"><img src="https://lh4.googleusercontent.com/DDfe1U6nJ9qyOIJH22fl7XXYs7tRKs7OA6hrLq-5mPAyUE3h75tHTB3fKvSuvQLHbNxNFv5fsP_I0ZyOPmQOqOzGH6VDTV97P9Hz5LFBV7HQfzUCg_TqJ-bgbVsy8DX6-FaazWaU" alt="DDfe1U6nJ9qyOIJH22fl7XXYs7tRKs7OA6hrLq 5mPAyUE3h75tHTB3fKvSuvQLHbNxNFv5fsP I0ZyOPmQOqOzGH6VDTV97P9Hz5LFBV7HQfzUCg TqJ bgbVsy8DX6 FaazWaU" title="年報酬30％的泡沫選股策略秘技大公開 | 實際下單做實驗 | FinLab 財經實驗室 4"></figure>



<h2>平時如何應用泡沫選股指標獲利呢？</h2>



<p>但我們可以發現，這種時機點幾年才有一次，</p>



<p>所以平常的時候，要怎麼用LPPL指標獲利呢？</p>



<p>我們這邊可以簡單地來分析一下，</p>



<p>將所有股票依照LPPL的分數，來進行分組，</p>



<p>縱軸是LPPL分數，橫軸持有天數，</p>



<p>而色溫圖則是報酬率</p>



<figure class="wp-block-image"><img src="https://lh3.googleusercontent.com/kOtYnQ3l5cZbFapEVhksTZfH201qh9clgeKlP7YlglrqRm6r5csnvNsa4rJNYuxR5WjPwoTbg_y6uQ-NnNPKKCTpx14_pMe7zI3d8vGaZcvsZDrmaXmZioiZnPfxOzoNsptMs_RW" alt="kOtYnQ3l5cZbFapEVhksTZfH201qh9clgeKlP7YlglrqRm6r5csnvNsa4rJNYuxR5WjPwoTbg y6uQ" title="年報酬30％的泡沫選股策略秘技大公開 | 實際下單做實驗 | FinLab 財經實驗室 5"></figure>



<p>例如，我們看到當LPPL分數為 7 的股票群，未來發生泡沫的機率高，</p>



<p>所以在評分完後的13~19天，可能會崩跌，</p>



<p>另外，當LPPL評分為 -7 ，代表可能有反向泡沫，</p>



<p>雖然會序跌造成虧損，但也會跌深反彈，</p>



<p>我們可以看到滑鼠附近顏色比較跳躍，</p>



<p>代表跌深反彈的時間上非常難抓，</p>



<p>代表接刀困難，很難寫成策略。</p>



<p>不過我們可以看到此圖中最亮的部分，</p>



<p>報酬率平均到達2％之多，很適合高效的選股，</p>



<p>代表這部分的股票，由於上漲的關係</p>



<p>雖然被認為是有泡沫發生的可能，但是發生的機率比較低，</p>



<p>適合做趨勢型的追蹤測略，</p>



<p>接下來我們就可以來設計一個策略</p>



<p>每20天換股一次，平均的買入所有 LPPLS 評分為 N 的股票清單</p>



<p>累積報酬率顯示如下：</p>



<figure class="wp-block-image"><img src="https://lh3.googleusercontent.com/GcX-a6bbCCWUz0ReYehD0dQPXJym3036imi9EDQjmwaZ-iKvcBgd_68NH314arjg3JsTYN8CxMQAL8katfXu_5zt13p2-L-BfVOep05LS4ngZgVDAzxLjbxmF1byegC6B_2SRz7E" alt="GcX a6bbCCWUz0ReYehD0dQPXJym3036imi9EDQjmwaZ iKvcBgd 68NH314arjg3JsTYN8CxMQAL8katfXu 5zt13p2 L" title="年報酬30％的泡沫選股策略秘技大公開 | 實際下單做實驗 | FinLab 財經實驗室 6"></figure>



<p>累積報酬率最好的是LPPLS分數為 2 的股票</p>



<p>其實LPPLS分數為 1～3 的標的，表現的還不錯</p>



<p>但是LPPLS分數為 4、5 的標的，由於泡沫發生的機率增加，</p>



<p>所以導致報酬率小於綠色的大盤</p>



<h2>實單做實驗</h2>



<p>做實驗就要用真槍實彈，不要紙上談兵，</p>



<p>接下來，我們就真的來買入LPPLS分數為2的這些股票，</p>



<p>我們將這些股票平均分散買入，並且測試看看20天後的報酬率！</p>



<p>下圖是使用這個策略的月報酬率分佈結果，可以看到策略的報酬率分佈偏向右邊，</p>



<figure class="wp-block-image"><img src="https://lh6.googleusercontent.com/xXqVxU3nNnXFzmIuDHBt8vhUhMbj2ajR6SXETEw_0A6qObwBfPe7nfrtTK3g1TmQuek8FcBco6_QIjgW5WM32pvD4hm3fvVThd1A0rspAf2ZnVvyUnzZSDsCp33chUgw--x6P-N5" alt="xXqVxU3nNnXFzmIuDHBt8vhUhMbj2ajR6SXETEw 0A6qObwBfPe7nfrtTK3g1TmQuek8FcBco6 QIjgW5WM32pvD4hm3fvVThd1A0rspAf2ZnVvyUnzZSDsCp33chUgw x6P N5" title="年報酬30％的泡沫選股策略秘技大公開 | 實際下單做實驗 | FinLab 財經實驗室 7"></figure>



<p>代表使用這個策略的期望值是正的，是大於 1的。</p>



<p>但是還是有很多個月是小於 1 ，是虧錢的，</p>



<p>這次使用這個策略，每個月的勝率是65％，</p>



<p>對於量化交易來說，我們盡可能製作出一個期望值為正的骰子</p>



<p>但是要獲利的話，短期來說還是得靠運氣</p>



<p>但由於我們做的骰子期望值大於 1</p>



<p>你必需要不斷的骰，持之以恒</p>



<p>才能夠體會它的功效！</p>



<h2>結語</h2>



<p>在留言區輸入股票代號，我們就會告訴你目前他的泡沫指數是不是2</p>



<p>假如是2，就代表是有小泡沫的股票，適合買入，</p>



<p>假如大於 4，就代表泡沫有潛在破裂的可能，要稍微減碼囉！</p>



<p>趕快來檢驗看看吧！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/bitcoin-stock-bubble-analysis-lppl-strategy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2479</post-id>	</item>
		<item>
		<title>2021股票、比特幣崩盤確切時間點 ?! 免費工具大揭密 (附程式碼) &#124; FinLab 財經實驗室</title>
		<link>https://www.finlab.tw/bitcoin-stock-bubble-analysis-lppl/</link>
					<comments>https://www.finlab.tw/bitcoin-stock-bubble-analysis-lppl/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Thu, 14 Jan 2021 05:07:08 +0000</pubDate>
				<category><![CDATA[股票策略]]></category>
		<category><![CDATA[AI看股票]]></category>
		<category><![CDATA[FinLab YouTube]]></category>
		<category><![CDATA[PYTHON財經]]></category>
		<category><![CDATA[加密貨幣]]></category>
		<category><![CDATA[大盤漲跌]]></category>
		<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[PYTHON]]></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=2468</guid>

					<description><![CDATA[你是不是覺得比特幣、股票都漲好高，快要懼高症發作？最近是不是手很癢，很想要趕快買股票開始投資？還是說你已經大賺一波了，想要找一個時機做賣出呢？這個實驗就是專門為你設計的！這篇文章將介紹如何將巴菲特的經典名言「眾人恐懼我貪婪」製作成數學工具應用在股市、加密貨幣、全球指數上！]]></description>
										<content:encoded><![CDATA[
<p>你是不是覺得最近什麼市場都漲好高，快要懼高症發作？<br>最近是不是手很癢，很想要趕快買股票開始投資？<br>還是說你已經大賺一波了，想要找一個時機做賣出呢？<br>這個實驗就是專門為你設計的！</p>



<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<p class="responsive-video-wrap clr"><iframe loading="lazy" title="2021股票、比特幣崩盤確切時間點 ?! 免費工具大揭密 (附程式碼) | FinLab 財經實驗室" width="1200" height="675" src="https://www.youtube.com/embed/z4aIbe2jVVE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
</div></figure>



<p></p>



<p>讓 FinLab 告訴你什麼時候泡沫會破裂<br>讓你在大家瘋狂的時候，獲利了結<br>等到恐懼的時候，再逆勢買進</p>



<h2>金融波動大，要如何高買低賣？</h2>



<p>2020算是金融波動非常大的一年，<br>三月因為疫情關係，台股暴跌到8000多點，<br>大家都覺得完蛋了，於是出清股票，停損觀望，<br>想不到這時候政府國安基金，全球印鈔 QE 救經濟，<br>去年年底，台股又飆升到了 14000 點，<br>簡直就像是坐雲霄飛車一樣！</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="489" src="https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.05.09-PM-1024x489.png" alt="Screen Shot 2021 01 14 at 1.05.09 PM" class="wp-image-2471" srcset="https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.05.09-PM-1024x489.png 1024w, https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.05.09-PM-300x143.png 300w, https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.05.09-PM-768x367.png 768w, https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.05.09-PM-1536x734.png 1536w, https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.05.09-PM-2048x978.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="2021股票、比特幣崩盤確切時間點 ?! 免費工具大揭密 (附程式碼) | FinLab 財經實驗室 8"></figure>



<p id="stock-bitcoin-bubble">要如何買在低點買在高點呢？<br>就要像巴菲特說的一樣，眾人恐懼我貪婪！<br>但這句話其實我們已經聽到爛掉了，具體而言要怎麼實行呢？<br>其實非常困難，例如在三月的時候，股市崩盤，<br>親朋好友都叫你趕快賣掉股票了，你還不賣嗎？<br>那時候疫情剛爆發，感染者成倍數增長，<br>你哪有勇氣說自己是對的？你的勇氣會從哪裡來呢？</p>



<p>答案是從數學來的</p>



<h2>全市場通用的泡沫模型</h2>



<p>今天我們要介紹的泡沫模型<br>是多次預測泡沫包含</p>



<ul><li>1990年納斯達克泡沫</li><li>2000年科技泡沫</li><li>2008年石油危機</li><li>中國市場泡沫</li><li>2009年美國房市泡沫</li><li>還有比特幣2017年泡沫</li></ul>



<p>這個模型的簡稱是 <a href="https://arxiv.org/pdf/1108.0099.pdf" class="rank-math-link" target="_blank" rel="noopener">LPPL</a> 模型<br>全名是 <a href="https://arxiv.org/pdf/1108.0099.pdf" class="rank-math-link" target="_blank" rel="noopener">Log-Periodic Power Law Model</a><br>原理其實就是假設這個世界有兩種人<br>A 和 B<br>首先 A 這類的人，他們是聽從別人建議的人，<br>也就是別人買我就買，看到別人賣我就賣，<br>而 B 是有自我主張的人，<br>也就說他不管別人的建議會按照，自己的行為來做決定，<br>而這個自由市場中，<br>A 跟 B 的訊息會不斷地交換，<br>交互影響對方的選擇。</p>



<p>以你來說好了，<br>有時候你會有自我的主張，<br>也就是對股票進行買賣，<br>但有時候你可能也會聽從別的意見，當作參考<br>每個人都有可能有時候是 A 或者是 B，<br>當今天泡沫高漲的時候，<br>這個價格系統臨界點發生時，<br>會有這麼一瞬間，<br>大家都變成 A，一致做出賣出的決定！<br>導致價格的崩跌。</p>



<h2>LPPL 數學原理</h2>



<p>有了這樣的概念，我們就可以來設計一個價格模型，<br>什麼是價格模型？簡單來講就是一個預測真實世界的公式。<br>LPPL 公式推導非常地複雜，借鏡了統一場論，<br>利用模擬群體的交互作用的總體效應，來大幅化簡模擬的複雜度。</p>



<p>下圖中，我們用圖讓大家更了解這個公式的數學原理：</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="915" height="404" src="https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.00.53-PM.png" alt="Screen Shot 2021 01 14 at 1.00.53 PM" class="wp-image-2469" srcset="https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.00.53-PM.png 915w, https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.00.53-PM-300x132.png 300w, https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.00.53-PM-768x339.png 768w" sizes="(max-width: 915px) 100vw, 915px" title="2021股票、比特幣崩盤確切時間點 ?! 免費工具大揭密 (附程式碼) | FinLab 財經實驗室 9"></figure>



<p>首先 LPPL 模型，最重要的會有三個元素</p>



<ul><li>一個是橘色的這個點</li><li>那另外是這條藍色的曲線</li><li>最後還有這條紅色的曲線</li></ul>



<p>那這邊橘色的這個點，<br>它其實就代表著崩盤的時候的最高價格 A，<br>那什麼時候會崩盤時間點就是 tc，<br>那我們可以看到這邊除了這個橘色的點以外，<br>還有這條藍色的時間序列，它就是在敘述，<br>泡沫整體上漲的幅度。</p>



<p>最後，價格其實是會有波動，<br>所以除了用藍色這一條線來描述價格以外<br>我們還會需要小週期的震盪，<br>也就是紅色的這一條曲線，來描述波動。</p>



<p>有了這三個元素就可以，<br>更正確地來描述泡沫破裂的時間序列公式，<br>那我們的就可以將這三個部分，<br>合併成同一個公式，<br>來描述說當今天泡沫發生的時候，價格隨時間的變化。</p>



<p>那你可能就會說<br>「我們究竟要怎麼樣將這個公式<br>使用在我們現在任何一個商品中？！」</p>



<p>那接下來我們就可以來看一個例子，</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="881" height="448" src="https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.02.28-PM.png" alt="Screen Shot 2021 01 14 at 1.02.28 PM" class="wp-image-2470" srcset="https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.02.28-PM.png 881w, https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.02.28-PM-300x153.png 300w, https://www.finlab.tw/wp-content/uploads/2021/01/Screen-Shot-2021-01-14-at-1.02.28-PM-768x391.png 768w" sizes="(max-width: 881px) 100vw, 881px" title="2021股票、比特幣崩盤確切時間點 ?! 免費工具大揭密 (附程式碼) | FinLab 財經實驗室 10"></figure>



<p>例如這邊我們有一個商品，<br>它的歷史價格時間序列是上圖右半邊，<br>那我們就懷疑，最近價格漲了好高，<br>是不是有泡沫會發生呢？</p>



<p>那這時候，可以用剛剛的公式，也就是 P(T)，<br>代入不同的參數進去，會算出不同的時間序列（以顏色表示），<br>那這時候，就可以找到一組參數，<br>它會讓我們的時間序列最接近真實的歷史價格，<br>例如我們可以看到，這 4 個（顏色的）時間序列中，<br>紅色的時間序列，長得最接近原本的歷史價格，<br>所以我們就會說，這組時間序列的參數是比較合理的，<br>這組合理的參數裡面，就包含了 tc，也就是泡沫破裂的時間點！</p>



<p>你可能會問，這個公式真的能幫助我們賺到錢嗎？<br>我們要怎麼應證它是有用的呢？</p>



<h2>跟我們一起來做實驗吧！</h2>



<p>我們已經幫你做好了工具，可以直接來使用，<br>這個工具的費用，就是幫訂閱我們的部落格、YT<br>用正確方法和數學公式，安全穩定地投資理財，<br>這一套工具將會完全免費送給你！</p>



<p>這個<a href="https://colab.research.google.com/drive/1oEMk8-yvhaWHP9DwE6bO_uzazPcvEvAY?usp=sharing" class="rank-math-link" target="_blank" rel="noopener">股票泡沫檢測器</a>不只可以幫你判斷，<br>究竟現在這個商品是否有泡沫，<br>我們可以針對任何一檔股票，<br>甚至是 Bitcoin 來做檢測，<br>只要是有收錄在 Yahoo Finance 的標的，全部都可以拿來做預測分析喔！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/bitcoin-stock-bubble-analysis-lppl/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2468</post-id>	</item>
		<item>
		<title>做量化投資會遇到的挑戰？</title>
		<link>https://www.finlab.tw/quantitative-trading/</link>
					<comments>https://www.finlab.tw/quantitative-trading/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Sun, 27 Sep 2020 04:49:47 +0000</pubDate>
				<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[PYTHON財經]]></category>
		<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[量化投資]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=2298</guid>

					<description><![CDATA[在第一篇 Python 新手教學文章中，我們介紹為什麼要用 python 來做量化投資，在這篇文章，我們將介紹「做量化投資所會遇到的挑戰 」。量化投資並非交易的聖杯，而是還有很多需要突破的困難，在這個單元中我們會一一的來介紹，並且跟大家分享，在實務上和學術上的解決方案！]]></description>
										<content:encoded><![CDATA[
<p>在<a href="https://www.finlab.tw/python%e6%96%b0%e6%89%8b%e6%95%99%e5%ad%b80%e7%82%ba%e4%bd%95%e7%94%a8python%e6%8a%95%e8%b3%87/" class="rank-math-link">第一篇 Python 新手教學文章</a>中，我們介紹為什麼要用 python 來做量化投資，在這篇文章，我們將介紹「做量化投資所會遇到的挑戰&nbsp;」。量化投資並非交易的聖杯，而是還有很多需要突破的困難，在這個單元中我們會一一的來介紹，並且跟大家分享，在實務上和學術上的解決方案！</p>



<p>首先我們要先學會怎麼樣評量一個策略，才能設計低風險高報酬的交易規則，就算我們有這些很好的策略，這些策略也會有失效的時候，甚至是歷史績效很好，但上線後不佳的過擬合策略，究竟要怎麼避免呢？我們也會在這篇文章中，簡單的跟大家介紹，並且提供我們的解決方案！</p>



<h2>評估策略績效</h2>



<p>首先我們要怎麼樣評估策略呢？通常我們可以用Sharpe ratio 夏普指標來同時考量風險和獲利！Sharpe ratio 的計算公式如下：</p>



<figure class="wp-container-2 wp-block-gallery-1 wp-block-gallery columns-1 is-cropped"><ul class="blocks-gallery-grid"><li class="blocks-gallery-item"><figure><img loading="lazy" width="1024" height="570" src="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.08.45-PM-1024x570.png" alt="評估量化投資策略的好壞：Sharp Ratio" data-id="2304" data-full-url="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.08.45-PM.png" data-link="https://www.finlab.tw/?attachment_id=2304" class="wp-image-2304" srcset="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.08.45-PM-1024x570.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.08.45-PM-300x167.png 300w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.08.45-PM-768x427.png 768w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.08.45-PM-1536x855.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.08.45-PM-2048x1140.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="做量化投資會遇到的挑戰？ 11"></figure></li></ul></figure>



<p>首先 <em>us </em>是策略的報酬率，而 <em>uf </em>是我們將資產放在銀行中換取利息的無風險報酬，在現在低利率的環境中，通常我們會簡化成零，這兩個數字相減，就是超額報酬。</p>



<p>而分母 <em>sigma s</em> 是我們在使用策略的波動程度，所以你可以想像分子是超額報酬，超額報酬越大，<em>Sharpe ratio</em> 就越高。而分母則是風險，假如風險越大，則 <em>Sharpe ratio</em> 數值越低。</p>



<p>我們可以將超額報酬跟波動的程度用視覺化的方式來表示，上圖的橫軸是報酬率，橫軸上有 <em>us</em> 和 <em>uf</em>&nbsp;，代表我們的無風險報酬和超額報酬&nbsp;</p>



<p>可以注意到 <em>us</em> 就是策略的報酬率，其實是一個分佈圖，代表策略的報酬，並不是穩定的，策略歷史績效，也是會忽高忽低。而這個分佈圖的寬和窄，就是影響我們獲利的最大因素。</p>



<p>我們通常會用標準差來表示，也就是這邊的 <em>sigma s</em>&nbsp;，我們通常會希望 <em>sigma s </em>越小越好，代表我們越有可能獲得超額報酬。對映到這邊的公式，分母越小， <em>Sharpe ratio</em> 就越大！所以整體來說，假如我們希望 <em>Sharpe ratio</em> 越大，我們就要讓超額報酬 <em>us</em> 越大，且波動程度 <em>sigma s</em> 越小越好。</p>



<p>假設我們現在算的是每日的 <em>Sharpe ratio</em>&nbsp;，我們想要讓它變成每一年的 <em>Sharpe ratio</em>，要怎麼來換算呢？</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="572" src="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.10.24-PM-1024x572.png" alt="Screen Shot 2020 09 27 at 12.10.24 PM" class="wp-image-2305" srcset="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.10.24-PM-1024x572.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.10.24-PM-300x168.png 300w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.10.24-PM-768x429.png 768w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.10.24-PM-1536x858.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.10.24-PM-2048x1145.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="做量化投資會遇到的挑戰？ 12"></figure>



<p>我們可以看到上圖中有兩個分佈，一個是每天的報酬率，另外一個是每一年的報酬率。而這兩個報酬率，我們用 <em>SRd</em> 代表每日的 <em>Sharpe ratio</em>，而 <em>SRa</em> 代表年化的 <em>Sharpe ratio</em>&nbsp;。而這兩個數值，其實是有關聯的，我們可以再額外乘上一個數值來校正，還記得我們剛剛介紹 <em>Sharpe ratio </em>的分子是超額報酬，分母是波動，我們先來看超額報酬的部分。</p>



<p>每天的超額報酬跟每年的超額報酬，其實就是乘以一年有幾個交易日來當做估計。例如我們每天賺 1 塊錢，那 365 天，就賺了365塊錢！同樣的對於分母，也就是波動程度，我們也要進行類似的估計，由於標準差的累積，跟天數並不是成正比，而是跟天數的開根號成正比，所以分母的部分，就以根號 <em>d </em>來校正。</p>



<p>所以通常我們就會看到 在 <em>Sharpe ratio</em> 的計算中，要多乘一個開根號的常數的原因，通常這個常數 會是根號 252，因為一年的交易日只有252天。</p>



<p>但是對於加密貨幣來說，要乘以360，因為加密貨幣每分每秒都有可以交易。有了 <em>Sharpe ratio</em> 來當作策略衡量的標準，是不是只要做出高 <em>Sharpe ratio</em> 的策略，就能幫我們賺很多錢呢？</p>



<h2>失效的策略</h2>



<p>假如我們做出的策略沒有根據的話，就算做出高 <em>Sharpe ratio</em> 的策略，也有很高的機率是過擬合策略。在1880年代，科學家提倡使用占星術預測未來是很流行的，但到了現代科學，尤其是做交易，我們還是發明了很多，類似占星術的工具，像是震盪指標、Fibonacci序列、黃金比例、elliot wave 等等。雖然背後有明確數學定義，但其能獲利的根本的原因卻是不明的。占星術和技術指標，其實是非常相似的，不是說不能用技術指標，只是在用的時候，我們要確保從統計的角度，有真的達到優化的效果，不然技術指標不就跟占星術沒什麼差別了&nbsp;！</p>



<p>另外，還有一門學派，會使用人眼來交易，在台灣稱為「裸K」，也就是不用任何技術指標！但這樣的交易手法，其實也非常困難。例如下面兩個時間序列，你可以用人眼看出哪個是價格？而哪個又是亂數產生的序列嗎？</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="571" src="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.18.31-PM-1024x571.png" alt="Screen Shot 2020 09 27 at 12.18.31 PM" class="wp-image-2306" srcset="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.18.31-PM-1024x571.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.18.31-PM-300x167.png 300w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.18.31-PM-768x428.png 768w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.18.31-PM-1536x857.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.18.31-PM-2048x1142.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="做量化投資會遇到的挑戰？ 13"></figure>



<p>電腦是可以輕易分辨的，但用人眼卻是非常的困難，這也是為什麼做交易，最好是用量化交易的原因！</p>



<p>另外你可能會想，量化交易好難學，為什麼我不直接複製別人的績效？其實現在也有很多類似的平台，例如 etoro 可以簡單的複製績效！然而你在複製績效時，可能會發現，為何績效看起來都很好，但是等到我開始跟單時，績效就變爛了呢？</p>



<p>這個原因是因為，通常跟單平台的排行榜，都有生存者偏差。某交易者可能在這禮拜因為表現很好，進了排行榜，但是下禮拜就被踢出！</p>



<p>另外，也有可能是某詐騙集團，開了很多個帳號，讓這些帳號用相反的手法交易，反覆留下勝利的帳號，就可以得到下圖中，這種高報酬的歷史報酬！</p>



<p>然而當募資結束後，可想而知，這樣的策略績效一定會一落千丈，反正他們已經抽到佣金，可能拔腿就跑了。這也是為什麼我們還是必須自己來研究量化交易的原因！</p>



<p>其實要做一個超強的歷史績效非常簡單，我們只要妥善的設定停損停利，就可以製造出勝率很高的假象！因為價格近似於隨機漫步，所以只要停利設定的很近，就更容易達成，只要停損設定很遠，就不容易達成。利用這個原理，大家都可以製作出高勝率策略！</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="573" src="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.20.24-PM-1024x573.png" alt="Screen Shot 2020 09 27 at 12.20.24 PM" class="wp-image-2307" srcset="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.20.24-PM-1024x573.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.20.24-PM-300x168.png 300w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.20.24-PM-768x430.png 768w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.20.24-PM-1536x859.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.20.24-PM-2048x1145.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="做量化投資會遇到的挑戰？ 14"></figure>



<p>但是一次的虧損，可能就會吃掉所有的獲利！所以網路上有些連勝的策略，看看就好，不需要太過相信。</p>



<p>撇除了以上用技術手段來獲得好的成果，我們在做量化投資時，要如何來預防過擬合&nbsp;？最原始的方式，就是將歷史資料，分成 In-sample 和 Out-of-sample。&nbsp;</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="573" src="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.21.59-PM-1024x573.png" alt="Screen Shot 2020 09 27 at 12.21.59 PM" class="wp-image-2308" srcset="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.21.59-PM-1024x573.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.21.59-PM-300x168.png 300w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.21.59-PM-768x430.png 768w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.21.59-PM-1536x859.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.21.59-PM-2048x1145.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="做量化投資會遇到的挑戰？ 15"></figure>



<p>In-sample 簡稱 IS ，而 Out-of-sample 簡稱 OOS&nbsp;。我們會用 In-sample 來進行策略研發，而 Out-of-sample 來做最後的驗證。假如我們反覆的使用 In-sample Out-of-sample&nbsp;的方式來驗證，就會發現策略當我們使用 IS 研發策略時，調整策略回測越多次，就會造成 OOS 中失敗的比例，也逐漸升高，是成正比的關係！</p>



<p>也就是真正有效的策略，不能夠調整太多次，否則就會造成過擬合，使策略失效的機率就會大增！</p>



<p>那還有沒有什麼方法，可以避免過擬合策略呢？</p>



<h2>避免研發失效策略</h2>



<p>我們在這邊列舉出幾個簡單的方式，而在我們的<a href="https://hahow.in/cr/crypto-python" class="rank-math-link" target="_blank" rel="noopener">線上課程中</a>，我們也會提供大家更深入的學術工具，來預防過擬合喔！&nbsp;</p>



<p>首先，假如我們有長時間的資料量做回測，代表策略經的起更多的考驗，做出來的策略，經過更多驗證，會更有效，比較不容易做出過擬合的策略！</p>



<p>但假如我們沒有更多的歷史資料怎麼辦呢？</p>



<p>我們可以將相似的資產歷史資料疊加在一起，讓策略在這樣的資料中進行回測，讓同一個策略用於多種不同的金融商品，可以預防過擬合。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="572" src="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.27.58-PM-1024x572.png" alt="Screen Shot 2020 09 27 at 12.27.58 PM" class="wp-image-2309" srcset="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.27.58-PM-1024x572.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.27.58-PM-300x168.png 300w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.27.58-PM-768x429.png 768w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.27.58-PM-1536x858.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.27.58-PM-2048x1145.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="做量化投資會遇到的挑戰？ 16"></figure>



<p>另外，我們也可以使用 bootstrap 的方式來驗證績效，是不是運氣好而產生的，我們會在<a aria-label="線上課程 (opens in a new tab)" rel="noreferrer noopener" href="https://hahow.in/cr/crypto-python" target="_blank" class="rank-math-link">線上課程</a>中有更進一步的講解！</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="585" src="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.28.56-PM-1024x585.png" alt="Screen Shot 2020 09 27 at 12.28.56 PM" class="wp-image-2310" srcset="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.28.56-PM-1024x585.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.28.56-PM-300x171.png 300w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.28.56-PM-768x439.png 768w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.28.56-PM-1536x878.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.28.56-PM-2048x1170.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="做量化投資會遇到的挑戰？ 17"></figure>



<p>第三種，就是將回測的次數做紀錄，盡量不要進行太多次回測！</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="593" src="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.29.43-PM-1024x593.png" alt="Screen Shot 2020 09 27 at 12.29.43 PM" class="wp-image-2311" srcset="https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.29.43-PM-1024x593.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.29.43-PM-300x174.png 300w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.29.43-PM-768x444.png 768w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.29.43-PM-1536x889.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/09/Screen-Shot-2020-09-27-at-12.29.43-PM-2048x1185.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="做量化投資會遇到的挑戰？ 18"></figure>



<p>第四種，策略沒效果就是沒效果，不需要硬要調整！</p>



<p>假如策略的進出場訊號沒有效果，則不需要再增加濾網，添加過多的濾網，也是過擬合的原因之一。</p>



<p>第五種，就是我們<a href="https://hahow.in/cr/crypto-python" class="rank-math-link" target="_blank" rel="noopener">線上課程中</a>會教的統計方法，在之後的文章中，再慢慢跟各位分享囉！&nbsp;</p>



<p>總結一下，這篇文章中，我們介紹了策略為什麼會失效，以及如何預防的辦法！看完這篇文章，希望能讓正在研究量化投資的大家，有初步的瞭解。之後的文章中，也會給大家一些量化投資應用在不只是股票市場，甚至是加密貨幣市場的範例，讓大家可以跟著我們一起研究 Python 量化投資！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/quantitative-trading/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2298</post-id>	</item>
		<item>
		<title>為什麼要開這堂課程？用 Python 理財 &#8211; 打造加密貨幣實戰策略</title>
		<link>https://www.finlab.tw/why-crypto-currency-python-course/</link>
					<comments>https://www.finlab.tw/why-crypto-currency-python-course/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Wed, 26 Aug 2020 18:53:05 +0000</pubDate>
				<category><![CDATA[加密貨幣]]></category>
		<category><![CDATA[財經PYTHON教學]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=2163</guid>

					<description><![CDATA[今年由於股票的策略發展已經成熟，FinLab 今年拓展版圖，做加密貨幣交易（和美股）。其實投資、交易，就是要找 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>今年由於股票的策略發展已經成熟，FinLab 今年拓展版圖，做加密貨幣交易（和美股）。其實投資、交易，就是要找尋市場中沒效率的地方，而最沒效率的，就屬加密貨幣了。很多投資機構並沒有參與加密貨幣交易，大部分是非交易專業、對加密貨幣有興趣的群眾，所以使用量化投資來操作，有很大的潛力。所以在眾多題目中（美股、期貨、房地產），我們今年決定要<a href="https://hahow.in/cr/crypto-python" class="rank-math-link" target="_blank" rel="noopener">跟大家一起學習加密貨幣交易</a>！</p>



<h2>為什麼要加密貨幣交易呢？</h2>



<p>以下總結六點，包含了數據佐證、基本面的因素，整體市場的發展前景向好，只要將「小部分」資產配置於加密貨幣，帶來可觀的影響！可以是總體資產的1％～5％，就能在有限的風險下，提升整體報酬率。</p>



<h3>1. <strong>多元資產配置</strong></h3>



<p>根據統計，只要持有一小部分的加密貨幣，即可讓資產配置組合大幅上升，當然你可能會說，誰叫比特幣過去一直上漲？但是跌幅也很大呀！</p>



<p>為了方便分析，我們可以使用 Markowitz 投資組合來彰顯投資加密貨幣的好處，下圖中，橫軸是風險（Volatility），縱軸是獲利（Return）。我們會發現，假如加入加密貨幣，在做資產配置最佳化後，風險從 -15％ 變成 -17%，獲利大幅上升，從+8.6% 每年，上升到＋15.6％ 每年！風險控制下，可以有效的增加報酬！</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1000" height="572" src="https://www.finlab.tw/wp-content/uploads/2020/08/5f3e19b9df881af38e167c10.png" alt="5f3e19b9df881af38e167c10" class="wp-image-2171" srcset="https://www.finlab.tw/wp-content/uploads/2020/08/5f3e19b9df881af38e167c10.png 1000w, https://www.finlab.tw/wp-content/uploads/2020/08/5f3e19b9df881af38e167c10-300x172.png 300w, https://www.finlab.tw/wp-content/uploads/2020/08/5f3e19b9df881af38e167c10-768x439.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" title="為什麼要開這堂課程？用 Python 理財 - 打造加密貨幣實戰策略 19"></figure>



<h3>2. <strong>市場效率低</strong></h3>



<p>加密貨幣比起其他國際商品，由於機構或投資法人，還沒有完全涉入加密貨幣的交易，市場效率偏低，投資人大部分都是主觀交易的業餘愛好者，價格波動比較有規律可循，適合用量化交易系統性投資，優勢非常明顯。有些加密貨幣（altcoin），甚至只要用簡單的均線，就可以創造出低風險、高報酬的策略。假如投資是一場考試，有送分題，當然要作答呀！</p>



<h3>3. <strong>經濟週期</strong>末稍</h3>



<p>大國由於中美貿易戰、疫情的影響，大家對於<a href="https://www.macromicro.me/macro" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">實體經濟前景並不很樂觀</a>（在這邊是指實體經濟，不是股市啦！）各國央行印鈔票、降低利率、資金氾濫，此時黃金、貴金屬、加密貨幣，就會有一部分的金額流入。</p>



<h3>4. <strong>國際機構參與</strong></h3>



<p>加密貨幣市場前景，相較於2017年泡沫時，有更多的應用，且區塊鏈的交易速度和成本也有所提升，<a href="https://www.globallegalinsights.com/practice-areas/blockchain-laws-and-regulations/japan" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">日本提出加密貨幣的金融工具</a>和交易所法案，歐盟研擬加密貨幣制度，還有 <a href="https://cointelegraph.com/news/mastercard-and-visa-are-making-bold-moves-toward-mass-crypto-adoption" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">VISA 跟 MASTERCARD 這些大型機構的加持</a>，發展支付應用程式。總體來說，產業的發展逐漸邁向穩定，前景看好。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="511" src="https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-2.19.19-AM-1024x511.png" alt="Screen Shot 2020 08 27 at 2.19.19 AM" class="wp-image-2172" srcset="https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-2.19.19-AM-1024x511.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-2.19.19-AM-300x150.png 300w, https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-2.19.19-AM-768x384.png 768w, https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-2.19.19-AM-1536x767.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-2.19.19-AM.png 1598w" sizes="(max-width: 1024px) 100vw, 1024px" title="為什麼要開這堂課程？用 Python 理財 - 打造加密貨幣實戰策略 20"></figure>



<h3>5.<strong> 未來財富轉移</strong></h3>



<p><a class="rank-math-link" href="https://www.federalreserve.gov/releases/z1/dataviz/dfa/distribute/chart/#quarter:122;series:Net%20worth;demographic:age;population:1,3,5,7;units:shares;range:2005.1,2020.1" target="_blank" rel="noopener">美國聯</a><a href="https://www.federalreserve.gov/releases/z1/dataviz/dfa/distribute/chart/#quarter:122;series:Net%20worth;demographic:age;population:1,3,5,7;units:shares;range:2005.1,2020.1" target="_blank" aria-label="準會 (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">準會</a><a class="rank-math-link" href="https://www.federalreserve.gov/releases/z1/dataviz/dfa/distribute/chart/#quarter:122;series:Net%20worth;demographic:age;population:1,3,5,7;units:shares;range:2005.1,2020.1" target="_blank" rel="noopener">統計</a>，目前 71.9% 的財富集中在 55 歲以上的人口。然而他們的投資行為比較保守，根據 <a href="https://www.survey.blockchain.capital/" target="_blank" aria-label="Survey.blockchain.capital 統計 (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Survey.blockchain.capital 統計</a>，只有4％的人在未來五年內「可能」會買加密貨幣，相較於年輕人，有32％。當這55歲高齡人口的 71.9％ 財富，轉移到下一個世代時，加密貨幣的需求量也會有顯著的上升。</p>



<h3><strong>6. 目前市值</strong></h3>



<p>美國的大型科技藍籌股，例如 AAPL、MSFT、GOOGL、AMZN，等，市值是加密貨幣市場的數倍，另外，<a href="https://www.visualcapitalist.com/all-of-the-worlds-money-and-markets-in-one-visualization-2020/" target="_blank" aria-label="黃金的市值是加密貨幣的20倍以上 (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">黃金的市值是加密貨幣的20倍以上</a>！代表加密貨幣的價值還有很大的上漲空間。加密貨幣的帳戶人數，一直都在穩定增加中，甚至在通膨高的國家，例如委內瑞拉，擔任穩定市場價格的工具、衡量價值的單位！潛在的應用場景跟現在的市值不成正比。</p>



<p>雖然現在大家對加密貨幣有不好的印象，覺得是泡沫，充滿了詐騙，沒有實質用處，但是以歷史為借鏡，我們可以參考很多類似的例子：</p>



<h2>科技的發明與普及</h2>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="624" src="https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-1.43.46-AM-1024x624.png" alt="Screen Shot 2020 08 27 at 1.43.46 AM" class="wp-image-2166" srcset="https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-1.43.46-AM-1024x624.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-1.43.46-AM-300x183.png 300w, https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-1.43.46-AM-768x468.png 768w, https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-1.43.46-AM-1536x936.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-1.43.46-AM-2048x1248.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="為什麼要開這堂課程？用 Python 理財 - 打造加密貨幣實戰策略 21"></figure>



<p>一個跨世代的發明，剛開始總是被人嘲笑，但到後來，往往跌破大家的眼鏡。當年，車子剛發明的時候，大家就嘲笑它旁然巨獸，聲音大聲，動不動就卡在泥坑裡，還需要隨時加油，根本沒有加油站呀！<strong>到底要怎麼開車？騎馬方便多了！</strong></p>



<p>筆記型電腦剛發明時，大家都嘲笑這個比書還要重的工具，開機還要五分鐘，翻書只要幾秒鐘，<strong>何必抱著一個厚重的磚頭每天到處跑</strong>？</p>



<p>電燈泡剛發明的時候，大家都說燈泡是「瘋狂的有錢人」家裡的炫富裝置，一不小心還會把家整個燒掉！太可怕了！政府剛開始安置家用電網的時候，大多數人都非常抗拒，覺得非常危險，影響人身安全。「<strong>明明不需要燈泡，反正有蠟燭就很實用了！</strong>」。但到後來，隨著越來越多家電，如吹風機，電風扇，吸塵器等發明，直到現在，你能想像一個人家裡沒有電嗎？</p>



<h3>基礎設施的建立</h3>



<p>一項顛覆時代的產品，必定要伴隨著基礎設施的普及，才會開始越來越有用，例如燈泡之於電網、車子之於柏油路、筆記型電腦之於無線網路。當建立這些基礎設施後，這些產品的優勢突出，成為人類生活無可取代的一部份，我覺得加密貨幣也有可能成為這樣的一種存在！有很大的發展前景。</p>



<p>你可能會覺得 FinLab 這次賭太大，竟然跑去交易加密貨幣！對我來說，FinLab 的意義，一直沒變，努力將量化分析應用到不同的場景，擁抱最新的科技，例如是當初的 2018 年智能理財、2019年機器學習，到現在的 2020 加密貨幣，<strong>我們希望可以當幫大家，讓大家成為科技前沿的領導者</strong>。雖然可能會有人批評太激進，其實我們依然秉持初心。</p>



<h2>新課程買課送幣</h2>



<p>我們是真的很想讓大家可以交易加密貨幣！假如大家可以跟我們一起學習、一起交易加密貨幣，是我們莫大的榮幸！所以特別舉辦開課前三天「買課送幣」的活動，幫大家入金，可以一起參與加密貨幣的漲跌。只要在開始募資三天內（9/2～9/4）購買新課程，就可以獲得價值台幣100元的加密貨幣！跟我們一起做交易！</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="516" src="https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-1.46.19-AM-1024x516.png" alt="Screen Shot 2020 08 27 at 1.46.19 AM" class="wp-image-2167" srcset="https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-1.46.19-AM-1024x516.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-1.46.19-AM-300x151.png 300w, https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-1.46.19-AM-768x387.png 768w, https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-1.46.19-AM-1536x773.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/08/Screen-Shot-2020-08-27-at-1.46.19-AM-2048x1031.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="為什麼要開這堂課程？用 Python 理財 - 打造加密貨幣實戰策略 22"></figure>



<h3>我已經在部落格中學很多了，這堂課有什麼新東西呢？</h3>



<p>在新的課程中，我們進一步來研究如何用 Python 研發單一商品策略，單一商品策略，跟選股比起來，有很多不一樣的地方。例如，如何最佳化，才不會造成 overfitting？如何設定停損停利點？如何加減碼？如何多策略分配權重？</p>



<p>答案是，除了一般你會的暴力窮解，其實有很多的學術文章可以參考，我們也會在新的課程中介紹其中的數學原理，並且幫大家實做好程式碼，可以直接應用，相信功能上會比 Multicharts 或 XQ 有更多的實用的功能。大家<strong>只要上一次課程，就可以一輩子帶著走的程式碼與知識，比付費購買程式更划算！</strong></p>



<p>這堂課程中，你可以獲得一個框架，快速研究策略，並且上架 <a class="rank-math-link" href="https://cloud.google.com/functions/?hl=zh-tw&amp;utm_source=google&amp;utm_medium=cpc&amp;utm_campaign=japac-TW-all-en-dr-bkws-all-all-trial-e-dr-1009137&amp;utm_content=text-ad-none-none-DEV_c-CRE_248037467463-ADGP_Hybrid+%7C+AW+SEM+%7C+BKWS+~+T1+%7C+EXA+%7C+Compute+%7C+M:1+%7C+TW+%7C+en+%7C+cloud+functions-KWID_43700022860259223-kwd-300157450064&amp;userloc_9040379-network_g&amp;utm_term=KW_google%20cloud%20function&amp;gclid=CjwKCAjwkJj6BRA-EiwA0ZVPVhROtrUOvK2lH3Y-U63Im6lQp22EypDNQvrveh0YepryPfmTasCo5xoCO5QQAvD_BwE" target="_blank" rel="noopener">Google Cloud Function</a> 雲端自動交易。我們這次擁抱 Python 開源的特性，跟大家<strong>一同打造一個完整的回測生態系</strong>！在未來，希望甚至可以應用在期貨等不同的商品上。</p>



<p>我們的課程就是希望突破自我，學到新東西，分享新知識，所以不用擔心課程過於簡單（從來都沒發生過！XD），不同於以往的課程，我們這次特別將程式碼進行大量包裝，<strong>讓大家使用起來更方便，減低上手的時間成本</strong>。</p>



<figure class="wp-block-image size-large"><a href="https://hahow.in/cr/crypto-python" target="_blank" rel="noopener noreferrer"><img loading="lazy" width="1024" height="635" src="https://www.finlab.tw/wp-content/uploads/2020/08/課程封面_一般-1024x635.png" alt="Python打造加密貨幣實戰策略" class="wp-image-2165" srcset="https://www.finlab.tw/wp-content/uploads/2020/08/課程封面_一般-1024x635.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/08/課程封面_一般-300x186.png 300w, https://www.finlab.tw/wp-content/uploads/2020/08/課程封面_一般-768x476.png 768w, https://www.finlab.tw/wp-content/uploads/2020/08/課程封面_一般-1536x952.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/08/課程封面_一般-2048x1269.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="為什麼要開這堂課程？用 Python 理財 - 打造加密貨幣實戰策略 23"></a></figure>



<p><a href="https://hahow.in/cr/crypto-python" class="rank-math-link" target="_blank" rel="noopener">用Python打造加密貨幣實戰策略</a>，我們上課見！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/why-crypto-currency-python-course/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2163</post-id>	</item>
		<item>
		<title>Pandas 魔法筆記(1)-常用招式總覽</title>
		<link>https://www.finlab.tw/pandas-%e9%ad%94%e6%b3%95%e7%ad%86%e8%a8%981-%e5%b8%b8%e7%94%a8%e6%8b%9b%e5%bc%8f%e7%b8%bd%e8%a6%bd/</link>
					<comments>https://www.finlab.tw/pandas-%e9%ad%94%e6%b3%95%e7%ad%86%e8%a8%981-%e5%b8%b8%e7%94%a8%e6%8b%9b%e5%bc%8f%e7%b8%bd%e8%a6%bd/#respond</comments>
		
		<dc:creator><![CDATA[Ben]]></dc:creator>
		<pubDate>Fri, 21 Aug 2020 13:30:32 +0000</pubDate>
				<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[財經PYTHON教學]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=2084</guid>

					<description><![CDATA[不管你是爬蟲、主觀選股、機器學習AI選股，你都少不了使用Pandas做資料處理，沒有處理好的資料丟入再好的模型，出來的結果也是差強人意。Finlab課堂上同學們的問題有60%以上都是在資料整合的問題中卡住，若學好Pandas的基本功，許多事情將迎刃而解，Excel有的功能，你通通可以用Python輕鬆解決，且效能更好，還可以客製化許多功能。]]></description>
										<content:encoded><![CDATA[
<p>不管你是爬蟲、主觀選股、機器學習AI選股，你都少不了使用Pandas做資料處理，沒有處理好的資料丟入再好的模型，出來的結果也是差強人意。</p>



<p>Finlab課堂上同學們的問題有60%以上都是在資料整合的問題中卡住，若學好Pandas的基本功，許多事情將迎刃而解，Excel有的功能，你通通可以用Python輕鬆解決，且效能更好，還可以客製化許多功能。</p>



<p>Pandas功能繁多，究竟哪些是最實用的函數呢？會應用在財經數據處理的哪些場景？這篇文章將整理出最實用的招式，當您開發選股程式卡關時，可來查詢這篇筆記複習可用的工具。</p>



<p class="has-text-align-center"><img loading="lazy" width="353" height="143" class="wp-image-2085" style="width: 300px" src="https://www.finlab.tw/wp-content/uploads/2020/08/下載.png" alt="下載" srcset="https://www.finlab.tw/wp-content/uploads/2020/08/下載.png 353w, https://www.finlab.tw/wp-content/uploads/2020/08/下載-300x122.png 300w" sizes="(max-width: 353px) 100vw, 353px" title="Pandas 魔法筆記(1)-常用招式總覽 24"></p>



<h2>pandas資料結構</h2>



<p>Pandas的底層數值型態為Numpy，採用Array(陣列)的形式來操作資料矩陣，同學們常分不清list和array的差異，外表也確實很像，最主要的差別在list中的資料型別不必相同，而array的中的型別必須全部相同，像是list_data=[1,2,3,’Hi’]裡有不同型別的資料，增加了儲存和消耗cpu，效能會比統一型別的array差，在運算大型數據時，差距感受會很明顯。</p>



<h3>series</h3>



<p>Pandas最基本的操作物件，資料型態為一維陣列，由values和index組成，index預設值是RangeIndex(start=0, stop=資料長度, step=1)來說。你可以視一個series為一欄資料序列，而多個series可形成一個table矩陣，有多欄資料，組成另一個重要操作物件：Dataframe。</p>



<figure class="wp-container-4 wp-block-gallery-3 wp-block-gallery columns-1 is-cropped"><ul class="blocks-gallery-grid"><li class="blocks-gallery-item"><figure><img loading="lazy" width="1024" height="303" src="https://www.finlab.tw/wp-content/uploads/2020/08/截圖-2020-08-21-下午4.32.03-1024x303.png" alt="截圖 2020 08 21 下午4.32.03" data-id="2129" data-full-url="https://www.finlab.tw/wp-content/uploads/2020/08/截圖-2020-08-21-下午4.32.03.png" data-link="https://www.finlab.tw/?attachment_id=2129" class="wp-image-2129" srcset="https://www.finlab.tw/wp-content/uploads/2020/08/截圖-2020-08-21-下午4.32.03-1024x303.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/08/截圖-2020-08-21-下午4.32.03-300x89.png 300w, https://www.finlab.tw/wp-content/uploads/2020/08/截圖-2020-08-21-下午4.32.03-768x227.png 768w, https://www.finlab.tw/wp-content/uploads/2020/08/截圖-2020-08-21-下午4.32.03-1536x455.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/08/截圖-2020-08-21-下午4.32.03-2048x607.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Pandas 魔法筆記(1)-常用招式總覽 25"></figure></li></ul></figure>



<amp-fit-text layout="fixed-height" min-font-size="6" max-font-size="72" height="80"><pre class="wp-block-code"><code lang="python" class="language-python line-numbers"># 常用方法
import pandas as pd
# 產生series
series=pd.Series(data=[1,2,3,4,5,6],index=range(1,7))
# 取出內容值陣列
series.values
# 取出索引陣列
series.index
# 檢查內容值是否不重複
series.is_unique
# series繪圖
import matplotlib.pyplot as plt
series.plot()</code></pre></amp-fit-text>



<p></p>



<h3>dataframe(簡稱df)</h3>



<p>與Series差異在data的部分是多維資料，data參數可以填入dict形式或是陣列形式，通常都使用dict。df非常相容於dict的特性，像取df特定欄位的語法為df[&#8216;欄位名&#8217;]，dict的key剛好等於df的columns，dict的value剛好等於df的values。df物件的方法包括series的操作方法。index可以用tuple list來設定多重索引。</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="276" src="https://www.finlab.tw/wp-content/uploads/2020/08/截圖-2020-08-21-下午4.50.35-1024x276.png" alt="截圖 2020 08 21 下午4.50.35" class="wp-image-2134" srcset="https://www.finlab.tw/wp-content/uploads/2020/08/截圖-2020-08-21-下午4.50.35-1024x276.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/08/截圖-2020-08-21-下午4.50.35-300x81.png 300w, https://www.finlab.tw/wp-content/uploads/2020/08/截圖-2020-08-21-下午4.50.35-768x207.png 768w, https://www.finlab.tw/wp-content/uploads/2020/08/截圖-2020-08-21-下午4.50.35-1536x413.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/08/截圖-2020-08-21-下午4.50.35.png 1564w" sizes="(max-width: 1024px) 100vw, 1024px" title="Pandas 魔法筆記(1)-常用招式總覽 26"></figure>



<amp-fit-text layout="fixed-height" min-font-size="6" max-font-size="72" height="80"><pre class="wp-block-code"><code lang="python" class="language-python line-numbers"># 常用方法
import pandas as pd
# 產生單一索引DataFrame，以下4個方法都可以
df = pd.DataFrame(data ={'A':[7,8,9],'B':[1,2,3],'C':[4,5,6]})
df = pd.DataFrame(data = np.array([(7,8,9),(1,2,3),(4,5,6)]),columns=['A','B','C'] )
df = pd.DataFrame(data = [(7,8,9),(1,2,3),(4,5,6)],columns=['A','B','C'] )
df = pd.DataFrame(data = [[7,8,9],[1,2,3],[4,5,6]],columns=['A', 'B','C'] )

# 新增欄位
df['D']=[1,2,3]

#重新命名欄位
df.columns=['1','2','3','4']

# 雙索引範例
tuples = [
   ('cobra', 'mark i'), ('cobra', 'mark ii'),
   ('sidewinder', 'mark i'), ('sidewinder', 'mark ii'),
   ('viper', 'mark ii'), ('viper', 'mark iii')
]
index = pd.MultiIndex.from_tuples(tuples)
values = [[12, 2], [0, 4], [10, 20],
        [1, 4], [7, 1], [16, 36]]
df = pd.DataFrame(values, columns=['max_speed', 'shield'], index=index)

# 取出欄位名稱
df.columns
# 取出內容值陣列
df.values
# 取出索引陣列
df.index
# 資料維度
df.shape
# 資料轉置，索引與欄位翻轉
df.T</code></pre></amp-fit-text>



<h2>資料篩選</h2>



<p>loc與iloc為最常用的資料切片方法，前者以值來選取，後者以定位的數值來選取。兩者皆用list[]來操縱索引和欄位的切片。另外也有at和iat可使用，差別在at和iat是直接取value出來，而不是取series或dataframe格式。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html</a></p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.at.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.at.html</a></p>



<amp-fit-text layout="fixed-height" min-font-size="6" max-font-size="72" height="80"><pre class="wp-block-code"><code lang="python" class="language-python line-numbers">df = pd.DataFrame(data ={'A':[7,8,9],'B':[1,2,3],'C':[4,5,6]},index=['date1','date2','date3'])

# 取出單一欄位，型態為Series
df.A
df['A']
df.iloc[:,0]
# 取出單一欄位，型態為Dataframe
df.loc[:,['A']]
df.iloc[:,0:1]
# 取出多欄位，型態為Dataframe
df[['A','B']]
df.loc[:,['A','B']]
df.iloc[:,:2]

# 使用loc與Boolean list篩選
df.loc[df['A'] &gt; 7]
df.loc[[False, True, True]]
df.loc[lambda df: df['A'] &gt;7]

# 雙索引範例
tuples = [
   ('cobra', 'mark i'), ('cobra', 'mark ii'),
   ('sidewinder', 'mark i'), ('sidewinder', 'mark ii'),
   ('viper', 'mark ii'), ('viper', 'mark iii')
]
index = pd.MultiIndex.from_tuples(tuples)
values = [[12, 2], [0, 4], [10, 20],
        [1, 4], [7, 1], [16, 36]]
df_multi = pd.DataFrame(values, columns=['max_speed', 'shield'], index=index)

# 雙索引資料使用loc切片時需將索引值以tuple來取值
df_multi.loc[('cobra', 'mark i')]
df_multi .loc[('cobra', 'mark i'):('viper', 'mark ii')]</code></pre></amp-fit-text>



<p></p>



<h2>資料數值處理</h2>



<h3>apply</h3>



<p>應用於將函數鑲嵌到df的欄位做處理，通常會結合匿名函數lambda來處理欄位裡的數值，像是我們想把某欄的“,”去掉、取代字元處理(結合str.replace)，或是自己寫函數依據欄位值當變數產生客製化資料就可以使用apply。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html</a></p>



<h3>astypes</h3>



<p>欄位資料型態轉換，處理爬蟲時很常會碰到文字、數字、日期格式互轉的問題。</p>



<p>to_datetime、to_timedelta、to_numeric也是pandas常見的數值轉換工具。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.astype.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.astype.html</a></p>



<h3>drop</h3>



<p>刪去不需要的欄列，像有時太多多餘資料，且需要的欄位又十分散亂，切片又不好使用時，可使用drop刪除不需要的資料。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html</a></p>



<h3>drop_duplicates</h3>



<p>移除重複。subset為重複欄位基準設定，keep參數可選擇要保留重複列的第一筆還是最後一筆。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html</a></p>



<h3>dropna</h3>



<p>依據na值來決定刪去不需要的欄列，像有時拉出財報，發現某些財報項目在一些股票並沒有出現，此時會產生na，為了過濾資料，dropna就可派上用場。要注意的是axis參數決定要以欄或列為單位來處理，how參數中的all和any決定該列和該行是要全部為na，還是有一個值為na就要刪除，thresh參數決定要保留有幾個非na值的行列。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html</a></p>



<h3>fillna</h3>



<p>缺失值處理非常常使用，像是股價遇到暫停交易時，可能會有空值，這時我們需要用fillna來拿暫停交易前一天的股價來補，不然在回測運算時會產生錯誤。特別要注意的是method參數中的ffill和bifill，前者是拿na前的資料補，後者是拿na後的資料補。limit參數決定要補幾個na，預設是全補。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html</a></p>



<h3>head, tail</h3>



<p>取前、後幾筆資料，預設值為5。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.head.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.head.html</a></p>



<h3>isna, isnull, notna, notnull</h3>



<p>檢查是否有na值或空值。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.isna.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.isna.html</a></p>



<h3>rolling</h3>



<p>滾動式計算，非常常用在計算指標，如產生近3月平均營收的時間序列。參數min_periods有時會用到，決定要至少多少數值才列入計算，如想要近11月平均營收，但資料卻只有近5月，就會被放掉，若沒有特別設定，就是用近X月來算。</p>



<h3>set_index, reset_index</h3>



<p>將特定欄位轉乘索引、重置索引(索引轉正常欄位)。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.set_index.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.set_index.html</a></p>



<h3>shift</h3>



<p>平移時間序列數值，此用場景在回測應用，像是營收資料在10號公佈，但我們買進的股價會在11號，這時算回社時，就不能用10號買入價計算，必須要用shift來平移數據。</p>



<p><a class="rank-math-link" href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.shift.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.shift.html</a></p>



<h3>sort_values , sort_index</h3>



<p>兩個差異在要使用數值還是索引值資料排序。ascending參數決定升降冪，key參數可結合lambda做更複雜的排序方法。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sort_values.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sort_values.html</a></p>



<h3>sum, max, min, mean, std, cumsum, cumprod</h3>



<p>分別為加總、最大值、最小值、平均值、標準差、累加、累成。常用於策略撰寫、指標開發、回測報酬率計算。經常搭配rolling方法使用。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.sum.html#pandas.Series.sum" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.sum.html#pandas.Series.sum</a></p>



<h3>to_frame, to_series, tolist</h3>



<p>dataframe、series、list資料格式互相轉換，當一維數據的series需要用dataframe才有的方法處理時，要先用to_frame來轉換。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.to_frame.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.to_frame.html</a></p>



<h2>資料合併</h2>



<h3>merge, join, concatenate</h3>



<p>處理資料合併，像是要把上市、上櫃、興櫃個市場價格資料合併成一張dataframe做計算。如果熟悉excel，就不會陌生。基本上3個都能達成功能。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html</a></p>



<h3>reindex</h3>



<p>索引對照，將A的index套入B的index，例如想以月營收每月10號的時間套入股價資料，讓股價資料只顯示月營收公布日對應的數據。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reindex.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reindex.html</a></p>



<h2>資料分群</h2>



<h3>cut</h3>



<p>Cut方法可以處理分類datafrme的資料，像我們常想把財報中ROE&gt;20的標的分類為A、20&gt;ROE&gt;10為B、ROE&gt;10為C，這時我們就可使用cut來輕鬆達成。之後使用groupby分群集合運算或是切片選取都非常方便。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.cut.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.cut.html</a></p>



<h3>groupby</h3>



<p>group運算式不論在DB或Excel都有設置，是常使用的工具。可以幫我們分群整合運算，像我們要計算個股分點券商買賣超，就需要以stock_id當分群依據，之後用sum來加總每支個股的主力買賣超，也可以應用在計算各類股平均漲跌幅，以產業類別當分群依據。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html</a></p>



<h3>pivot</h3>



<p>pivot方法可以重塑資料的shape，像課堂中大家常用的data.get()背後就是將雙索引資料解構成“columns=stock_id、index=date”的格式。stack與unstack也提供類似的功能，並可以互轉調整。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.pivot.html" class="rank-math-link" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.pivot.html</a></p>



<h2>時間序列</h2>



<h3>date_range</h3>



<p>產生時間序列，應用場景於重塑特定時間序列來回測，例如想將date序列換成每月10號，可使用date_range快速產生日期區間，用簡易的start與end參數來控制。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.date_range.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.date_range.html</a></p>



<h2>顯示設定</h2>



<h3>options and settings</h3>



<p>很多人會覺得jupyter不方便如excel般審視資料，因為大量數據只會顯示前後10筆，中間會用&#8217;&#8230;&#8217;略過，能否解決這問題呢？set_option讓我們可以改變一些pandas的預設設定，想全展資料，用下列程式碼就可解決。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/user_guide/options.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/user_guide/options.html</a></p>



<amp-fit-text layout="fixed-height" min-font-size="6" max-font-size="72" height="80"><pre class="wp-block-code"><code lang="python" class="language-python line-numbers">pd.set_option("display.max_rows", None)</code></pre></amp-fit-text>



<h2>資料輸出/讀取</h2>



<p>pandas提供多種格式可以輸出/輸入資料。</p>



<p><a href="https://pandas.pydata.org/pandas-docs/stable/reference/io.html" target="_blank" rel="noopener">https://pandas.pydata.org/pandas-docs/stable/reference/io.html</a></p>



<amp-fit-text layout="fixed-height" min-font-size="6" max-font-size="72" height="80"><pre class="wp-block-code"><code lang="python" class="language-python line-numbers">df = pd.DataFrame(data ={'A':[7,8,9],'B':[1,2,3],'C':[4,5,6]})

# 輸出方法
df.to_csv('檔名.csv')
df.to_excel('檔名.xls')
df.to_pickle('檔名.pkl')

# 詳見 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html
df.to_sql('table_name', con=' DB engine')

#讀取方法將to改成read，ex:df.read_csv('檔名.csv')</code></pre></amp-fit-text>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/pandas-%e9%ad%94%e6%b3%95%e7%ad%86%e8%a8%981-%e5%b8%b8%e7%94%a8%e6%8b%9b%e5%bc%8f%e7%b8%bd%e8%a6%bd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2084</post-id>	</item>
		<item>
		<title>台積電如何買？用 Python 研發投資策略</title>
		<link>https://www.finlab.tw/twii-2330-invest/</link>
					<comments>https://www.finlab.tw/twii-2330-invest/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Wed, 29 Jul 2020 05:28:08 +0000</pubDate>
				<category><![CDATA[選股策略]]></category>
		<category><![CDATA[PYTHON財經]]></category>
		<category><![CDATA[技術面]]></category>
		<category><![CDATA[股票策略]]></category>
		<category><![CDATA[台積電]]></category>
		<category><![CDATA[如何投資]]></category>
		<category><![CDATA[如何買股票]]></category>
		<category><![CDATA[股票]]></category>
		<category><![CDATA[股票分析]]></category>
		<category><![CDATA[財經PYTHON教學]]></category>
		<guid isPermaLink="false">https://www.finlab.tw/?p=1928</guid>

					<description><![CDATA[人人都想買台積電，獲得穩定的報酬，然而股價現在這麼高了，還安全嗎？怎麼才能安全的享受台積電的上漲的獲利，又可以在下跌時加碼呢？我們可以針對台積電，用 Python 研發擇時買賣！]]></description>
										<content:encoded><![CDATA[
<p>最近股票圈最熱門的話題，不外乎就是「台積電」，以前我們都說，市值太大的股票，上漲的幅度有限。但是台積電果然是國家棟梁，身為台股最大市值的股票，竟然可以漲停板！然而現在這麼高了，還安全嗎？怎麼才能安全的享受台積電的上漲的獲利，又可以在下跌時加碼呢？我們可以針對台積電，用 Python 研發擇時買賣，文末附上完整程式範例！</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="577" src="https://www.finlab.tw/wp-content/uploads/2020/07/Picture1-6-1024x577.png" alt="台積電" class="wp-image-1957" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/Picture1-6-1024x577.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/Picture1-6-300x169.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/Picture1-6-768x433.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/Picture1-6-1536x866.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/Picture1-6-2048x1155.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="台積電如何買？用 Python 研發投資策略 27"><figcaption>台積電要如何買賣呢？</figcaption></figure>



<h3>3步驟帶你分析台積電</h3>



<p>這篇文章會分享怎麼研發台積電的投資策略，主要有三個步驟：</p>



<ol><li>使用 <strong>Colab</strong> 並安裝 yfinance 、 backtesting、talib 的函式庫</li><li><strong>下載台積電股價歷史紀錄</strong>，研發買賣訊號</li><li><strong>回測交易結果分析</strong>，並且研究策略如何<strong>優化</strong></li></ol>



<h2>1. 使用 <a href="https://colab.research.google.com/" target="_blank" rel="noreferrer noopener">Colab</a> 並下載環境</h2>



<p>要建構一個股票策略，只要會基本的 Python ，就可以開始了，我們使用 <a rel="noreferrer noopener" href="https://colab.research.google.com/" target="_blank">Colab</a> 來當作撰寫 Python 的平台，這是 Google 佛心推出的，讓我們可以線上撰寫程式，而且<strong>完全免費</strong>！我自己已經把幾乎所有程式碼搬到 Colab 上了！雖然速度比桌機稍慢，但是<strong>可以雲端任何地點編輯，就算換電腦也不用擔心！</strong></p>



<h3>安裝 Package</h3>



<p>我們今天要用的 Package，有兩個，一個是 <a href="https://pypi.org/project/yfinance/" target="_blank" rel="noreferrer noopener">yfinance</a> ，負責下載 yahoo finance 上的股價資料，另外一個是 <a href="https://github.com/kernc/backtesting.py" target="_blank" rel="noreferrer noopener">backtesting</a>，顧名思義就是用來研發策略用的！但研發策略，有時候會需要製作技術指標，並根據技術指標來交易，所以需要用到 <a href="http://mrjbq7.github.io/ta-lib/" target="_blank" rel="noreferrer noopener">talib</a> 這個 Package，我們可以用簡單的三行指令完成安裝：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">!pip install yfinance
!pip install Backtesting
!pip install talib-binary</code></pre>



<p>上述三行，只要在程式碼輸入欄輸入，系統就會幫你安裝好這三款 package，這三行的第一個字符是驚嘆號，代表我們要執行 <a href="https://zh.wikipedia.org/wiki/%E6%AE%BC%E5%B1%A4" target="_blank" rel="noreferrer noopener">Shell</a> 的語法，不是 Python 的語法！假如你不是用 Colab，而是用個人電腦，也可以在打開 <a href="https://zh.wikipedia.org/wiki/%E6%AE%BC%E5%B1%A4" target="_blank" rel="noreferrer noopener">Shell</a> 輸入這些指令，記得將指令的驚嘆號移除喔！</p>



<h2>2. 下載台積電股價，研發買賣訊號！</h2>



<p>首先，我們先來下載台積電的歷史紀錄，在下方的程式碼中，我們已經幫大家寫好一個函式，叫做「get_historical_data」，可以直接呼叫它來獲取股價。由於 yfinance 的歷史紀錄算是滿豐富的，所以有很多股票都可以下載，包含美股台股，例如蘋果（AAPL），特斯拉（TSLA），微軟（MSFT），然而台股的部分，比較可惜的地方，就是只有上市資料，如台積電（2330.TW），以下是完整的範例。<strong>你可以 <a href="https://finance.yahoo.com/quote/2330.TW?p=2330.TW&amp;.tsrc=fin-srch" target="_blank" rel="noreferrer noopener">參考 yahoo finance</a> 來下載你有興趣股票！</strong></p>



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

def get_historical_data(ticker):
  d = yf.Ticker(ticker)
  df = d.history(period="max")
  df.columns = df.columns.str.lower()
  df.columns = pd.Series(df.columns).str.capitalize().values
  return df.dropna()

df = get_historical_data('2330.TW')
df</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="373" src="https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-11.57.25-AM-1024x373.png" alt="Screen Shot 2020 07 29 at 11.57.25 AM" class="wp-image-1938" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-11.57.25-AM-1024x373.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-11.57.25-AM-300x109.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-11.57.25-AM-768x279.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-11.57.25-AM.png 1242w" sizes="(max-width: 1024px) 100vw, 1024px" title="台積電如何買？用 Python 研發投資策略 28"></figure>



<h3>策略訊號研發</h3>



<p>有了股票的歷史紀錄，就可以來研發策略了，由於 Python 是個執行速度很慢的語言（比起 C、C++），所以我們不太使用 <a href="https://www.w3schools.com/python/python_for_loops.asp" target="_blank" rel="noreferrer noopener">for 迴圈</a> 來回測，而是用向量矩陣的方式產生訊號，<strong>速度會快很多</strong>，其中的「sma1」、「sma2」、「signal_long」、「signal_short」都是時間序列，下方為均線為範例，假如你不喜歡均線，<strong>可以參考 <a href="http://mrjbq7.github.io/ta-lib/" target="_blank" rel="noreferrer noopener">talib</a> 來製作你有興趣的技術指標喔</strong>！</p>



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

# compute simple moving average using talib
sma1 = talib.SMA(df.Close, timeperiod=20)
sma2 = talib.SMA(df.Close, timeperiod=60)

# compute buy and sell signals (golden cross and death cross)
signal_long = (sma1 > sma2) &amp; (sma1.shift() &lt; sma2.shift())
signal_short = (sma1 &lt; sma2) &amp; (sma1.shift() > sma2.shift())

# combine long and short signals
signal = signal_long.copy()
signal[signal_short] = -1</code></pre>



<p>程式碼看不懂嗎？沒關係，我們將這些時間序列 2020 年的數值繪製出來：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">df.Close['2020'].plot()
sma1['2020'].plot()
sma2['2020'].plot()
signal['2020'].astype(int).plot(secondary_y=True)</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="433" src="https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.08.26-PM-1024x433.png" alt="Screen Shot 2020 07 29 at 12.08.26 PM" class="wp-image-1943" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.08.26-PM-1024x433.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.08.26-PM-300x127.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.08.26-PM-768x324.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.08.26-PM.png 1198w" sizes="(max-width: 1024px) 100vw, 1024px" title="台積電如何買？用 Python 研發投資策略 29"></figure>



<ul><li>藍色：df.Close &#8212;&#8211;&gt; 台積電的股價（一飛沖天！）</li><li>黃色：sma1 &#8212;-&gt; 20日均線</li><li>綠色：sma2 &#8212;-&gt; 60日均線</li><li>紅色：signal &#8212;-&gt; 買賣訊號</li></ul>



<p>接下來，我們就可以根據上圖中，<strong>紅色訊號為 1 時買入， -1 時賣出</strong>，這樣的的方式來交易，但是效果會如何呢？沒有人知道，所以我們還要進行「<strong>回測</strong>」，也就是將此策略放在歷史上模擬交易的報酬率！</p>



<h2>3. 回測和參數優化</h2>



<p>接下來我們就可以來測測看，究竟這樣子買台積電效果如何？我們可以用 backtesting 這個工具來幫我們回測，完整的程式碼如下，雖然有點長，但你會發現核心程式碼，跟剛剛是非常類似的！所以不用擔心太複雜！你也可以參考 <a href="https://github.com/kernc/backtesting.py" target="_blank" rel="noreferrer noopener">backtesting</a> 的官方教學，來獲得更詳細的用法喔！</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">from backtesting import Backtest, Strategy

class Strategy(Strategy):
    
    n1 = 20
    n2 = 60
    
    def init(self):
        super().init()
        
        # Precompute the two moving averages
        close = pd.Series(self.data.Close)
        sma1 = talib.SMA(close, timeperiod=self.n1)
        sma2 = talib.SMA(close, timeperiod=self.n2)

        # Precompute signal
        signal_long = (sma1 > sma2) &amp; (sma1.shift() &lt; sma2.shift())
        signal_short = (sma1 &lt; sma2) &amp; (sma1.shift() > sma2.shift())

        # combine signal
        signal = signal_long
        signal[signal_short] = -1
        
        # plot sma
        self.I(lambda x: sma1, 'sma1')
        self.I(lambda x: sma2, 'sma2')

        # set signal to trade
        self.signal = self.I(lambda x: signal, 'signal')

    def next(self):
        super().next()

        entry_size = self.signal[-1]

        if entry_size > 0:
            self.buy()
        elif entry_size &lt; 0:
          for trade in self.trades:
              trade.close()

bt = Backtest(df, Strategy)
result1 = bt.run()
bt.plot()</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="571" src="https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.13.35-PM-1024x571.png" alt="Screen Shot 2020 07 29 at 12.13.35 PM" class="wp-image-1944" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.13.35-PM-1024x571.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.13.35-PM-300x167.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.13.35-PM-768x428.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.13.35-PM-1536x856.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.13.35-PM-2048x1141.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="台積電如何買？用 Python 研發投資策略 30"></figure>



<p>上圖就是我們的回測結果，這是一個動態的圖表，所以我們可以將一部分放大：</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="571" src="https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.20.57-PM-1024x571.png" alt="Screen Shot 2020 07 29 at 12.20.57 PM" class="wp-image-1946" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.20.57-PM-1024x571.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.20.57-PM-300x167.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.20.57-PM-768x428.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.20.57-PM-1536x856.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.20.57-PM-2048x1141.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="台積電如何買？用 Python 研發投資策略 31"></figure>



<p>上圖從上到下，總共有五個小圖，我們一張一張解釋：</p>



<p>圖一：為最後的總績效結果（藍色線段），代表策略的報酬率，從2000到現在可以獲利約400％，而當中的紅色水平線段，代表最久沒有創新高的時間段，這段時間可能會讓你懷疑，這個策略有沒有效果，而放棄策略，這段時間當然是越短越好！</p>



<p>圖二：有很多的三角形，假如是正三角就是做多，倒三角就是做空，我們這次寫的策略是做多的策略！所以不會有做空的倒三角喔！另外顏色代表獲利或是虧損，綠色為獲利，紅色為虧損，這些三角形的高度代表獲利或虧損的程度，以虛線做區分，虛線上方是獲利，而虛線下方式虧損，可以看到這種交易方法 2008 年以後每次虧損不會太多，獲利有時候還滿驚人的！</p>



<p>圖三是交易的明細，除了股價 K 棒外，我們也看到了兩條均線（藍色跟橘色），方便我們核對交易的時間，另外我們可以看到綠色和紅色的虛線，每一條虛線都代表一次交易，虛線的起始和結束，代表交易的價格跟時間，綠色代表獲利，而紅色代表虧損。</p>



<p>第四和第五張圖，則是成交量以及 signal 訊號，此策略就是模擬 signal 訊號為 1 時買進，而 -1 時賣出，比對其他圖片的數據，非常合理！</p>



<h3>策略效果不夠好？尋找最佳參數！</h3>



<p>剛剛我們用的均線是20日跟60日，來做交易，然而這是最好的均線嗎？我們可以將這兩個參數，當成策略的參數，分別叫 n1 和 n2 ，透過暴力枚舉（range(5, 200)），來從 5 到 200 裡面挑出 <a href="https://www.investopedia.com/terms/s/sharperatio.asp" target="_blank" rel="noreferrer noopener">Sharpe ratio</a> 比較好的參數：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">result2 = bt.optimize(n1=range(5, 200, 10),
                      n2=range(5, 200, 10))
result2._strategy</code></pre>



<pre class="wp-block-code"><code lang="python" class="language-python"># 程式碼顯示結果：
&lt;Strategy Strategy(n1=165,n2=5)></code></pre>



<p>以上，就是整個優化的過程，程式碼非常簡潔，最後優化完的數字是</p>



<ul><li>n1 = 165</li><li>n2 = 2</li></ul>



<p>眼尖的人會發現，奇怪怎麼長短週期倒過來了？代表我們死亡交叉買入，而黃金交叉賣出，這種交易比較像是均值回歸，在低點買，高點賣，屬於逆勢策略，我們用這兩個新的參數，來測測看結果如何？</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="578" src="https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.32.06-PM-1024x578.png" alt="Screen Shot 2020 07 29 at 12.32.06 PM" class="wp-image-1952" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.32.06-PM-1024x578.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.32.06-PM-300x169.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.32.06-PM-768x434.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.32.06-PM-1536x867.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.32.06-PM-2048x1156.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="台積電如何買？用 Python 研發投資策略 32"></figure>



<p>雖然報酬率雖然比較低，但是交易的風險小滿多的，我們可以將順勢跟逆勢策略結合，獲得更穩定的報酬率，下方就是程式碼</p>



<pre class="wp-block-code"><code lang="python" class="language-python">((result1._equity_curve.Equity + 
result2._equity_curve.Equity)/2).plot()</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="974" height="482" src="https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.40.45-PM.png" alt="Screen Shot 2020 07 29 at 12.40.45 PM" class="wp-image-1954" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.40.45-PM.png 974w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.40.45-PM-300x148.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/Screen-Shot-2020-07-29-at-12.40.45-PM-768x380.png 768w" sizes="(max-width: 974px) 100vw, 974px" title="台積電如何買？用 Python 研發投資策略 33"><figcaption>績效合併後的結果</figcaption></figure>



<p>基本上2008 到現在，沒什麼虧損過，台積電上漲時，會追蹤到漲幅，而下跌時也會危機入市，算是一個非常簡單，但績效很舒服的策略，分享給大家，現在就<a href="https://colab.research.google.com/drive/18U4QvoqH99450ixNBDKCm_ESqQW-slvr?usp=sharing" target="_blank" rel="noreferrer noopener">打開現成的 Colab 直接運行程式碼</a>。假如大家對於我們這樣的分享有興趣，可以幫我們推廣一下！我們也有其他類似的文章可以參考：</p>



<ul><li><a href="https://www.finlab.tw/low-risk-fft-spy-strategy/">低風險高報酬投資組合，股債平衡策略研發</a></li><li><a href="https://www.finlab.tw/python%e6%96%b0%e6%89%8b%e6%95%99%e5%ad%b8%ef%bc%9a%e5%a4%8f%e6%99%ae%e6%8c%87%e6%95%b8%e7%ad%96%e7%95%a5/">避開危險的投資時機 – 夏普指數策略</a></li><li><a href="https://www.finlab.tw/%e5%8a%a0%e9%80%9f%e5%ba%a6%e6%8c%87%e6%a8%99%e5%af%a6%e5%81%9a/">找出會加速的股票 &#8211; 加速度指標實做</a></li></ul>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/twii-2330-invest/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1928</post-id>	</item>
		<item>
		<title>Python新手教學(Part 2)：全球指數一次抓</title>
		<link>https://www.finlab.tw/python%e6%96%b0%e6%89%8b%e6%95%99%e5%ad%b82%e5%85%a8%e7%90%83%e6%8c%87%e6%95%b8%e4%b8%80%e6%ac%a1%e6%8a%93/</link>
					<comments>https://www.finlab.tw/python%e6%96%b0%e6%89%8b%e6%95%99%e5%ad%b82%e5%85%a8%e7%90%83%e6%8c%87%e6%95%b8%e4%b8%80%e6%ac%a1%e6%8a%93/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Wed, 22 Jul 2020 07:05:39 +0000</pubDate>
				<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[爬蟲]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[股票]]></category>
		<category><![CDATA[股票分析]]></category>
		<guid isPermaLink="false">http://34.96.136.135/?p=851</guid>

					<description><![CDATA[我們已經知道怎麼抓取任意一檔股票歷史價格了，但有時候我們一次需要很多檔股票，怎麼辦呢？難道每個股票我們都要寫這麼多行，才能抓下來嗎？今天我們教你如何將上一次的功能包裝成 function，然後一次下載全球指數！]]></description>
										<content:encoded><![CDATA[
<p>我們已經知道怎麼抓取任意一檔股票歷史價格了，但有時候我們一次需要很多檔股票，怎麼辦呢？難道每個股票我們都要寫這麼多行，才能抓下來嗎？今天我們教你如何將上一次的功能包裝成 function，然後一次下載全球指數！<a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B82%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E4%B8%80%E6%AC%A1%E6%8A%93/thumbnail.png"></a></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" width="1024" height="679" src="http://34.96.136.135/wp-content/uploads/2020/07/thumbnail-5-2-1024x679.png" alt="thumbnail 5 2" class="wp-image-853" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-5-2-1024x679.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-5-2-300x199.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-5-2-768x510.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-5-2-1536x1019.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-5-2.png 1664w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 2)：全球指數一次抓 34"></figure></div>


<h3 id="上次的程式碼爬取台積電">上次的程式碼爬取台積電</h3>



<p>首先，我們上次已經教了怎麼樣爬取一檔股票：「台積電2330」，這次我們重新複習一下，下方的程式，假如有任何一個部分忘記了，都可以去<a href="https://www.finlab.tw/%E7%94%A8%E7%88%AC%E8%9F%B2%E7%88%AC%E5%85%A8%E4%B8%96%E7%95%8C%E8%82%A1%E5%83%B9/">前一個單元</a>複習喔！</p>



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

df = yf.Ticker("2330.TW").history(period="max")
df</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" width="1024" height="443" src="http://34.96.136.135/wp-content/uploads/2020/07/1-2-1024x443.png" alt="1 2" class="wp-image-854" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/1-2-1024x443.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/1-2-300x130.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/1-2-768x332.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/1-2-1536x664.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/1-2-2048x885.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 2)：全球指數一次抓 35"></figure></div>


<p><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B82%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E4%B8%80%E6%AC%A1%E6%8A%93/1.png"></a></p>



<p>但是以上的程式碼只能爬「台積電」的股價，我想要爬其他的指數怎麼辦呢？</p>



<h3 id="將上述程式碼打包成function">將上述程式碼打包成function</h3>



<p>我們可以用<code>function</code>將上面的程式碼打包起來，方便我們多次使用，變成下面這樣，其實跟之前長的非常像，可以先比較一下：首先，第一行多了<code>def crawl_price(stock_id):</code>，這行的意思就是宣告一個可呼叫的程式區塊，叫做<code>crawl_price(stock_id)</code>，再來，原本的程式碼前方都被加了4個空白格，代表這些功能是同一個<code>function</code>中被執行的代碼。</p>



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

def crawl_price(stock_id):
  df = yf.Ticker(stock_id).history(period="max")
  return df

</code></pre>



<p>上面的代碼中，有個特別可以注意的變數：<code>stock_id</code>，當今天<code>stock_id</code>被傳進<code>function</code>中的時候，url就會隨著<code>stock_id</code>的不同，而出現不同的<code>url</code>所以我們就可以爬到不同的股票歷史股價！</p>



<p>既然我們已經寫好了此<code>function</code>，接下來就可以呼叫它，得到不同股票的歷史股價</p>



<h3 id="使用function">使用function</h3>



<p>假如以後我們需要爬取不同的股票，例如「鴻海2354」，我們就可以寫：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">df = crawl_price("2354.TW")
df.Close.plot()</code></pre>



<p>就可以順利將鴻海的股票爬取下來喔！<a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B82%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E4%B8%80%E6%AC%A1%E6%8A%93/2.png"></a></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" width="1024" height="536" src="http://34.96.136.135/wp-content/uploads/2020/07/2-2-1024x536.png" alt="2 2" class="wp-image-855" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/2-2-1024x536.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/2-2-300x157.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/2-2-768x402.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/2-2-1536x804.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/2-2-2048x1072.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 2)：全球指數一次抓 36"></figure></div>


<p>接下來我們就來爬取世界上重要的指數吧！</p>



<h3 id="國際重要指數清單">國際重要指數清單</h3>



<p>首先我們必須要爬取到國際重要指數清單，可以到以下網址來獲取：<br><a href="https://finance.yahoo.com/world-indices/" rel="noreferrer noopener" target="_blank">https://finance.yahoo.com/world-indices/</a><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B82%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E4%B8%80%E6%AC%A1%E6%8A%93/3.png"></a></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" width="1024" height="568" src="http://34.96.136.135/wp-content/uploads/2020/07/3-1-2-1024x568.png" alt="3 1 2" class="wp-image-857" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/3-1-2-1024x568.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/3-1-2-300x167.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/3-1-2-768x426.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/3-1-2-1536x853.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/3-1-2-2048x1137.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 2)：全球指數一次抓 37"></figure></div>


<p>接下來我們就可以將上述清單給手動複製起來？！<br>不，我們要用更炫的方法，當然是要用程式來爬呀：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">url = "https://finance.yahoo.com/world-indices/"
response = requests.get(url)

import io
f = io.StringIO(response.text)
dfs = pd.read_html(f)
world_index = dfs[0]</code></pre>



<p>上述的程式碼，剛開始很簡單，就是用<code>requests.get</code>來獲取此網頁的資料，網頁中的資料都存在<code>response.text</code>中，跟之前一模一樣。</p>



<p>不過第5行有點不一樣，我們使用<code>io.StringIO(response.text)</code>將資料存成檔案<code>f</code><br>第6行，我們將此文件利用<code>pd.read_html(f)</code>來分析網頁<code>f</code>中的表格，將所有的表格存成 a list of dataframe<br>第7行，我們將第一張dataframe給拿出來。<a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B82%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E4%B8%80%E6%AC%A1%E6%8A%93/4.png"></a></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" width="1024" height="435" src="http://34.96.136.135/wp-content/uploads/2020/07/4-1-2-1024x435.png" alt="4 1 2" class="wp-image-859" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/4-1-2-1024x435.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/4-1-2-300x128.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/4-1-2-768x327.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/4-1-2-1536x653.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/4-1-2-2048x871.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 2)：全球指數一次抓 38"></figure></div>


<p>這樣我們就有了此表格中的symbol和name，以供之後歷史股價的爬取</p>



<p>這個單元的程式碼範例，都可以<a href="https://colab.research.google.com/drive/1TxyeRy6ukAhrJ10x80YoIoYTChd4EUEQ?usp=sharing" class="rank-math-link" target="_blank" rel="noopener">在colab上直接運行</a>喔！趕快來跑跑看吧！</p>



<h3 id="最後，終於要爬取全球股價了！">最後，終於要爬取全球股價了！</h3>



<p>萬事俱備！只欠東風，不過由於這次的教學已經很多了，所以大家可以自己練習看看，或是前往<a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B83%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E6%AD%B7%E5%8F%B2%E6%95%B8%E6%93%9A/">下一個單元</a>，來爬取所有的歷史指數吧！</p>



<p>這一系列是我們影音課程的化簡版，<br>假如對此教程有興趣，歡迎點選下方影音課程，會豐富到炸裂喔～</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/python%e6%96%b0%e6%89%8b%e6%95%99%e5%ad%b82%e5%85%a8%e7%90%83%e6%8c%87%e6%95%b8%e4%b8%80%e6%ac%a1%e6%8a%93/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">851</post-id>	</item>
		<item>
		<title>Python新手教學(Part 3)：全球指數歷史數據下載大全</title>
		<link>https://www.finlab.tw/python%e6%96%b0%e6%89%8b%e6%95%99%e5%ad%b83%e5%85%a8%e7%90%83%e6%8c%87%e6%95%b8%e6%ad%b7%e5%8f%b2%e6%95%b8%e6%93%9a/</link>
					<comments>https://www.finlab.tw/python%e6%96%b0%e6%89%8b%e6%95%99%e5%ad%b83%e5%85%a8%e7%90%83%e6%8c%87%e6%95%b8%e6%ad%b7%e5%8f%b2%e6%95%b8%e6%93%9a/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Wed, 22 Jul 2020 07:05:39 +0000</pubDate>
				<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[爬蟲]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[股票]]></category>
		<category><![CDATA[股票分析]]></category>
		<guid isPermaLink="false">http://34.96.136.135/?p=861</guid>

					<description><![CDATA[這個單元我們要利用 for 迴圈將所有的歷史數據爬下來，並且繪製所有的歷史股價。我們也會介紹一些 for 迴圈的進階技巧，並且將這些技巧結合起來，完成這次的功能，想要學習python，就慢慢跟著我們一步一步來吧！]]></description>
										<content:encoded><![CDATA[
<p>這個單元我們要利用 for 迴圈將所有的歷史數據爬下來，並且繪製所有的歷史股價。我們也會介紹一些 for 迴圈的進階技巧，並且將這些技巧結合起來，完成這次的功能，想要學習python，就慢慢跟著我們一步一步來吧！<a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B83%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E6%AD%B7%E5%8F%B2%E6%95%B8%E6%93%9A/thumbnail.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="679" src="http://34.96.136.135/wp-content/uploads/2020/07/thumbnail-5-4-1024x679.png" alt="thumbnail 5 4" class="wp-image-864" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-5-4-1024x679.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-5-4-300x199.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-5-4-768x510.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-5-4-1536x1019.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-5-4.png 1664w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 3)：全球指數歷史數據下載大全 39"></figure></div>



<p>延續<a href="https://www.finlab.tw/python%e6%96%b0%e6%89%8b%e6%95%99%e5%ad%b82%e5%85%a8%e7%90%83%e6%8c%87%e6%95%b8%e4%b8%80%e6%ac%a1%e6%8a%93/" class="rank-math-link">上個單元</a>，我們應該已經爬取了<code>world_index</code>這張表格：<a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B83%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E6%AD%B7%E5%8F%B2%E6%95%B8%E6%93%9A/1.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="314" src="http://34.96.136.135/wp-content/uploads/2020/07/1-3-1-1024x314.png" alt="1 3 1" class="wp-image-866" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/1-3-1-1024x314.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/1-3-1-300x92.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/1-3-1-768x235.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/1-3-1-1536x471.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/1-3-1-2048x627.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 3)：全球指數歷史數據下載大全 40"></figure></div>



<p>然後還有一個我們寫好的function</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">import json
import requests
import datetime
import pandas as pd
import numpy as np

def crawl_price(stock_id):

    d = datetime.datetime.now()
    url = "https://query1.finance.yahoo.com/v8/finance/chart/"+stock_id+"?period1=0&amp;period2="+str(int(d.timestamp()))+"&amp;interval=1d&amp;events=history&amp;=hP2rOschxO0"

    res = requests.get(url)
    data = json.loads(res.text)
    df = pd.DataFrame(data['chart']['result'][0]['indicators']['quote'][0], index=pd.to_datetime(np.array(data['chart']['result'][0]['timestamp'])*1000*1000*1000))
    return df</code></pre>



<p>接下來就可以將他們結合，來爬取歷史資料了！在爬取資料之前，有幾個程式的小技巧必須要學會</p>



<h3 id="1-for-迴圈">1. for 迴圈</h3>



<p>假如我們要執行重複性的動作，通常第一件事情就是想到for 迴圈，例如我們想要印出1～9，不用for迴圈，我們可以寫成</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">print(1)
print(2)
print(3)
print(4)
print(5)
print(6)
print(7)
print(8)
print(9)</code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="328" src="http://34.96.136.135/wp-content/uploads/2020/07/2-3-1024x328.png" alt="2 3" class="wp-image-867" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/2-3-1024x328.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/2-3-300x96.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/2-3-768x246.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/2-3-1536x493.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/2-3-2048x657.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 3)：全球指數歷史數據下載大全 41"></figure></div>



<p><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B83%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E6%AD%B7%E5%8F%B2%E6%95%B8%E6%93%9A/2.png"></a>但很明顯我們就已經快要中風了，所以改成for迴圈後</p>



<pre class="wp-block-code"><code lang="python" class="language-python">for i in [1,2,3,4,5,6,7,8,9]:
    print(i)</code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="216" src="http://34.96.136.135/wp-content/uploads/2020/07/3-2-1-1024x216.png" alt="3 2 1" class="wp-image-868" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/3-2-1-1024x216.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/3-2-1-300x63.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/3-2-1-768x162.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/3-2-1-1536x325.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/3-2-1-2048x433.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 3)：全球指數歷史數據下載大全 42"></figure></div>



<p><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B83%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E6%AD%B7%E5%8F%B2%E6%95%B8%E6%93%9A/3.png"></a></p>



<p>這樣短短的就寫完了！其中<br>第一行：我們有一個變數i，他會從1～9不斷變換，並且執行下方的print(i)。第二行要記得加上前方四個空白，通常叫做縮排「indent」，當第一行有<code>for</code>這個標示後，之後就必須用縮排indent直到寫完for迴圈裡的內容為止。</p>



<p>但有時候我們希望同時做兩個迴圈呢？</p>



<h3 id="使用zip">使用zip</h3>



<p>我們可以使用zip，一次執行兩個list：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">for number, letter in zip([1,2,3], ['a', 'b', 'c']):
    print(number, letter)</code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="129" src="http://34.96.136.135/wp-content/uploads/2020/07/4-2-1024x129.png" alt="4 2" class="wp-image-869" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/4-2-1024x129.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/4-2-300x38.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/4-2-768x97.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/4-2-1536x194.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/4-2-2048x258.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 3)：全球指數歷史數據下載大全 43"></figure></div>



<p><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B83%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E6%AD%B7%E5%8F%B2%E6%95%B8%E6%93%9A/4.png"></a></p>



<p>最後，我們要使用 dictionary 將全球的指數給存起來。</p>



<h3 id="dictionary">dictionary</h3>



<p>這邊先示範最簡單的用法：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">d = {}
d['a'] = 1
d['b'] = 2

# 查找
print(d['b']) # 2

# 迴圈
# 其中，d.items 有點像是zip的感覺，
# 針對dictionary中的['a', 'b']和[1,2]進行迴圈）
for letter, number in d.items():
    print(letter, number)
# a 1
# b 2</code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="248" src="http://34.96.136.135/wp-content/uploads/2020/07/6-1-1-1024x248.png" alt="6 1 1" class="wp-image-870" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/6-1-1-1024x248.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/6-1-1-300x73.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/6-1-1-768x186.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/6-1-1-1536x372.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/6-1-1-2048x496.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 3)：全球指數歷史數據下載大全 44"></figure></div>



<p><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B83%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E6%AD%B7%E5%8F%B2%E6%95%B8%E6%93%9A/6.png"></a>結合上述的小功能，就可以寫一個程式將世界指數都抓下來了！<br>我建議你自己試試看～<br>寫完之後再往下拉看範例：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">import time
world_index_history = {}
for symbol, name in zip(world_index['Symbol'], world_index['Name']):
    
    print(name)
    
    world_index_history[name] = crawl_price(symbol)
    time.sleep(5)</code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="445" src="http://34.96.136.135/wp-content/uploads/2020/07/5-2-1024x445.png" alt="5 2" class="wp-image-871" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/5-2-1024x445.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/5-2-300x130.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/5-2-768x334.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/5-2-1536x668.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/5-2-2048x890.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 3)：全球指數歷史數據下載大全 45"></figure></div>



<p><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B83%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E6%AD%B7%E5%8F%B2%E6%95%B8%E6%93%9A/5.png"></a>假如你有認真研究前三點功能，相信這些代碼應該難不倒你！其中沒有教到的是，我們利用<code>time.sleep(5)</code>，來休息一下，不要抓的太頻繁，不然會被封鎖，除此之外，上述代碼非常簡單，寫一個for迴圈，將所有的指數都抓下來，存在<code>world_index_history</code>中。</p>



<h3 id="繪製指數">繪製指數</h3>



<p>接下來，我們可以用一樣的for迴圈，來將指數給畫出來</p>



<pre class="wp-block-code"><code lang="python" class="language-python">for name, history in world_index_history.items():
    history.close.plot()</code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="597" src="http://34.96.136.135/wp-content/uploads/2020/07/f-1-1024x597.png" alt="f 1" class="wp-image-873" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/f-1-1024x597.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/f-1-300x175.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/f-1-768x447.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/f-1-1536x895.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/f-1-2048x1193.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 3)：全球指數歷史數據下載大全 46"></figure></div>



<p><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B83%E5%85%A8%E7%90%83%E6%8C%87%E6%95%B8%E6%AD%B7%E5%8F%B2%E6%95%B8%E6%93%9A/f.png"></a></p>



<p>這個<a href="https://colab.research.google.com/drive/1W-pA4jdlPVfil9WZqsRK0Nd8Mel4tMlx?usp=sharing" class="rank-math-link" target="_blank" rel="noopener">單元的程式碼，都可以使用 colab 來執行</a>喔！趕快來玩玩看吧！</p>



<h3 id="有了指數，接下來要做什麼呢？">有了指數，接下來要做什麼呢？</h3>



<p><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B84%E7%9B%B8%E9%97%9C%E6%80%A7%E5%88%86%E6%9E%90/">下個單元</a>，我們要來分析一下這些指數，看看哪些適合投資，哪些不適合，敬請期待～</p>



<p>這一系列是我們影音課程的化簡版，</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/python%e6%96%b0%e6%89%8b%e6%95%99%e5%ad%b83%e5%85%a8%e7%90%83%e6%8c%87%e6%95%b8%e6%ad%b7%e5%8f%b2%e6%95%b8%e6%93%9a/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">861</post-id>	</item>
		<item>
		<title>Python新手教學(Part 4)：台股的好兄弟是？台股相關性研究</title>
		<link>https://www.finlab.tw/python%e6%96%b0%e6%89%8b%e6%95%99%e5%ad%b84%e7%9b%b8%e9%97%9c%e6%80%a7%e5%88%86%e6%9e%90/</link>
					<comments>https://www.finlab.tw/python%e6%96%b0%e6%89%8b%e6%95%99%e5%ad%b84%e7%9b%b8%e9%97%9c%e6%80%a7%e5%88%86%e6%9e%90/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Wed, 22 Jul 2020 07:05:39 +0000</pubDate>
				<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[Python新手教學]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[爬蟲]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[股票]]></category>
		<category><![CDATA[股票分析]]></category>
		<guid isPermaLink="false">http://34.96.136.135/?p=875</guid>

					<description><![CDATA[為什麼美股大跌，在台灣的投資人要很緊張？原因就是相關性！想知道台股跟哪國指數最同步嗎？不是S&#038;P 500美國指數，也不是深圳指數，那究竟是哪國呢？這篇文章我們就來研究一下吧！]]></description>
										<content:encoded><![CDATA[
<p>為什麼美股大跌，在台灣的投資人要很緊張？原因就是相關性！想知道台股跟哪國指數最同步嗎？不是S&amp;P 500美國指數，也不是深圳指數，那究竟是哪國呢？這篇文章我們就來研究一下吧！<a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B84%E7%9B%B8%E9%97%9C%E6%80%A7%E5%88%86%E6%9E%90/last.png"></a></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" width="1024" height="988" src="http://34.96.136.135/wp-content/uploads/2020/07/last-1-1024x988.png" alt="last 1" class="wp-image-877" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/last-1-1024x988.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/last-1-300x289.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/last-1-768x741.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/last-1.png 1108w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 4)：台股的好兄弟是？台股相關性研究 47"></figure></div>


<h2 id="相關性最白話">相關性</h2>



<p>首先我們先介紹什麼是相關性，<br>相關性最白話的講法，你可以想像，看到天空烏雲密佈，代表可能要下雨了，<br>代表天空的顏色跟下雨機率有相關，<br>你可以由一個現象，去預測另一個現象，這就是相關性！</p>



<h3 id="相關性稍微數學一點">相關性稍微數學一點</h3>



<p>相關性也可以更數值化的方式表示，先用以下例子講解：<a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B84%E7%9B%B8%E9%97%9C%E6%80%A7%E5%88%86%E6%9E%90/2.png"></a></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" width="1024" height="263" src="http://34.96.136.135/wp-content/uploads/2020/07/2-4-1024x263.png" alt="2 4" class="wp-image-878" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/2-4-1024x263.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/2-4-300x77.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/2-4-768x197.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/2-4-1536x395.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/2-4.png 1914w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 4)：台股的好兄弟是？台股相關性研究 48"></figure></div>


<p>這張圖中：</p>



<ul><li>我們可以看上方左側圖，天氣溫度跟買冰棒人數的變化圖，可以想像某人每一天記錄天氣溫度與冰棒人數，每天畫一個黃點，時間久了，就可以看出黃點之間的關係，也就是天氣越熱，越有人會想要買冰棒！</li><li>同理，上方中間那張圖，某人也可以記錄每天生病的人數，此時就發現，天氣越冷，越多人會感冒！</li><li>當然某人覺得有趣，於是又記錄了溫度與擲筊的關係，最後發現：沒什麼關連</li></ul>



<p>好了，某人已將觀測值變成數字記錄起來了，但每次都必須畫這麼多點，才能看出相關性，也太累了吧？能不能用一個數字取代呢？</p>



<p>這時就可以用</p>



<h3 id="correlation-coefficient-（相關性係數）">correlation coefficient （相關性係數）</h3>



<p>有人可能覺得太多點點了，有密集恐懼症，希望可以將上方這三張圖，每張圖用一個數字代表就好，這樣就不需要看到這麼多點點。</p>



<p>所以某人提出了 correlation coefficient ，從上面第一張圖開始從左而又，分別可以用 1、-1、0來代表：</p>



<ul><li>1 代表正相關，也就是X越高Y越高，X越低Y越低（成正比）</li><li>─1 代表負相關，也就是X越高Y越低，或X越低Y越高（成反比）</li><li>0 代表無相關性</li></ul>



<p>上述只是化簡後的例子<br>事實上相關性係數不是整數，而是會介於─1～1間，代表正負相關的程度！</p>



<p>讀到這裡，你可能會問，</p>



<h3 id="所以跟投資有什麼關係？">所以相關性跟投資有什麼關係？</h3>



<p>投資就是預測未來現象與當下現象的相關性！<br>就像你看到天空烏雲密佈，就能預測接下來會下雨，<br>我們也可以將相關性係數用於全球指數，</p>



<p>為什麼美股大跌，在台灣的投資人要很緊張？原因就是相關性！<br>台股跟美股有正相關。</p>



<p>我們可以用Python將相關性畫出來，假如你還沒有爬取歷史股價的話，可以先到<a href="https://www.finlab.tw/python%e6%96%b0%e6%89%8b%e6%95%99%e5%ad%b83%e5%85%a8%e7%90%83%e6%8c%87%e6%95%b8%e6%ad%b7%e5%8f%b2%e6%95%b8%e6%93%9a/" class="rank-math-link">前個單元</a>爬取喔！</p>



<h2>程式碼撰寫</h2>



<h3>歷史數據回顧</h3>



<p>首先我們可以看一下上個單元爬下來的歷史數據</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">print(world_index_history['S&amp;P 500'].head())</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" width="1024" height="241" src="http://34.96.136.135/wp-content/uploads/2020/07/3-3-1024x241.png" alt="3 3" class="wp-image-879" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/3-3-1024x241.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/3-3-300x71.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/3-3-768x181.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/3-3-1536x362.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/3-3-2048x483.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 4)：台股的好兄弟是？台股相關性研究 49"></figure></div>


<p><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B84%E7%9B%B8%E9%97%9C%E6%80%A7%E5%88%86%E6%9E%90/3.png"></a>還記得<code>world_index_history</code>嗎？它是一個dictionary，根據不同的字串，例如<code>S&amp;P 500</code>，可以叫出相對應的表格（dataframe）</p>



<p>有了&nbsp;<code>world_index_history</code>&nbsp;我們就可以將國際指數的相關性給畫出來，但首先，我們要先來瞭解</p>



<h3 id="Adj-Close跟Close的差異？"><code>比對歷史數據，發現close價格不一樣？</code></h3>



<p>假如你認真的比對歷史數據（例如玩股網），就會發現離現在越久遠以前的歷史價格，誤差越大！這是為什麼呢？其實這個並不是誤差喔！因為 yahoo finance 的歷史價格是「調整後收盤價」代表這是考慮了除權息的價格變化，所計算出來的價格。</p>



<h3 id="簡單的例子">簡單的例子</h3>



<p>當除權息、增減資時，一般股價會有大波動，以除權息為例，股票價格瞬間下跌<br>然而帳戶裡的股票張數會變多（例如領股利）<br>或是帳戶資金量變多（領股息）<br>總體來講是不賺不賠的</p>



<p>所以當除權息時，<br>正常的收盤價&nbsp;會突然下跌很多，<br>而 yahoo finance 的調整後收盤價，不會因為除權息有巨幅下跌<br>更能夠精確的反映股票價值，跟投資的獲利狀況！</p>



<h3 id="Python-終於開始了">Python 終於開始了</h3>



<p>首先我們先將所有指數的&nbsp;<code>Adj Close</code>&nbsp;先集合起來，變成一張表格(dataframe)</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">close = {}
for name, price in world_index_history.items():
    if len(price) != 0:
        close[name] = price['Close']

close = pd.DataFrame(close)
close = close.resample('1d').last().dropna(how='all', axis=1).dropna(how='all', axis=0)</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" width="1024" height="433" src="http://34.96.136.135/wp-content/uploads/2020/07/5-3-1024x433.png" alt="5 3" class="wp-image-881" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/5-3-1024x433.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/5-3-300x127.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/5-3-768x325.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/5-3-1536x650.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/5-3-2048x867.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 4)：台股的好兄弟是？台股相關性研究 50"></figure></div>


<p><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B84%E7%9B%B8%E9%97%9C%E6%80%A7%E5%88%86%E6%9E%90/5.png"></a></p>



<p>接下來就可以來觀察每檔指數的&nbsp;<code>Adj Close</code>&nbsp;相關性，</p>



<pre class="wp-block-code"><code lang="python" class="language-python">corr = close.corr()
print(corr)</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" width="1022" height="544" src="http://34.96.136.135/wp-content/uploads/2020/07/6-2.png" alt="6 2" class="wp-image-882" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/6-2.png 1022w, https://www.finlab.tw/wp-content/uploads/2020/07/6-2-300x160.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/6-2-768x409.png 768w" sizes="(max-width: 1022px) 100vw, 1022px" title="Python新手教學(Part 4)：台股的好兄弟是？台股相關性研究 51"></figure></div>


<p><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B84%E7%9B%B8%E9%97%9C%E6%80%A7%E5%88%86%E6%9E%90/6.png"></a></p>



<p>上圖可以看到一個二維的表，就是每個指數跟每個指數之間的相關性，<br>上圖中可以發現，指數自己跟自己的相關性一定是1，代表完全正相關！<br>而這張表會是symmetric matrix，也就是做對角線會是對稱的。</p>



<p>接下來我們可以用更視覺化的方式來表示，假如沒有sns的package，要記得先去安裝<code>pip install sns</code>即可，想瞭解如何安裝，可以到<a href="https://www.finlab.tw/Python%E8%82%A1%E7%A5%A8%E6%8A%95%E8%B3%87/">此安裝教學</a>的下半部分，有簡單的教學喔！</p>



<pre class="wp-block-code"><code lang="python" class="language-python">import seaborn as sns
sns.heatmap(corr, square=True ,vmax=1.0, linecolor='white', annot=True)</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" width="1024" height="988" src="http://34.96.136.135/wp-content/uploads/2020/07/last-1-2-1024x988.png" alt="last 1 2" class="wp-image-884" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/last-1-2-1024x988.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/last-1-2-300x289.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/last-1-2-768x741.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/last-1-2.png 1108w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 4)：台股的好兄弟是？台股相關性研究 52"></figure></div>


<p><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B84%E7%9B%B8%E9%97%9C%E6%80%A7%E5%88%86%E6%9E%90/last.png"></a></p>



<p>假如你發現圖比我的小，字看不清楚，可以改成以下程式碼</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers"># set figure size
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['figure.figsize'] = (18, 18)

# original code
import seaborn as sns
sns.heatmap(corr, square=True ,vmax=1.0, linecolor='white', annot=True)
</code></pre>



<p>有了以上的code，我們就可以知道</p>



<h3 id="台灣股票跟誰最連動">台灣股票跟誰最連動</h3>



<p>我們可以人眼觀察，發現台灣指數<code>TSEC weighted index</code>跟英國前一百大<code>Cboe UK 100</code>超像！相關係數高達0.9，代表非常非常像</p>



<p>我們可以將這兩個指數畫出來檢查一下：</p>



<pre class="wp-block-code"><code class="">close['Cboe UK 100']['2015':].plot()
close['TSEC weighted index']['2015':].plot()</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" width="1024" height="343" src="http://34.96.136.135/wp-content/uploads/2020/07/7-1-1024x343.png" alt="7 1" class="wp-image-886" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/7-1-1024x343.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/7-1-300x100.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/7-1-768x257.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/7-1-1536x514.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/7-1-2048x686.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="Python新手教學(Part 4)：台股的好兄弟是？台股相關性研究 53"></figure></div>


<p><a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B84%E7%9B%B8%E9%97%9C%E6%80%A7%E5%88%86%E6%9E%90/7.png"></a></p>



<p>雖然價格不同，但是趨勢還真的頗像的耶！然而台灣的加權指數，在2020年的價格，跟某幾個美國的指數相關性非常高，究竟是哪一個指數呢？可以使用<a href="https://colab.research.google.com/drive/1W-pA4jdlPVfil9WZqsRK0Nd8Mel4tMlx?usp=sharing" class="rank-math-link" target="_blank" rel="noopener">我們寫好的colab範例</a>跑跑看喔！</p>



<h3 id="如何用於交易？">如何用於交易？</h3>



<p>兩個相關性很高的股票，可以拿來做pair trading配對交易，但也不是只看相關性，<br>這個就容我們之後再慢慢分析吧！<br>這個單元會一直帶你從零開始，慢慢學習，直到機器學習的部分喔！敬請期待～<br>下一個單元中，我們來看一下<a href="https://www.finlab.tw/Python%E6%96%B0%E6%89%8B%E6%95%99%E5%AD%B8%EF%BC%9A%E9%A2%A8%E9%9A%AA%E8%88%87%E5%A0%B1%E9%85%AC/">要怎麼控制報酬與風險</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/python%e6%96%b0%e6%89%8b%e6%95%99%e5%ad%b84%e7%9b%b8%e9%97%9c%e6%80%a7%e5%88%86%e6%9e%90/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">875</post-id>	</item>
		<item>
		<title>python上櫃資料爬蟲輕鬆做</title>
		<link>https://www.finlab.tw/%e7%b0%a1%e5%96%aepython%e4%b8%8a%e6%ab%83%e8%b3%87%e6%96%99%e7%88%ac%e8%9f%b2%e5%af%a6%e5%81%9a/</link>
					<comments>https://www.finlab.tw/%e7%b0%a1%e5%96%aepython%e4%b8%8a%e6%ab%83%e8%b3%87%e6%96%99%e7%88%ac%e8%9f%b2%e5%af%a6%e5%81%9a/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Wed, 22 Jul 2020 07:05:22 +0000</pubDate>
				<category><![CDATA[PYTHON財經]]></category>
		<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[爬蟲]]></category>
		<category><![CDATA[股票]]></category>
		<guid isPermaLink="false">http://34.96.136.135/?p=657</guid>

					<description><![CDATA[謝謝各位的支持，有很多人寄信來問各式各樣不同的研究！但因為討論熱烈，我目前先挑比較簡單的做，其它的在清單中，依序補上。最近發現上櫃的股票也滿多人在看的，今天教大家如何用python抓取上櫃公司的收盤價！]]></description>
										<content:encoded><![CDATA[
<p>謝謝各位的支持，有很多人寄信來問各式各樣不同的研究！<br>但因為討論熱烈，我目前先挑比較簡單的做，其它的在清單中，依序補上～<br>最近發現上櫃的股票也滿多人在看的，今天教大家如何用python抓取上櫃公司的收盤價！<a href="https://www.finlab.tw/%E7%B0%A1%E5%96%AEpython%E4%B8%8A%E6%AB%83%E8%B3%87%E6%96%99%E7%88%AC%E8%9F%B2%E5%AF%A6%E5%81%9A/thumbnail.jpeg"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="259" height="194" src="http://34.96.136.135/wp-content/uploads/2020/07/thumbnail-4.jpeg" alt="thumbnail 4" class="wp-image-658" title="python上櫃資料爬蟲輕鬆做 54"></figure></div>



<p>首先，我們只要從這個網址，把資料get下來就行了！</p>



<p>爬取上櫃股價網址</p>



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

link = 'http://www.tpex.org.tw/web/stock/aftertrading/daily_close_quotes/stk_quote_download.php?l=zh-tw&amp;d=107/02/09&amp;s=0,asc,0'
r = requests.get(link)
r.ok</code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="134" src="http://34.96.136.135/wp-content/uploads/2020/07/get-1024x134.png" alt="get" class="wp-image-659" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/get-1024x134.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/get-300x39.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/get-768x101.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/get.png 1121w" sizes="(max-width: 1024px) 100vw, 1024px" title="python上櫃資料爬蟲輕鬆做 55"></figure></div>



<p><a href="https://www.finlab.tw/%E7%B0%A1%E5%96%AEpython%E4%B8%8A%E6%AB%83%E8%B3%87%E6%96%99%E7%88%AC%E8%9F%B2%E5%AF%A6%E5%81%9A/get.png"></a>可以看到網址中，包含了日期：107/02/09，這個字樣，可以改成其它日期。<br>get下來就是csv檔了！直接丟進pandas：</p>



<p>使用pandas讀取</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">lines = r.text.replace('\r', '').split('\n')

import pandas as pd
from io import StringIO
df = pd.read_csv(StringIO("\n".join(lines[3:])), header=None)
df.head()</code></pre>



<p>但我發現一個小問題：</p>



<ul><li>在csv檔中，第一行是：”a”,”b”,”c”</li><li>但是在其它行，則顯示：a,b,c</li></ul>



<p>有沒有雙引號很重要，會讓pandas沒辦法直接讀進來，所以我們前面幾行先去除（上段code中<code>lines[3:]</code>）</p>



<p>就可以得到下圖：<a href="https://www.finlab.tw/%E7%B0%A1%E5%96%AEpython%E4%B8%8A%E6%AB%83%E8%B3%87%E6%96%99%E7%88%AC%E8%9F%B2%E5%AF%A6%E5%81%9A/unindex.png"></a></p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="307" src="http://34.96.136.135/wp-content/uploads/2020/07/unindex-1024x307.png" alt="unindex" class="wp-image-660" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/unindex-1024x307.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/unindex-300x90.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/unindex-768x230.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/unindex.png 1124w" sizes="(max-width: 1024px) 100vw, 1024px" title="python上櫃資料爬蟲輕鬆做 56"></figure>



<p>但我們的index跟column都還沒設定好（都是數字），要把它轉換成有意義的label：</p>



<p>整理index跟columns</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">df.columns = list(map(lambda l: l.replace(' ',''), lines[2].split(',')))
df.index = df['代號']
df = df.drop(['代號'], axis=1)
df.head()</code></pre>



<p>首先先來換column，裡面有些複雜的程式（第一行）慢慢講解：</p>



<ol><li><code>lambda l: l.replace(' ','')</code>&nbsp;是一個函式，但是我懶得命名，所以就用&nbsp;<code>lambda</code>&nbsp;賴省略函式名稱，它會讀入，這個函式讀入&nbsp;<code>l</code>，並將<code>l</code>裡面的空白刪除並outpu出來。</li><li>其中的<code>map(func, array)</code>就指：將<code>array</code>裡面所有元素，都用<code>func</code>處理一遍。</li><li><code>line[2].split(',')</code>：將字串依照 “,” 分割成好幾個小字串。</li></ol>



<p>總體來說，就是將資串分割-&gt;針對每個子字串刪除空白。</p>



<p>另外針對<code>index</code>，我們就單純用<code>df.index = df['代號']</code>來設定，並用<code>df.drop</code>將原本的&nbsp;<code>column</code>刪除，<br>其實知道pandas有<code>df.set_index()</code>這個函式，但是發現存檔怪怪的，所以改用途法煉鋼（第2、3行）</p>



<p>這樣差不多就完成了：<a href="https://www.finlab.tw/%E7%B0%A1%E5%96%AEpython%E4%B8%8A%E6%AB%83%E8%B3%87%E6%96%99%E7%88%AC%E8%9F%B2%E5%AF%A6%E5%81%9A/index.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="360" src="http://34.96.136.135/wp-content/uploads/2020/07/index-1024x360.png" alt="index" class="wp-image-661" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/index-1024x360.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/index-300x105.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/index-768x270.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/index.png 1119w" sizes="(max-width: 1024px) 100vw, 1024px" title="python上櫃資料爬蟲輕鬆做 57"></figure></div>



<p>那要如何把檔案存起來呢？</p>



<p>我們可以利用save file</p>



<pre class="wp-block-code"><code lang="python" class="language-python">df.to_csv('test.csv')
pd.read_csv('test.csv', index_col='代號').head()</code></pre>



<p>來存檔跟讀檔喔！跑出來會是一模一樣的！<a href="https://www.finlab.tw/%E7%B0%A1%E5%96%AEpython%E4%B8%8A%E6%AB%83%E8%B3%87%E6%96%99%E7%88%AC%E8%9F%B2%E5%AF%A6%E5%81%9A/save.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="329" src="http://34.96.136.135/wp-content/uploads/2020/07/save-1024x329.png" alt="save" class="wp-image-662" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/save-1024x329.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/save-300x97.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/save-768x247.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/save.png 1119w" sizes="(max-width: 1024px) 100vw, 1024px" title="python上櫃資料爬蟲輕鬆做 58"></figure></div>



<p>今天的簡易教學就到這邊！可以下載下來玩玩看喔！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/%e7%b0%a1%e5%96%aepython%e4%b8%8a%e6%ab%83%e8%b3%87%e6%96%99%e7%88%ac%e8%9f%b2%e5%af%a6%e5%81%9a/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">657</post-id>	</item>
	</channel>
</rss>
