在金融市場裡面,往往你會聽到趨勢這兩個字,而似乎這個字與隨機漫步是分開的,因為如果一個金融商品的價格是有趨勢的,那他怎麼可能隨機呢?
理論上,隨機應該是上上下下的起伏才對,但是我們可以看到GDP不斷往上,也可以看到有股票的價格是不斷向下的,在這樣的情況下,為什麼經濟學家們還是執著在隨機漫步裡面,所謂的隨機究竟是什麼呢?
這篇文章就透過2021年的新台幣對美金走勢來講述到底何謂趨勢中的隨機,同時稍微把趨勢以及隨機漫步這兩個概念講解一下。整篇文章會用Python及數學的方式來輔助說明,但對於這部分沒興趣的其實可以單純看圖就好,並不影響閱讀。
疫情下的新台幣走勢
疫情衝擊之下的新台幣相較於美金其實是不斷升值的,這一點跟2009年的FED一系列非典型貨幣政策有關,而台灣由於貿易跟美國相關以及金融商品稍微複雜,其實受到美金溢出到台灣市場的影響眾多,同樣的,2020年開始美國又開始一系列的非典型貨幣政策,而新台幣以及台灣金融市場的價格也水漲船高。
在這邊,讓我們先透過Python來把資料叫出來重現這樣的情況可能會比較清楚,首先事先設定幾個我們可能會用到的套軟
import numpy as np import pandas as pd from pandas_datareader import data as pdr import statsmodels.api as sm from scipy.optimize import minimize, show_options import matplotlib.pyplot as plt import seaborn as sns sns.set()
接著,我們來把資料叫出來,我們的資料庫來源是Yahoo Finance而擷取的是其則是2020年的1月1日到2021年的8月10日:
twd = pdr.DataReader(['TWD=X'],data_source='yahoo', start='2020-01-01', end='2021-08-10') twd = twd['Adj Close'] twd.head()
接著,讓我們來把資料繪圖出來見證一下這一年的新台幣走勢,理論上應該會看到圖一的走勢圖:
fig, ax = plt.subplots(1, 1,sharex=True,figsize=(15, 8)) ax.set_title('TWD/USD',size = 20); ax.plot(twd);
從圖一可以看到,新台幣其實就是不斷往下的趨勢,而這種不斷往下的趨勢似乎跟我們認知到的上上下下的隨機起伏無關,似乎只要掌握趨勢就能掌握財富密碼,如果你在2020年初的時候藉一百萬美金來買台幣,到了2021年的八月你還清了那一百萬美金還能賺到將近20萬台幣,這種美好的生意如果能掌握趨勢就能掌握財富密碼,怎麼會說隨機漫步不可預測呢?
但統計學家們會跟你說即便如此,這樣的趨勢其實本身也是包含不可預測的隨機部分,接下來我會簡述數學的部分,單純展示要如何從趨勢中找到隨機漫步的部分,而這裡面提到的方法有興趣的可以上網找有更詳細的資訊,但對於數學概念沒興趣的可以直接跳過下一段閱讀,並不會影響。
隨機X趨勢以及HP Filter的數學概念
關於隨機漫步,你可以想成一個統計分布,儘管你可以抓出這個統計分布的規則,但是你要準確地知道跟隨這個規則的點他下一秒會出現在何方式不可能的,而這樣的隨機漫步我們可以用下面的數學公式來表達:
y是價格,而則是這個隨機的規則,成被稱為誤差項,但這只是描述規則而已,然而我們這樣的規則要跟價格產稱連結,我們需要的其實是如下的描述:
這樣的模型基本被稱為AR(1)模型,也就是今天的價格是過去那一個單位價格加上一個誤差項,而這樣的模型就會產生常見的上下波動隨機的價格模型。
但如果今天我們的公式變成了
只要a的值為正的,那麼就會出現趨勢的情況,原因在於這個a是常數,這個常數是可以被知曉的,而當時間拉個夠久,常數本琛由於不變的個性,導致了你可以在一系列的時間裡面找到這個常數的規律。
事實上,1960年代開始的時間序列經濟學就是在不斷探上述這些有關於價格如何與過去產生連結,又要如何購過不同的方法來判斷以及預測時間序列的資料,其中研究總體經濟學的兩位經濟學家:Robert J. Hodrick以及Edward C. Prescott就發明了一個名為HP filter的方法來幫助我們把趨勢分離出來並且專注在隨機漫步的起伏上面。
從總體經濟學上,貨幣或者是經濟成長甚至是大部分的總體經濟數據其實可以分為三個部分:趨勢、季節調整以及誤差項,所謂的趨勢就是上述的成長率或者是特定的常數,而季節調整則是因為總體經濟往往都在特定季節有漲跌幅,例如每年的特定幾個月會因為報稅的關係而使得資金回流或者流出國內造成貨幣升值或者貶值,也會因為特定天然氣產能的關係而造成通貨膨脹在特定幾個月上升或者下降。
如果我們需要把隨機漫步的誤差項給取出來,就需要盡量地把前兩項給極小化。HP filter所做的就是這樣而已,數學上基本上是這樣的:
(價格=趨勢+季節調整+誤差項。)
而HP filter做到的則是:
你可以看做前面的是把季節調整造成的便因最小化,因為\lambda$可以把趨勢成長的變化極小化以後試圖將這樣的趨勢給常數化。經由這個方法,HP Filter可以幫我們找到總體經濟的趨勢。
以上就是簡單的數學概念,而下面我們就來透過圖解程式快速幫我們底解到底這跟新台幣走勢有什麼關係。
拆解趨勢與隨機漫步
上面枯燥乏味的數學其實不懂沒關係,只要記得HP filter可以來幫我們擷取趨勢就好了,透過下面的程式以及圖片來理解比較重要,首先我們來把新台幣取log,之所以取log的原因是在於這種方法可以幫我們接近新台幣每日變化百分比,而不單純只是價格。
log_twd = np.log(twd).values
取完log以後,我們接著可以來使用上述提到的HP filter,事實上你根本不等數學也沒關係,因為我們用了Python的套軟,Statsmodels,來幫我們直接取得趨勢,而這只需要一行而已,也就是你在下面程式碼看到的第一行。
隨後,其實只是把圖畫出來而已,沒什麼特別的,理論上應該會得到圖二的結果。
# Store the cycle and the trend cycle, trend = sm.tsa.filters.hpfilter(log_twd, 1600) fig, ax = plt.subplots(1, 1,sharex=True,figsize=(15, 8)) df_trend = pd.DataFrame(index = twd.index, data = trend) df_log_twd = pd.DataFrame(index = twd.index, data = log_twd) ax.set_title('Log TWD vs Statsmodels Trend',size = 20); ax.plot(df_trend); ax.plot(df_log_twd); ax.legend(['Trend of TWD','TWD']);
從圖二你可以看到,透過HP filter,新台幣的走勢可以成為一條平滑的藍色曲線,而我們也可以擷取到哪一部分的新台幣是跟趨勢有關,哪一部分的新台幣則是不可預測的隨機漫步。
而下面的程式碼其實就是把高於趨勢以及低於趨勢的部份給特別的展現出來,而結果應該跟圖三一樣:
fig,ax = plt.subplots(2,1,sharex = True, figsize = (15,8)) df_trend = pd.Series(index = twd.index, data = np.exp(trend)) df_cycle = pd.Series(index = twd.index, data = cycle) zero = [0 for t in trend] ax[0].plot(df_trend); ax[0].plot(twd); ax[0].legend(['Trend of TWD','TWD']); ax[1].plot(df_cycle) ax[1].fill_between(twd.index,zero,df_cycle,where=df_cycle > 0); ax[1].fill_between(twd.index,zero,df_cycle,where=df_cycle < 0); ax[0].set_title('TWD vs Statsmodel Trend',size = 20) ax[1].set_title('Cycle',size = 20);
從圖三可以看到,即便是在新台幣不斷升值的過程中,也是會有一段時間特別的低於趨勢(橘色區塊)或者高於趨勢的(藍色區塊),而高於或者低於趨勢的部分則是很難預測的部位,即便總體經濟裡面你可以預測到新台幣長期走升,但是在長期走升的過程中其實也是有一部分隨機漫步的因子在裡面。
有趣的或許在於藍色的區塊(漲得比趨勢高)頻率並不少,這代表即便在向下的趨勢中,也是有很高的機率會突然出現轉折點,即便你正確預測了新台幣走勢,你也無法確保能夠穩定的獲利。
所以可以賺錢嗎?
介紹完趨勢當中的隨機漫步以後,我想最關鍵的問題還是一點:所以這可以賺錢嗎?
對於交易外匯的人,尤其是選擇大量選擇權保證金交易的人而言,真正重要的其實並非是能否能夠預測趨勢,而是能否判斷在這趨勢當中的起伏。以總體經濟學的研究而言,這目前是辦不到的,有興趣的可以參考Lutz Kilian以及Mark Taylor在2003發表的這篇”Why is it so difficult to beat the random walk forecast of exchange rates?“。
更近一點的論文例如Barbara Rossi在2013年的這篇”Exchange Rate Predictability“則是統整了預測匯率的幾篇論文,而結論是大部分情況下這種轉折點是很難預測的,但在少數情況下例如匯率剛好呈現線性走是或者是有週期性的情況下是可以預測的。
而這一年新台幣的走勢如果你從圖三來看其實很難看出有週期性,甚至是低於或者高於趨勢的周期持續多久也很難看的出來,而線性模型的走勢則是要賭運氣,因為你不知道何時匯率會呈現線性而何時會是非線性。
基本上這篇文章的結論其實是要透過預測趨勢來賺取外匯的獲利其實不穩定,因為這當中真正重要的其實是轉折的點而不是趨勢本身,而預測轉折則是有很多的變因,你很難找到一個可以穩定獲利的方法。
而對於有心想要透過外匯交易獲利的人,手上應該是有不只一套模型才對,同時也不會過度依賴趨勢判斷來獲利,尤其是外匯交易往往都是選擇權以及保證金開很大的,即便對於趨勢的預測是正確的,也是可能在反轉的時候被掃出去。