AI 教你投資:用深度學習預測虛擬貨幣價格

2020-12-06 雷鋒網

Chris Liverani 發表在 Unsplash 雜誌上的照片

2017 年,由於加密貨幣市值連續幾個月呈指數增長,其受歡迎程度飆升。加密貨幣的價格在 2018 年 1 月達到 8000 多億美元的峰值。

儘管機器學習已經成功地通過一系列不同的時間序列模型來預測股市價格,但它在預測加密貨幣價格方面的應用卻非常有限。其背後的原因是顯而易見的,因為加密貨幣的價格取決於許多因素,如技術進步、內部競爭、市場交付壓力、經濟問題、安全問題、政治因素等。如果採取明智的投資策略,它們價格的高波動性將帶來巨大的利潤。不幸的是,由於缺乏指數,與股市等傳統金融預測相比,加密貨幣的預測相對較難。

在這篇文章中,作者將用總共四個步驟來預測加密貨幣的價格:

  • 獲取實時加密貨幣數據

  • 準備訓練和測試數據

  • 用 LSTM 神經網絡預測貨幣價格

  • 可視化預測結果

挑戰

使用數據集中的所有交易特徵(如價格、交易量、未平倉、高值和低值)預測加密貨幣價格。

數據

數據集可以從 CryptoCompare 網站下載。

數據集總共包含 5 個特徵。具體情況如下:

  1. Close Price:指當日貨幣的市場收盤價

  2. High Price:當天貨幣的最高價格

  3. Low Price:是當天貨幣的最低價

  4. Open Price:當日貨幣的市場公開價格

  5. Volume:當天交易的貨幣量

代碼在哪裡?

不費吹灰之力,讓我們從代碼開始。完整的 github 項目可以在這裡找到:https://github.com/abhinavsagar/Cryptocurrency-Price-Prediction 

從加載所需的所有庫和依賴項開始:

import json
import requests
from keras.models import Sequential
from keras.layers import Activation, Dense, Dropout, LSTM
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn.metrics import mean_absolute_error
%matplotlib inline

我使用了加拿大的匯率,並將實時數據存儲到 pandas 數據框中,將字符串日期時間轉換為 Python 日期時間對象。這是必需的,因為文件中的日期時間對象是作為字符串對象讀取的,對字符串而不是日期時間對象執行時間差之類的操作非常容易。

endpoint = 'https://min-api.cryptocompare.com/data/histoday'
res = requests.get(endpoint + '?fsym=BTC&tsym=CAD&limit=500')
hist = pd.DataFrame(json.loads(res.content)['Data'])
hist = hist.set_index('time')
hist.index = pd.to_datetime(hist.index, unit='s')
target_col = 'close'

讓我們看看數據集的所有交易特性,如價格、成交量、開盤、高價、低價,是什麼樣子的。

hist.head(5)

接下來,我將數據分為兩組:訓練集和測試集,它們分別佔據 80% 和 20% 的數據量。這裡只是為了這個項目才這樣做的,在實際項目中,你應該始終將數據分為訓練、驗證、測試三個數據集(佔比可以分別為 60%、20%、20%)。

def train_test_split(df, test_size=0.2):
   split_row = len(df) - int(test_size * len(df))
   train_data = df.iloc[:split_row]
   test_data = df.iloc[split_row:]
  

return train_data, test_datatrain, test = train_test_split(hist, test_size=0.2)

現在,讓我們使用以下代碼繪製加密貨幣(加元)價格隨時間變化的曲線:

def line_plot(line1, line2, label1=None, label2=None, title='', lw=2):
    fig, ax = plt.subplots(1, figsize=(13, 7))
    ax.plot(line1, label=label1, linewidth=lw)
    ax.plot(line2, label=label2, linewidth=lw)
    ax.set_ylabel('price [CAD]', fontsize=14)
    ax.set_title(title, fontsize=16)
    ax.legend(loc='best', fontsize=16)


line_plot(train[target_col], test[target_col], 'training', 'test', title='')


我們可以觀察到,2018 年 12 月至 2019 年 4 月期間,加密貨幣的價格明顯下降;2019 年 4 月至 2019 年 8 月,其價格持續上漲,在 7、8 月份出現波動;從 2019 年 9 月起,價格不斷下降。在這次價格波動中,值得注意的是,加密貨幣在冬季價格較低,在夏季價格上漲。但是,由於數據集太小,這不能得出可以普遍適用的結論。同樣,對於加密貨幣,很難概括任何有價值的結論。

接下來,我寫了幾個函數來規一化這些值。規一化是機器學習中常用的一種數據準備技術。規一化的目標是將數據集中數值列的值更改為公共比例,而不會扭曲值範圍中的差異。

def normalise_zero_base(df):
    return df / df.iloc[0] - 1

def normalise_min_max(df):
    return (df - df.min()) / (data.max() - df.min())

接下來,我寫了一個函數來提取大小為 5 的窗口的數據,如下代碼所示:

def extract_window_data(df, window_len=5, zero_base=True):
    window_data = []
    for idx in range(len(df) - window_len):
        tmp = df[idx: (idx + window_len)].copy()
        if zero_base:
            tmp = normalise_zero_base(tmp)
        window_data.append(tmp.values)
    return np.array(window_data)

我繼續編寫函數,以準備數據的格式,稍後將其輸入神經網絡。我使用了和前面相同的概念,將數據分成兩組:訓練集和測試集,它們分別佔總數據的 80% 和 20% ,代碼如下:

def prepare_data(df, target_col, window_len=10, zero_base=True, test_size=0.2):
    train_data, test_data = train_test_split(df, test_size=test_size)
    X_train = extract_window_data(train_data, window_len, zero_base)
    X_test = extract_window_data(test_data, window_len, zero_base)
    y_train = train_data[target_col][window_len:].values
    y_test = test_data[target_col][window_len:].values
    if zero_base:
        y_train = y_train / train_data[target_col][:-window_len].values - 1
        y_test = y_test / test_data[target_col][:-window_len].values - 1

    return train_data, test_data, X_train, X_test, y_train, y_test

LSTM

LSTM 的工作原理是使用特殊的門允許每個 LSTM 層從前一層和當前層獲取信息。數據通過多個門(如遺忘門、輸入門等)和各種激活函數(如 tanh 函數、relu 函數)並通過 LSTM 單元。它的主要優點是允許每個 LSTM 單元在一定時間內記住這個模式。需要注意的是,LSTM 能夠記住重要的信息,同時忘記不相關的信息。LSTM 體系結構如下所示:

LSTM 體系架構

現在讓我們建立模型。序列模型用於將所有層(輸入、隱藏和輸出)堆疊起來。該神經網絡由一個 LSTM 層、20% 脫落層和一個具有線性激活函數的稠密層組成。我使用 Adam 作為優化器,使用均方誤差作為損失函數來編譯模型。

def build_lstm_model(input_data, output_size, neurons=100, activ_func='linear', dropout=0.2, loss='mse', optimizer='adam'):
    model = Sequential()
    model.add(LSTM(neurons, input_shape=(input_data.shape[1], input_data.shape[2])))
    model.add(Dropout(dropout))
    model.add(Dense(units=output_size))
    model.add(Activation(activ_func))
    model.compile(loss=loss, optimizer=optimizer)
    return model

接下來,我設置一些參數供以後使用。這些參數是:隨機數種子,窗長度,測試集大小,第一層神經元數量,批量大小,損失和優化器等。

np.random.seed(42)
window_len = 5
test_size = 0.2
zero_base = True
lstm_neurons = 100
epochs = 20
batch_size = 32
loss = 'mse'
dropout = 0.2
optimizer = 'adam'

現在讓我們使用輸入 x_train 和標籤 y_train 來訓練模型。

train, test, X_train, X_test, y_train, y_test = prepare_data(
    hist, target_col, window_len=window_len, zero_base=zero_base, test_size=test_size)model = build_lstm_model(
    X_train, output_size=1, neurons=lstm_neurons, dropout=dropout, loss=loss,
    optimizer=optimizer)
history = model.fit(
    X_train, y_train, epochs=epochs, batch_size=batch_size, verbose=1, shuffle=True)

讓我們來看看 20 個 epoch 的模型訓練快照。

神經網絡的訓練

我用平均絕對誤差(MAE)作為評價指標。選擇 MAE 而不是均方根誤差(RMSE)的原因是 MAE 更易於解釋。RMSE 並不單獨描述平均誤差,因此更難理解。因為我們希望即使是對完全不懂技術的讀來說,模型也可以很容易理解,因此 MAE 看起來是一個更好的選擇。

平均絕對誤差

平均絕對誤差測量一組預測中誤差的平均大小,而不考慮它們的方向。它是實際觀測值和預測觀測值之間的絕對差在測試樣本上的平均值,其中所有的個體差異具有相同的權重。

targets = test[target_col][window_len:]
preds = model.predict(X_test).squeeze()
mean_absolute_error(preds, y_test)
# 0.027955859325876943

獲得 MAE 值看起來不錯。最後,讓我們使用以下代碼繪製實際價格和預測價格:

preds = test[target_col].values[:-window_len] * (preds + 1)
preds = pd.Series(index=targets.index, data=preds)
line_plot(targets, preds, 'actual', 'prediction', lw=3)

結論

在本文中,我演示了如何使用 LSTM 神經網絡實時預測加密貨幣價格。我使用了四個步驟:獲取實時貨幣數據、準備數據進行訓練和測試、使用 LSTM 神經網絡預測價格和可視化預測結果。可以隨意使用超參數或嘗試不同的神經網絡結構以獲得更好的結果。

via:https://towardsdatascience.com/cryptocurrency-price-prediction-using-deep-learning-70cfca50dd3a

雷鋒網雷鋒網雷鋒網(公眾號:雷鋒網)

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 手把手:教你如何用深度學習模型預測加密貨幣價格
    實際上,我並沒有持有任何加密貨幣,但說起憑藉深度學習、機器學習以及人工智慧成功預測加密貨幣的價格,我覺得自己還算是個老司機。一開始,我認為把深度學習和加密貨幣結合在一起研究是個非常新穎獨特的想法,但是當我在準備這篇文章時,我發現了一篇類似的文章。那篇文章只談到比特幣。
  • 深度學習預測比特幣價格;基於神經網絡的自動化前端開發 | Github...
    用深度學習預測虛擬貨幣價格 —— ethereum_futureGithub 地址:https://github.com/llSourcell/ethereum_future這是 Youtube 網紅小哥 Siraj Raval 「Ethereum Future Price Prediction」視頻的代碼,視頻 B 站連結:https://www.bilibili.com
  • 虛擬貨幣領域創業投資與趨勢報告
    可見,圍繞著虛擬貨幣這樣一個與傳統金融體系產生激烈碰撞的新事物,虛擬貨幣企業的投、融資雙方都懷有一顆「勇敢的心」。可以確定的是,本報告中收錄的投資案例只是虛擬貨幣領域投資案例中很小的一部分。因為虛擬貨幣有著龐大的生態系統,除上述企業外,虛擬貨幣產業鏈的各環節必定有更多的企業已經獲得投資或即將獲得投資。
  • 儀徵市「投資顧問」設騙局,股民炒「虛擬貨幣」虧大本!
    對此,揚州發布聯合儀化警方,就近期轄區發生的網絡平臺投資詐騙案做深度剖析。 老股民也栽了! 輕信「投資顧問」,被騙18萬 原來,他在一款APP上投資了18萬元人民幣的「虛擬貨幣」不翼而飛,APP帳戶也被凍結。 老沈炒了很多年股票,2020年4月份,老沈的一位股友在微信上向老沈推薦了一個微信號,告訴老沈這個操作團本事可不小,每天都有專業的投資理財顧問以網課的形式推薦有潛力能賺錢的A股。
  • 金牌天使投資人告訴你,為什麼不要急著投資虛擬貨幣和區塊鏈 |...
    虛擬貨幣的複雜情結在熱烈地關注比特幣這類項目的早期發展之後,我對虛擬貨幣有一種複雜的情結。6年前,我寫了一篇文章叫《我們所見過的最危險的項目》,向投資圈裡的人們介紹了比特幣。儘管我不進行數字貨幣的交易,我通過投資Robinhood, Abra和Talla.com這些明星創業公司與虛擬貨幣有了許多接觸。
  • 「專家」竟是「磚家」,投資虛擬貨幣被騙150多萬
    虛擬貨幣由於受到國際投資者的追捧,投資回報率一直較高,但風險也較大。騙子也「趕潮流」,打著投資外匯的幌子,開「直播」手把手教「投資」虛擬貨幣。投資者未曾想到「專家」竟是「磚家」,被誘導投資所謂的「投資平臺」,實際是騙子自導自演的「空手套白狼」遊戲,結果投資者血本無歸。
  • 牡丹江男子遭虛擬貨幣「釣魚」損失近57萬,OKEx教你識別套路
    牡丹江男子遭虛擬貨幣「釣魚」損失近57萬,OKEx教你識別套路 據央廣網報導,近日,黑龍江省牡丹江市公安局反詐中心與海林市公安局經過兩個多月縝密偵查,成功偵破涉案金額100餘萬元的特大虛擬貨幣電信詐騙案
  • 魔鏡魔鏡告訴我,數字貨幣未來價格可以預測嗎?
    每天都有新的數字貨幣的信息, 它們有的被證實是騙局,有些則會在幾個月成為新的頂級貨幣。炒幣人士通常會為了一個傳言而買入賣出,自然,也會有人嘗試用機器學習來對數字貨幣的價格變化進行分析,來找出影響數字貨幣價格變動的因素。
  • 世界十大虛擬貨幣排名
    相信大家已經從各種新聞裡、朋友圈裡看到過很多關於虛擬貨幣的消息了,而其中最具有代表性的當數比特幣。哪怕沒有參與虛擬貨幣的人都聽說過它,總能到處看到有關比特幣的熱切討論,但是很多人卻並不知道後續的其他幣種。
  • FBEC2020|何亦凡:虛擬貨幣促使各國央行研究法定數字貨幣
    剛才提到虛擬貨幣是基於一種共識,因為貨幣是法律名詞,目前沒有一個國家把他作為貨幣屬性的東西,虛擬貨幣是投資屬性的東西,無論是買以太坊還是比特幣基本上都是為了投資,不是為了買東西,所以虛擬貨幣是投資屬性的東西。第二,我們認為虛擬貨幣是目前基於廣播式傳輸形成分布式的共識帳本最簡單的應用。目前虛擬貨幣所有的價值沒有跟線下資產關聯,那麼虛擬貨幣的價值是怎麼來的?是共識來的。
  • REC虛擬貨幣 | 複利的威力你真的了解嗎?
    即使你現在每天早晨可以喝一杯星巴克,穿著精緻出入高檔寫字樓,但距離真正的財富自由,可能還有相當遠的一段距離。現實是,只靠工作是無法達到你的財富夢想的,因為只靠工作賺到的收入,是無法比得上複利積累財富的速度的。在投資中,複利的威力往往讓人難以置信,又常常被忽略,實在令人可惜。
  • ARXIV:深度學習在金融領域中的應用 | 唧唧堂論文解析
    在不同的應用領域中,哪些深度學習模型更適用?5. 相較傳統如軟計算和機器學習方法,深度學習有哪些優勢?6.應用2.1 算法交易Algorithmic Trading大多數 Algo 交易應用程式都結合價格預測模型。因此,根據大多數根據預測結果觸發買入-賣出指令的價格或趨勢預測模型也被視為算法交易系統。然而,也有一些研究提出獨立的Al去交易模型,通過優化交易參數,如買賣價差,分析限價單,頭寸大小等。
  • 盤點金融領域裡常用的深度學習模型
    作者 | Sonam Srivastava ,譯者 | sambodhi ,編輯 | Vincent ,AI前線出品| ID:ai-front在今天我們發布的這篇文章中,作者 Sonam Srivastava 介紹了金融中的三種深度學習用例及這些模型優劣的證據。
  • 用谷歌圖片搜索自製深度學習數據集 | 教程
    用谷歌圖片搜索自製深度學習數據集 | 教程 銅靈 編譯整理 就怕前腳剛立志搞個新研究,後腳就發現沒有合適的數據集可用。AI工程師從入門到放棄,可能就是這麼一會的功夫。 別找了,現在深度學習數據集也能自制了。
  • 教程| 概率編程:使用貝葉斯神經網絡預測金融市場價格
    選自Medium作者:Alex Honchar機器之心編譯參與:陳韻竹、李澤南隨著人工智慧技術的普及,用機器學習預測市場價格波動的方法最近層出不窮。本文中,Alex Honchar 介紹了利用概率編程和 Pyro 進行價格預測的方法,相較於常規神經網絡,新方法對於數據的依賴程度更小,結果更準確。在實驗中,作者選擇了最近流行的虛擬貨幣「以太幣」作為實例進行價格預測。去年我曾發表過幾篇有關使用神經網絡進行金融價格預測的教程,我認為其中有一部分結果至少還挺有意思,並且值得在實際交易中加以應用。
  • 您知道什麼是虛擬貨幣嗎?
    相信不少人聽說過虛擬貨幣,但是對它還不是很了解,虛擬貨幣就是指非真實的貨幣,知名的虛擬貨幣如百度公司的百度幣、騰訊公司的Q幣,Q點、盛大公司的點券,新浪推出的微幣等。目前全世界發行有上百種數字貨幣。虛擬貨幣的常見的種類有三種:遊戲幣,門戶網站或者即時通訊工具服務商發行的專用貨幣和網際網路上的虛擬貨幣。這些貨幣漸漸成為主流的交易方式,其中以網際網路虛擬貨幣最受矚目。比特幣(BTC)、萊特貨幣(LTC)等都是大家熟悉的虛擬貨幣。
  • 騰訊虛擬競猜平臺游離灰色地帶 虛擬貨幣建網絡「賭城」?
    原標題:騰訊虛擬競猜平臺游離灰色地帶 虛擬貨幣建網絡「賭城」?    遊戲兌獎界面  虛擬貨幣建立網絡「賭城」?  值得注意的是的,不論是微信中的「金豆遊戲」還是電子比賽中的虛擬投資,使用的都是虛擬貨幣。
  • 美國醞釀虛擬貨幣監管路線圖
    當地時間2月6日上午10點,美國參議院銀行、住房及城市事務委員會將舉行一場有關虛擬貨幣的聽證會。美國媒體認為,這場名為「虛擬貨幣:美國證監會(SEC)和商品期貨交易委員會(CFTC)的監督作用」的聽證會,將成為虛擬貨幣面臨的一個關鍵時刻。  美監管機構聚焦虛擬貨幣  據報導,此次聽證會上,美國證監會主席傑·克萊頓、美國商品期貨交易委員會主席克里斯多福·詹卡洛均將出席。CNBC認為,此次會議或將為美國的機構投資者提供更清晰的監管路線圖。
  • 當AI遇到生物-深度學習在生物研究中的應用案例列表
    由於這個領域的進步很快,深度學習助力基因科技這篇一年前寫的文章,現在看來已有些過時。本篇文章列出了部分現有的應用深度學習技術處理醫學和生物學問題的工具,從這個列表中,可以看出當前深度學習在該領域的挑戰和局限,也可以全面的了解深度學習在計算生物學,醫學影像及生物信息等學科所具有的廣泛應用場景。深度學習+生物的論文發表數量
  • 虛擬貨幣市場坍塌,韓國含著「土勺子」出生的年輕人仍緊拽不放
    虛擬貨幣:熱到成了文化現象韓國是以比特幣為首的各種虛擬貨幣主要交易中心,是繼美國、日本之後的第三大虛擬貨幣市場。根據虛擬貨幣研究公司Messar的數據,韓國今年1月就有價值68億美元的虛擬貨幣交易。開始投資虛擬貨幣的時候,她也賺了很多錢。那時,Kim Han-gyeol花了數千美元為自己和母親添置了很多漂亮衣服,還夢想著賺夠錢開一家咖啡店。後來,幾乎全部虧損。「比特幣投資虧錢的時候,我覺得很丟臉。因為我不止一次貪婪,想一筆賺下大錢。」然而,已經虧成這樣的她表示,自己還會繼續投資下去。