跳到主要內容

交易與金融市場的預測問題

經由 laisan86 提問 ‧ 76 天前

用戶行為數據蒐集/分析/預測類

AI其實是有很多賣點的, 不過, 這裡面最受大家歡迎的, 莫過於 -- 預測! 比方 : 預測匯兌, 這可以說是零售最有興趣的一項, 畢竟台灣現在每天一堆國外旅客跟商家, 開店做生意, 能收錢那才是第一!

問題就在於 : 收到的未必是新台幣! 那這怎辦呢? 一般商家通常收到外幣, 會根據銀行的牌告匯率, 自己再去打折然, 收集起來的再存入銀行或匯兌. 但是話說回來~~要是真能利用匯兌差值賺一筆, 也是不無小補(所謂熱錢, 其實就是基於這個原理, 可是還牽涉不少人為、政經情勢...因素, 說起來還蠻複雜又有風險的)

以機器學習的觀點來看, 假設排除前面講的人為外因, 透過時間形成序列的方式, 收集收盤價格Closing price成歷史數據, 再用ARIMA的方式進行預測, 還是有其一定的參考價值!

 

回答 2

經由 omnixri 回答 ‧ 76 天前

金融預測一直是大家最感興趣的領域之一,可以趨吉(賺錢)避兇(賠錢),所以從傳統的迴歸統計到最近的深度學習,無一不希望藉過往歷史資訊來決定定價、投資組合構建、風險管理甚至高頻交易等。

Sonam Srivastava 寫了一篇文章"Deep Learning in Finance"盤點了金融領域常見的算法的優缺點及預測結果,包括

  • 差分整合移動平均自回歸模型(Autoregressive Integrated Moving Average model, ARIMA)

  • 向量自回歸模型(Vector Autoregression model, VAR)

  • 深度回歸模型 (Deep Regression)

  • 卷積神經網絡 (Convolutional Neural Networks, CNN)

  • 長短期記憶網絡 (Long Short-Term Memory, LSTM)

雖然金融預測很難靠單一資訊就能準確預測,但有興趣的朋友還是可以參考一下 https://towardsdatascience.com/deep-learning-in-finance-9e088cb17c03

經由 laisan86 回答 ‧ 76 天前

其實這方面, 自幹是不難, 套回老話一句還是資料要夠、要對! 像是網路上之前就有人試過針對英鎊對美金的收盤價, 進行收集以後用ARIMA分析其趨勢, 實作起來倒是不難! 範例資料可以在這裡下載 ==> https://drive.google.com/open?id=1Z32dAwTW2wkAskskwKLelzK7qzip7XhY

我是拿Python3開發的, 不過特別注意的是安裝的套件要有pandas、matplotlib、statsmodels

 

大家可以試試看 :

from pandas import read_csv
from matplotlib import pyplot
from statsmodels.tsa.arima_model import ARIMA

def GetData(fileName):
    return read_csv(fileName, header=0, parse_dates=[0], index_col=0).values

def StartARIMAForecasting(Actual, P, D, Q):
    model = ARIMA(Actual, order=(P, D, Q))
    model_fit = model.fit(disp=0)
    predicti />     return prediction
    
ActualData = GetData('exchange.csv')
NumberOfElements = len(ActualData)

TrainingSize = int(NumberOfElements * 0.7)
TrainingData = ActualData[0:TrainingSize]
TestData = ActualData[TrainingSize:NumberOfElements]

Actual = [x for x in TrainingData]
Predicti>

for timepoint in range(len(TestData)):
    ActualValue =  TestData[timepoint]

    Predicti 3,1,0)    
    print('Actual=%f, Predicted=%f' % (ActualValue, Prediction))

    Predictions.append(Prediction)
    Actual.append(ActualValue)

pyplot.plot(TestData)
pyplot.plot(Predictions, color='red')
pyplot.show()
 

結果應該可以看到, 原始資料與預測的線段還蠻貼近的, 關鍵在於 TrainingSize = int(NumberOfElements * 0.7) 這一列, 這列表示會把原始資料中的70%拿來做訓練, 剩餘的30%當作測試資料, 調整看看, 原始資料與預測的線段是否會因此開始略有不同?

 

.......

Actual=66.328000, Predicted=67.659417
Actual=64.740000, Predicted=67.057834
Actual=62.450000, Predicted=65.268602
Actual=64.348000, Predicted=63.473869
Actual=65.430000, Predicted=64.260047
Actual=62.711000, Predicted=64.671368
Actual=62.663000, Predicted=63.293874
Actual=62.520000, Predicted=63.267024
Actual=61.780000, Predicted=62.550437
Actual=59.665000, Predicted=62.024397
Actual=57.167000, Predicted=60.451596
Actual=56.001000, Predicted=58.364315
Actual=57.585000, Predicted=56.873684
Actual=57.820000, Predicted=57.339436
Actual=57.090000, Predicted=57.387769
Actual=58.910000, Predicted=57.256028
Actual=59.520000, Predicted=58.513376
Actual=61.223000, Predicted=58.926507
Actual=62.147000, Predicted=60.578724
Actual=61.660000, Predicted=61.492646
Actual=59.988000, Predicted=61.605069
Actual=61.067000, Predicted=60.591967
Actual=61.540000, Predicted=61.095288
Actual=63.660000, Predicted=61.144890
Actual=62.740000, Predicted=62.917183
Actual=60.080000, Predicted=62.548462
Actual=60.552000, Predicted=61.081593
Actual=61.542000, Predicted=60.975584
Actual=61.698000, Predicted=61.118603
Actual=60.870000, Predicted=61.428925
Actual=59.610000, Predicted=61.080842
Actual=58.670000, Predicted=60.160284
Actual=59.730000, Predicted=59.212750
Actual=59.795000, Predicted=59.600040
Actual=61.550000, Predicted=59.529964
Actual=62.070000, Predicted=61.004988
Actual=61.652000, Predicted=61.522841
Actual=61.686000, Predicted=61.664595
Actual=58.795000, Predicted=61.760668
Actual=58.908000, Predicted=59.644325
Actual=56.210000, Predicted=59.494302
Actual=54.917000, Predicted=56.970193
Actual=52.488000, Predicted=55.882759
Actual=52.770000, Predicted=53.473277

.......

 

需登入才能回答問題