自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用于金融時序預(yù)測的神經(jīng)網(wǎng)絡(luò):可改善移動平均線經(jīng)典策略

開發(fā) 開發(fā)工具
作者在文章中通過一個實際預(yù)測用例總結(jié)了金融時序預(yù)測,使用神經(jīng)網(wǎng)絡(luò)真正改善了經(jīng)典的移動平均線策略,提高了最終預(yù)測結(jié)果。

近日,Medium 上出現(xiàn)了一篇題為《Neural networks for algorithmic trading: enhancing classic strategies》的文章,作者Alex Honchar在文章中通過一個實際預(yù)測用例總結(jié)了金融時序預(yù)測,使用神經(jīng)網(wǎng)絡(luò)真正改善了經(jīng)典的移動平均線策略,提高了最終預(yù)測結(jié)果。

用于金融時序預(yù)測的神經(jīng)網(wǎng)絡(luò)

在之前的 教程中,我們討論了用于金融預(yù)測的人工神經(jīng)網(wǎng)絡(luò),比較金融時序預(yù)測的不同架構(gòu),意識到如何通過正確的數(shù)據(jù)處理和正則化實現(xiàn)充分的預(yù)測,執(zhí)行基于多變量時序的預(yù)測,并取得了非常好的波動率(volatility)預(yù)測結(jié)果,以及自定義損失函數(shù)的實現(xiàn)。在第6篇教程中,我們借助不同來源的數(shù)據(jù)進(jìn)行設(shè)置和實驗,用一個神經(jīng)網(wǎng)絡(luò)完成兩個任務(wù),優(yōu)化超參數(shù)從而實現(xiàn)更優(yōu)預(yù)測。

今天,我想借助一個實際的預(yù)測用例,對金融時序預(yù)測做個總結(jié):我們將使用神經(jīng)網(wǎng)絡(luò)改善經(jīng)典的移動平均線策略,證明它可以真正提升***的結(jié)果,并介紹了一些大家可能感興趣的新的預(yù)測目標(biāo)。

以下是之前的 6 篇教程:

  • 簡單的時序預(yù)測:https://medium.com/machine-learning-world/neural-networks-for-algorithmic-trading-part-one-simple-time-series-forecasting-f992daa1045a
  • 正確的一維時序+回溯測試:https://medium.com/machine-learning-world/neural-networks-for-algorithmic-trading-1-2-correct-time-series-forecasting-backtesting-9776bfd9e589
  • 多變量時序預(yù)測:https://medium.com/@alexrachnog/neural-networks-for-algorithmic-trading-2-1-multivariate-time-series-ab016ce70f57
  • 波動率預(yù)測與自定義損失:https://codeburst.io/neural-networks-for-algorithmic-trading-volatility-forecasting-and-custom-loss-functions-c030e316ea7e
  • 多任務(wù)與多模態(tài)學(xué)習(xí):https://becominghuman.ai/neural-networks-for-algorithmic-trading-multimodal-and-multitask-deep-learning-5498e0098caf
  • 超參數(shù)優(yōu)化:https://medium.com/machine-learning-world/neural-networks-for-algorithmic-trading-hyperparameters-optimization-cb2b4a29b8ee

你可以在 Github 查看神經(jīng)網(wǎng)絡(luò)訓(xùn)練的代碼:

https://github.com/Rachnog/Deep-Trading/blob/master/strategy/skew.py。

主要內(nèi)容

如上所述,我們能夠預(yù)測完全不同的值,從股價變化到波動率。過去我們把這些預(yù)測看作是抽象的,甚至試圖僅根據(jù)這些「上下」變動的預(yù)測進(jìn)行交易。但是我們也知道,存在基于技術(shù)分析和金融指標(biāo)的其他大量交易策略。比如,我們可以建立不同窗口的移動平均線(一個是長線,比如說 30 天,另一個是短線,很可能是 14 天),我們認(rèn)為交叉點即代表趨勢改變的時刻:

兩條移動平均線交叉的示例

兩條移動平均線交叉的示例

但是這一交易策略有個主要的缺點:在平滑區(qū)域,我們依然在那些無實際變化的點上做交易,從而遭受金錢損失。

平滑區(qū)域中移動平均線交叉的示例

平滑區(qū)域中移動平均線交叉的示例

我們?nèi)绾瓮ㄟ^機器學(xué)習(xí)解決這一問題?

讓我們看看下面的策略假設(shè):我們在移動平均線交叉處預(yù)測某些特征的變化。如果出現(xiàn)一個跳躍,我們便將其作為交易信號;否則就跳過它,因為我們不想在平滑區(qū)域損失錢。

我想嘗試把偏度(skewness)作為預(yù)測目標(biāo),偏度即度量分布非對稱性的指標(biāo)。假設(shè)我們預(yù)測分布出現(xiàn)變化,這意味著當(dāng)前的趨勢(不只是平滑區(qū)域)將在未來發(fā)生改變。

分布偏度

分布偏度

輸入數(shù)據(jù)

這里我們使用 pandas 和 PyTi 來生成更多指標(biāo),并將其作為輸入。我們將使用 MACD、Ichimocku cloud、RSI、波動率等。所有這些值將形成多變量時序,并逐漸變得平滑,以方便之后在 MLP 中使用,或者停留在 CNN/RNN。

  1. nine_period_low = pd.rolling_min(pd.DataFrame(lowp), window=  ROLLING / 2)  
  2. ichimoku = (nine_period_high + nine_period_low) /2  
  3. ichimokuichimoku = ichimoku.replace([np.inf, -np.inf], np.nan)  
  4. ichimokuichimoku = ichimoku.fillna(0.).values.tolist()  
  5. macd_indie = moving_average_convergence(pd.DataFrame(closep))  
  6. wpr = williams_percent_r(closep)  
  7. rsi = relative_strength_index(closep,  ROLLING / 2) 
  8. volatility1 = pd.DataFrame(closep).rolling(ROLLING).std().values#.tolist() 
  9. volatility2 = pd.DataFrame(closep).rolling(ROLLING).var().values#.tolist() 
  10. volatility = volatility1 / volatility2 
  11. volatility = [v[0] for v in volatility] 
  12. rolling_skewness = pd.DataFrame(closep).rolling(ROLLING).skew().values  
  13. rolling_kurtosis = pd.DataFrame(closep).rolling(ROLLING).kurt().values 

我把獲取的指標(biāo)特征和 OHLCV 元組串聯(lián)起來,以生成最終向量。

網(wǎng)絡(luò)架構(gòu)

這里,我想展示如何訓(xùn)練正則化 MLP 用于時序預(yù)測:

  1. main_input = Input(shape=(len(X[0]), ), name='main_input'
  2. x = GaussianNoise(0.05)(main_input) 
  3. x = Dense(64, activation='relu')(x)  
  4. x = GaussianNoise(0.05)(x) 
  5. output = Dense(1, activation = "linear"name = "out")(x)  
  6. final_model = Model(inputs=[main_input], outputs=[output])  
  7. opt = Adam(lr=0.002) 
  8. final_model.compile(optoptimizer=opt, loss='mse'

這里比較新奇的地方在于向輸入和神經(jīng)網(wǎng)絡(luò)單個層的輸出中添加了小噪聲。這樣神經(jīng)網(wǎng)絡(luò)的運行和 L2 正則化類似,其數(shù)學(xué)解釋請參見

https://www.deeplearningbook.org。

示例來自 http://www.deeplearningbook.org/contents/regularization.html

神經(jīng)網(wǎng)絡(luò)按照常規(guī)方式進(jìn)行訓(xùn)練,我們來檢查一下偏度預(yù)測如何改善(不改善)移動平均線策略(moving averages strategy)。

我們基于 2012 到 2016 年的 AAPL 價格訓(xùn)練神經(jīng)網(wǎng)絡(luò),然后在 2016-2017 年的數(shù)據(jù)上進(jìn)行測試(測試教程:

https://medium.com/machine-learning-world/neural-networks-for-algorithmic-trading-1-2-correct-time-series-forecasting-backtesting-9776bfd9e589)。

訓(xùn)練完成后,我繪制了收盤價、移動平均線和交叉點處的垂直線:紅線和橙線是我們想要進(jìn)行交易的點,綠線是我們不想進(jìn)行交易的點??雌饋聿⒉?**,我們用回溯測試的方法來判斷。

哪一種移動平均線交叉(moving average intersection)有用?

未使用神經(jīng)網(wǎng)絡(luò)的結(jié)果

我使用這篇文章

(https://medium.com/machine-learning-world/neural-networks-for-algorithmic-trading-1-2-correct-time-series-forecasting-backtesting-9776bfd9e589)介紹的回溯測試方法進(jìn)行操作,下面是一些關(guān)鍵度量和圖:

  • [(‘Total Return’, ‘1.66%’),
  • (‘Sharpe Ratio’, ‘16.27’),
  • (‘Max Drawdown’, ‘2.28%’),
  • (‘Drawdown Duration’, ‘204’)]
  • Signals: 9
  • Orders: 9
  • Fills: 9

滾動平均策略(rolling mean strategy)的回溯測試結(jié)果

使用神經(jīng)網(wǎng)絡(luò)的結(jié)果

我們只使用「紅色」和「橙色」交易信號,跳過綠色交易信號。我們可以看到,這樣的策略少進(jìn)行了 2 次交易,幫助我們稍微減少***回落,且最終收益幾乎是原來的兩倍!

  • [(‘Total Return’, ‘3.07%’),
  • (‘Sharpe Ratio’, ‘27.99’),
  • (‘Max Drawdown’, ‘1.91%’),
  • (‘Drawdown Duration’, ‘102’)]
  • Signals: 7
  • Orders: 7
  • Fills: 7

使用神經(jīng)網(wǎng)絡(luò)的策略的回溯測試結(jié)果

可能的改進(jìn)

看起來這個想法有點作用呢!我還想介紹一些可能有效的改進(jìn),大家可以自己試一下:

  • 不同的指標(biāo)策略:MACD、RSI
  • 將能夠極好優(yōu)化的交易策略與提出的方法相結(jié)合
  • 試著預(yù)測不同的時序特征:赫斯特指數(shù)(Hurst exponent)、自相關(guān)系數(shù)(autocorrelation coefficient),或者其他的統(tǒng)計動差(statistical moment)

這篇文章介紹了如何使用神經(jīng)網(wǎng)絡(luò)實現(xiàn)金融時序預(yù)測,也暫時完結(jié)了該系列教程。坦白講,我們無法使用神經(jīng)網(wǎng)絡(luò)來預(yù)測價格趨勢。我們考慮不同的數(shù)據(jù)源和目標(biāo),認(rèn)真處理過擬合和優(yōu)化超參數(shù)。我們得出的結(jié)論是:

  • 處理過擬合時要小心!99% 的案例都需要處理過擬合,如果準(zhǔn)確率達(dá)到 80% 就不要相信了,肯定是哪里出錯了……
  • 嘗試使用收盤價或收益以外的其他因素,比如波動率、偏度等。
  • 如果你有不同的數(shù)據(jù)源,那就使用多模態(tài)學(xué)習(xí)。
  • 不要忘記找出合適的超參數(shù)!
  • 創(chuàng)建一個由多個經(jīng)典策略組合而成的策略,并將其建立在機器學(xué)習(xí)之上,然后再進(jìn)行回溯測試。

 

原文:

https://medium.com/machine-learning-world/neural-networks-for-algorithmic-trading-enhancing-classic-strategies-a517f43109bf

【本文是51CTO專欄機構(gòu)“機器之心”的原創(chuàng)譯文,微信公眾號“機器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文 

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2021-09-13 11:59:30

Python股票代碼

2010-08-02 14:35:11

Flex Chart

2023-05-26 08:02:22

遷移學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

2022-10-08 15:34:19

量子神經(jīng)網(wǎng)絡(luò)

2021-03-29 09:02:24

深度學(xué)習(xí)預(yù)測間隔

2021-11-12 15:41:42

LSTM神經(jīng)網(wǎng)絡(luò)人工智能

2018-02-25 11:31:06

句法敏感神經(jīng)網(wǎng)絡(luò)關(guān)系抽取

2017-03-07 13:55:30

自動駕駛神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)

2023-04-09 16:12:28

Python赫爾移動平均線技術(shù)指標(biāo)

2018-07-03 16:10:04

神經(jīng)網(wǎng)絡(luò)生物神經(jīng)網(wǎng)絡(luò)人工神經(jīng)網(wǎng)絡(luò)

2021-02-07 09:40:19

Python神經(jīng)網(wǎng)絡(luò)人工智能

2025-02-25 14:13:31

2020-08-06 10:11:13

神經(jīng)網(wǎng)絡(luò)機器學(xué)習(xí)算法

2017-06-19 15:12:30

Uber神經(jīng)網(wǎng)絡(luò)事件預(yù)測

2019-07-24 05:36:32

神經(jīng)網(wǎng)絡(luò)語言模型NNLM

2015-09-18 09:27:36

AWS成本管理金融風(fēng)暴

2021-08-26 10:20:32

Python均線交叉代碼

2017-05-15 22:45:43

神經(jīng)網(wǎng)絡(luò)架構(gòu)信息檢索

2017-09-10 07:07:32

神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)集可視化

2023-06-18 23:00:39

神經(jīng)網(wǎng)絡(luò)損失函數(shù)隨機變量
點贊
收藏

51CTO技術(shù)棧公眾號