国产乱人伦在线播放,99无码精品二区在线视频,最近在线更新8中文字幕免费,精品成人一区二区三区四区

您的位置:首頁(yè) > 區(qū)塊鏈 >

Keras和Tensorflow可作為主要clarvoyance工具 可估計(jì)加密貨幣價(jià)格

2019-11-22 11:27:57 來(lái)源: 區(qū)塊網(wǎng)

介 紹在本教程中,我們將介紹神經(jīng)網(wǎng)絡(luò)的原型,該模型將使我們能夠使用Keras和Tensorflow作為我們的主要clarvoyance工具來(lái)估計(jì)未來(lái)的加密貨幣

介 紹

在本教程中,我們將介紹神經(jīng)網(wǎng)絡(luò)的原型,該模型將使我們能夠使用Keras和Tensorflow作為我們的主要clarvoyance工具來(lái)估計(jì)未來(lái)的加密貨幣價(jià)格(作為二進(jìn)制分類問(wèn)題)。

然這很可能不是解決問(wèn)題的最佳方法(畢竟投資銀行在開發(fā)這種算法上投入了數(shù)十億美元),但如果我們能夠在55%以上的時(shí)間里把問(wèn)題解決好,我們就有錢了!

我們要做什么

1. 使用Binance API下載數(shù)據(jù)

2. 預(yù)處理數(shù)據(jù)

3. 訓(xùn)練我們的模型

4. 特征工程

5. 評(píng)估性能最佳的模型

使用Binance API下載數(shù)據(jù)

對(duì)于此示例,我們將下載單個(gè)調(diào)用中可獲取的最大數(shù)據(jù)量。如果您想訓(xùn)練更多更好的東西并在現(xiàn)實(shí)世界中使用它(不建議這樣做,那么您可能會(huì)浪費(fèi)真錢),我建議您使用多次調(diào)用收集更多數(shù)據(jù)。

import requests

import json

import pandas as pd

import datetime as dt

START_DATE = '2019-01-01'

END_DATE = '2019-10-01'

INTERVAL = '15m'

def parse_date(x):

return str(int(dt.datetime.fromisoformat(x).timestamp()))

def get_bars(symbol, interval):

root_url = 'https://api.binance.com/api/v1/klines'

url = root_url + '?symbol=' + symbol + '&interval=' + interval + '&startTime=' + parse_date(START_DATE) + '&limit=1000'

data = json.loads(requests.get(url).text)

df = pd.DataFrame(data)

df.columns = ['open_time',

'o', 'h', 'l', 'c', 'v',

'close_time', 'qav', 'num_trades',

'taker_base_vol', 'taker_quote_vol', 'ignore']

df.drop(['ignore', 'close_time'], axis=1, inplace=True)

return df

ethusdt = get_bars('ETHUSDT', INTERVAL)

ethusdt.to_csv('./data.csv', index=False)

在這段簡(jiǎn)單的代碼中,我們需要必要的程序包,設(shè)置幾個(gè)參數(shù)(我選擇了15分鐘的時(shí)間間隔,但是您可以選擇更精細(xì)的時(shí)間間隔以進(jìn)行更高頻率的交易)并設(shè)置一些方便的函數(shù),然后將數(shù)據(jù)保存到csv以供將來(lái)重用。這應(yīng)該是不言而喻的,但如果有什么事情讓你困惑,請(qǐng)隨時(shí)留下評(píng)論,要求澄清:)

數(shù)據(jù)預(yù)處理

由于價(jià)格是順序數(shù)據(jù)的一種形式,因此我們將使用LSTM層(長(zhǎng)期短期記憶)作為我們網(wǎng)絡(luò)中的第一層。我們希望將數(shù)據(jù)提供為一系列事件,這些事件將預(yù)測(cè)時(shí)間t + n處的價(jià)格,其中t是當(dāng)前時(shí)間,n定義我們要預(yù)測(cè)的未來(lái)時(shí)間,為此,我們將數(shù)據(jù)作為 w長(zhǎng)度的時(shí)間窗口。查看代碼后,一切將變得更加清晰,讓我們開始導(dǎo)入所需的軟件包。

import pandas as pd

import numpy as np

import seaborn as sns

import random

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Dense, LSTM, Dropout

from tensorflow.keras.callbacks import TensorBoard

import time

import matplotlib.pyplot as plt

這將導(dǎo)入Pandas,Numpy,我們訓(xùn)練模型所需的所有Tensorflow函數(shù)以及其他一些有用的軟件包。

接下來(lái),我們要定義一些常量,并從csv加載我們的數(shù)據(jù)(以防您在其他文件上編寫訓(xùn)練代碼:

WINDOW = 10 # how many time units we are going to use to evaluate

the future value, in our case each time unit is 15 minutes so we

are going to look at 15 * 10 = 150 minutes trading data

LOOKAHEAD = 5 # how far ahead we want to estimate if the future

prices is going to be higher or lower? In this case is 5 * 15 = 75

minutes in the future

VALIDATION_SAMPLES = 100 # We want to validate our model on data

that wasn't used for the training, we are establishing how many

data point we are going to use here.

data = pd.read_csv('./data.csv')

data['future_value'] = data['c'].shift(-LOOKAHEAD) # This allows us to

define a new column future_value with as the value of c 5 time units

in the future

data.drop([

'open_time'

], axis=1, inplace=True) # we don't care about the timestamp for

predicting future prices

讓我們定義一個(gè)函數(shù),該函數(shù)使我們可以定義將來(lái)的價(jià)格是高于還是低于當(dāng)前收盤價(jià):

def define_output(last, future):

if future > last:

return 1

else:

return 0

如果價(jià)格低于或等于當(dāng)前收盤價(jià),只需將目標(biāo)設(shè)置為0,如果價(jià)格高于或高于當(dāng)前收盤價(jià),則將其設(shè)置為1。 現(xiàn)在讓我們定義一個(gè)函數(shù),該函數(shù)使我們能夠創(chuàng)建需要輸入神經(jīng)網(wǎng)絡(luò)的移動(dòng)時(shí)間窗口:

def sequelize(x):

data = x.copy()

buys = []

sells = []

holds = []

data_length = len(data)

for index, row in data.iterrows():

if index <= data_length - WINDOW:

last_index = index + WINDOW -1

rowset = data[index : index + WINDOW]

row_stats = rowset.describe().transpose()

last_close = rowset['c'][last_index]

future_close = rowset['future_value'][last_index]

rowset = 2 * (rowset - row_stats['min']) / (row_stats['max'] - row_stats['min']) - 1

rowset.drop(['future_value'], axis=1, inplace=True)

rowset.fillna(0, inplace=True)

category = define_output(last_close, future_close)

if category == 1:

buys.append([rowset, category])

elif category == 0:

sells.append([rowset, category])

min_len = min(len(sells), len(buys))

results = sells[:min_len] + buys[:min_len]

return results

sequences = sequelize(data)

哦,好吧,這里有很多東西。讓我們一點(diǎn)一點(diǎn)地看:

data = x.copy() # let's copy the dataframe, just in case

buys = []

sells = []

holds = []

data_length = len(data)

在這里,我們正在做一些初步的工作,復(fù)制數(shù)據(jù)框以確保我們不覆蓋它(例如如果您使用Jupyter Notebook可能會(huì)很煩人),并設(shè)置用于買賣的數(shù)組,我們將使用它們來(lái)平衡數(shù)據(jù)。

for index, row in data.iterrows():

if index <= data_length - WINDOW:

last_index = index + WINDOW -1

rowset = data[index : index + WINDOW]

當(dāng)我們迭代數(shù)據(jù)集中的每一行時(shí),如果索引大于我們定義的窗口大小,我們可以創(chuàng)建一個(gè)新的數(shù)據(jù)塊,即窗口大小。在將此數(shù)據(jù)存儲(chǔ)到另一個(gè)數(shù)組中之前,我們需要使用以下代碼對(duì)其進(jìn)行規(guī)范化:

row_stats = rowset.describe().transpose()

last_close = rowset['c'][last_index]

future_close = rowset['future_value'][last_index] # we'll need to save this separately from the rest of the data

rowset = 2 * (rowset - row_stats['min']) / (row_stats['max'] - row_stats['min']) - 1

而且我們還想從數(shù)據(jù)集中刪除future_value,并用0替換任何可能的NaN(對(duì)于我們的目的而言,理想情況還不夠好):

rowset.drop(['future_value'], axis=1, inplace=True)

rowset.fillna(0, inplace=True)

最后我們要確保我們的買賣平衡,如果其中一種發(fā)生的頻率比另一種發(fā)生的頻率高,我們的網(wǎng)絡(luò)將迅速偏向偏斜,并且無(wú)法為我們提供可靠的估計(jì):

if category == 1:

buys.append([rowset, category])

elif category == 0:

sells.append([rowset, category])

# the following 2 lines will ensure that we have an equal amount of buys and sells

min_len = min(len(sells), len(buys))

results = sells[:min_len] + buys[:min_len]

return results

最后我們?cè)跀?shù)據(jù)序列上運(yùn)行此函數(shù)= sequelize(data)

隨機(jī)化我們的數(shù)據(jù)也是個(gè)好主意,這樣我們的模型就不會(huì)受到數(shù)據(jù)集排序的精確順序的影響,以下代碼將對(duì)數(shù)據(jù)集進(jìn)行隨機(jī)化,將訓(xùn)練數(shù)據(jù)集與測(cè)試數(shù)據(jù)集進(jìn)行拆分,并同時(shí)顯示這兩種數(shù)據(jù)中的買入與賣出分布數(shù)據(jù)集。隨時(shí)重新運(yùn)行此代碼段,以確保更均衡地分配購(gòu)買和出售:

random.shuffle(sequences)

def split_label_and_data(x):

length = len(x)

data_shape = x[0][0].shape

data = np.zeros(shape=(len(x),data_shape[0],data_shape[1]))

labels = np.zeros(shape=(length,))

for index in range(len(x)):

labels[index] = x[index][1]

data[index] = x[index][0]

return data, labels

x_train, y_train = split_label_and_data(sequences[: -VALIDATION_SAMPLES])

x_test, y_test = split_label_and_data(sequences[-VALIDATION_SAMPLES :])

sns.distplot(y_test)

sns.distplot(y_train)

len(y_train)

在運(yùn)行了一段代碼后,您應(yīng)該得到類似的東西,兩個(gè)數(shù)據(jù)集之間的買賣均分(左對(duì)右)。

訓(xùn)練模型

現(xiàn)在我們已經(jīng)準(zhǔn)備好訓(xùn)練模型,但是由于我們還沒(méi)有探索哪種超參數(shù)最適合我們的模型和數(shù)據(jù),因此我們將嘗試一種稍微復(fù)雜一些的方法。 首先讓我們定義四個(gè)超參數(shù)數(shù)組:

DROPOUTS = [

0.1,

0.2,

]

HIDDENS = [

32,

64,

128

]

OPTIMIZERS = [

'rmsprop',

'adam'

]

LOSSES = [

'mse',

'binary_crossentropy'

]

然后,我們將遍歷每個(gè)數(shù)組以使用超參數(shù)組合來(lái)訓(xùn)練模型,以便以后可以使用TensorBoard比較它們:

for DROPOUT in DROPOUTS:

for HIDDEN in HIDDENS:

for OPTIMIZER in OPTIMIZERS:

for LOSS in LOSSES:

train_model(DROPOUT, HIDDEN, OPTIMIZER, LOSS)

現(xiàn)在我們需要定義train_model函數(shù),該函數(shù)將實(shí)際創(chuàng)建和訓(xùn)練模型:

def train_model(DROPOUT, HIDDEN, OPTIMIZER, LOSS):

NAME = f"{HIDDEN} - Dropout {DROPOUT} - Optimizer {OPTIMIZER} - Loss {LOSS} - {int(time.time())}"

tensorboard = TensorBoard(log_dir=f"logs/{NAME}", histogram_freq=1)

model = Sequential([

LSTM(HIDDEN, activation='relu', input_shape=x_train[0].shape),

Dropout(DROPOUT),

Dense(HIDDEN, activation='relu'),

Dropout(DROPOUT),

Dense(1, activation='sigmoid')

])

model.compile(

optimizer=OPTIMIZER,

loss=LOSS,

metrics=['accuracy']

)

model.fit(

x_train,

y_train,

epochs=60,

batch_size=64,

verbose=1,

validation_data=(x_test, y_test),

callbacks=[

tensorboard

]

)

目前,這是一個(gè)非常簡(jiǎn)單的模型,其中的LSTM層為第一層,一個(gè)Dense中間層,一個(gè)Dense輸出層,其大小為1,且為S型激活。該層將輸出概率(從0到1),在LOOKAHEAD間隔之后,特定大小的WINDOW序列將跟隨較高的收盤價(jià),其中0是較低的收盤價(jià)的高概率,1是較高的更高的收盤價(jià)。

我們還添加了一個(gè)Tensorboard回調(diào),這將使我們能夠看到每種模型在每個(gè)訓(xùn)練周期(EPOCH)的表現(xiàn)。

隨意運(yùn)行此代碼,然后在終端tensorboard --logdir = logs中運(yùn)行Tensorboard

特征工程

最好的模型在驗(yàn)證數(shù)據(jù)上的準(zhǔn)確性應(yīng)該高于60%,這已經(jīng)相當(dāng)不錯(cuò)了。但是我們可以通過(guò)從現(xiàn)有數(shù)據(jù)集中提取更多數(shù)據(jù)來(lái)快速改進(jìn)模型。從現(xiàn)有要素中提取新要素的過(guò)程稱為要素工程。特征工程的示例是從數(shù)據(jù)中提取周末布爾值列,或從坐標(biāo)對(duì)中提取國(guó)家/地區(qū)。在我們的案例中,我們將技術(shù)分析數(shù)據(jù)添加到我們的OHLC數(shù)據(jù)集中。

在筆記本或文件的頂部,添加ta包:from ta import *。

從csv加載數(shù)據(jù)后,添加以下行,它將以新列的形式將TA數(shù)據(jù)追加到我們現(xiàn)有的數(shù)據(jù)集中

data = pd.read_csv('./data.csv')

#add the following line

add_all_ta_features(data, "o", "h", "l", "c", "v", fillna=True)

data['future_value'] = data['c'].shift(-LOOKAHEAD)

就是這樣,在幾行中我們極大地豐富了我們的數(shù)據(jù)集。 現(xiàn)在我們可以運(yùn)行模型生成器循環(huán)來(lái)弄清楚我們的模型如何使用新的數(shù)據(jù)集,這將花費(fèi)更長(zhǎng)的時(shí)間,但值得等待。

有意義的數(shù)據(jù)集應(yīng)確保模型更準(zhǔn)確,在上圖中,我們可以清楚地看到豐富數(shù)據(jù)集的性能比簡(jiǎn)單數(shù)據(jù)集更好,驗(yàn)證準(zhǔn)確性徘徊在80%左右!

評(píng)估性能最佳的模型

現(xiàn)在我們有了一些看起來(lái)在紙面上表現(xiàn)不錯(cuò)的模型,我們?nèi)绾卧u(píng)估假設(shè)的交易系統(tǒng)中應(yīng)該使用哪個(gè)模型?

這可能是非常主觀的,但我認(rèn)為一種好的方法是從已知的驗(yàn)證標(biāo)簽分別查看買賣,并繪制相應(yīng)預(yù)測(cè)的分布。希望于所有購(gòu)買,我們的模型都可以預(yù)測(cè)購(gòu)買,而不是很多出售,反之亦然。

讓我們定義一個(gè)顯示每個(gè)模型的圖表的函數(shù):

def display_results(NAME, y_test, predictions):

plt.figure()

buys = []

sells = []

for index in range(len(y_test)):

if y_test[index] == 0:

sells.append(predictions[index])

elif y_test[index] == 1:

buys.append(predictions[index])

sns.distplot(buys, bins=10, color='green').set_title(NAME)

sns.distplot(sells, bins=10, color='red')

plt.show()

現(xiàn)在讓我們?cè)诿看瓮瓿赡P陀?xùn)練時(shí)都調(diào)用此函數(shù):

model.fit(

x_train,

y_train,

epochs=60,

batch_size=64,

verbose=0,

validation_data=(x_test, y_test),

callbacks=[

tensorboard

]

)

# after the model.fit call, add the following 2 lines.

predictions = model.predict(x_test)

display_results(NAME, y_test, predictions)

隨著不同模型的訓(xùn)練,我們現(xiàn)在應(yīng)該看到類似于下圖的圖像,其中買入以綠色繪制(并且我們希望它們?cè)谟叶?,聚集?值附近),賣出以紅色繪制(聚集在 左側(cè)為0個(gè)值)。這些應(yīng)有助于我們確定哪種模型可以提供更可靠的未來(lái)價(jià)格估算。(鏈三豐)

就是這樣,我們現(xiàn)在有一些原型可以使用,它們可以對(duì)未來(lái)的價(jià)格提供合理的估計(jì)。作為練習(xí),請(qǐng)嘗試以下操作:

1. 如果增加網(wǎng)絡(luò)的隱藏層數(shù)會(huì)怎樣?

2. 如果您的數(shù)據(jù)集不平衡會(huì)怎樣?

3. 如果增加DROPOUT值會(huì)怎樣?

4. 如果您在新數(shù)據(jù)上測(cè)試最佳模型會(huì)怎樣?(例如通過(guò)從幣安獲取不同的時(shí)間戳記?)

關(guān)鍵詞: Keras Tensorflow 加密貨幣價(jià)格

精選 導(dǎo)讀

募資55億港元萬(wàn)物云啟動(dòng)招股 預(yù)計(jì)9月29日登陸港交所主板

萬(wàn)科9月19日早間公告,萬(wàn)物云當(dāng)日啟動(dòng)招股,預(yù)計(jì)發(fā)行價(jià)介乎每股47 1港元至52 7港元,預(yù)計(jì)9月29日登陸港交所主板。按發(fā)行1 167億股計(jì)算,萬(wàn)

發(fā)布時(shí)間: 2022-09-20 10:39
管理   2022-09-20

公募基金二季度持股情況曝光 隱形重倉(cāng)股多為高端制造業(yè)

隨著半年報(bào)披露收官,公募基金二季度持股情況曝光。截至今年二季度末,公募基金全市場(chǎng)基金總數(shù)為9794只,資產(chǎn)凈值為269454 75億元,同比上

發(fā)布時(shí)間: 2022-09-02 10:45
資訊   2022-09-02

又有上市公司宣布變賣房產(chǎn) 上市公司粉飾財(cái)報(bào)動(dòng)作不斷

再有上市公司宣布變賣房產(chǎn)。四川長(zhǎng)虹25日稱,擬以1 66億元的轉(zhuǎn)讓底價(jià)掛牌出售31套房產(chǎn)。今年以來(lái),A股公司出售房產(chǎn)不斷。根據(jù)記者不完全統(tǒng)

發(fā)布時(shí)間: 2022-08-26 09:44
資訊   2022-08-26

16天12連板大港股份回復(fù)深交所關(guān)注函 股份繼續(xù)沖高

回復(fù)交易所關(guān)注函后,大港股份繼續(xù)沖高。8月11日大港股份高開,隨后震蕩走高,接近收盤時(shí)觸及漲停,報(bào)20 2元 股。值得一提的是,在7月21日

發(fā)布時(shí)間: 2022-08-12 09:56
資訊   2022-08-12

萬(wàn)家基金再添第二大股東 中泰證券擬受讓11%基金股權(quán)

7月13日,中泰證券發(fā)布公告,擬受讓齊河眾鑫投資有限公司(以下簡(jiǎn)稱齊河眾鑫)所持有的萬(wàn)家基金11%的股權(quán),交易雙方共同確定本次交易的標(biāo)的資

發(fā)布時(shí)間: 2022-07-14 09:39
管理   2022-07-14

央行連續(xù)7日每天30億元逆回購(gòu) 對(duì)債市影響如何?

央行12日再次開展了30億元逆回購(gòu)操作,中標(biāo)利率2 10%。這已是央行連續(xù)7日每天僅進(jìn)行30億元的逆回購(gòu)縮量投放,創(chuàng)下去年1月以來(lái)的最低操作規(guī)

發(fā)布時(shí)間: 2022-07-13 09:38
資訊   2022-07-13

美元指數(shù)創(chuàng)近20年新高 黃金期貨創(chuàng)出逾9個(gè)月新低

由于對(duì)美聯(lián)儲(chǔ)激進(jìn)加息的擔(dān)憂,美元指數(shù)11日大漲近1%創(chuàng)出近20年新高。受此影響,歐美股市、大宗商品均走弱,而黃金期貨創(chuàng)出逾9個(gè)月新低。美

發(fā)布時(shí)間: 2022-07-13 09:36
資訊   2022-07-13

美股三大股指全線下跌 納斯達(dá)克跌幅創(chuàng)下記錄以來(lái)最大跌幅

今年上半年,美股持續(xù)回落。數(shù)據(jù)顯示,道瓊斯指數(shù)上半年下跌15 3%,納斯達(dá)克綜合指數(shù)下跌29 5%,標(biāo)普500指數(shù)下跌20 6%。其中,納斯達(dá)克連續(xù)

發(fā)布時(shí)間: 2022-07-04 09:51
推薦   2022-07-04

融資客熱情回升 兩市融資余額月內(nèi)增加超344億元

近期A股走強(qiáng),滬指6月以來(lái)上漲4%,融資客熱情明顯回升。數(shù)據(jù)顯示,截至6月16日,兩市融資余額1 479萬(wàn)億元,月內(nèi)增加344 67億元,最近一個(gè)半

發(fā)布時(shí)間: 2022-06-20 09:41
資訊   2022-06-20

4個(gè)交易日凈買入超百億元 北向資金持續(xù)流入A股市場(chǎng)

北向資金凈流入態(tài)勢(shì)延續(xù)。繼6月15日凈買入133 59億元后,北向資金6月16日凈買入44 52億元。自5月27日至今,除6月13日以外,北向資金累計(jì)凈

發(fā)布時(shí)間: 2022-06-17 09:37
推薦   2022-06-17

熱門TAG

more
美聯(lián)儲(chǔ)今年已將基準(zhǔn)利率從接近零大幅上調(diào)至略高于3% EIA報(bào)告:美國(guó)原油庫(kù)存及戰(zhàn)略儲(chǔ)備減少,汽油及精煉油庫(kù)存輕微波動(dòng) 美國(guó)政府更廣泛推動(dòng)從汽油動(dòng)力汽車轉(zhuǎn)向電動(dòng)汽車的一部分 數(shù)據(jù)顯示:今年9月日本船企接單量延續(xù)8月下跌下跌趨勢(shì) 公告顯示:2022年前三季度TCL中環(huán)研發(fā)投入為27億元 占比營(yíng)業(yè)收入5.42% 新的111.75億英鎊注資列在“對(duì)金融機(jī)構(gòu)的援助—支付給英格蘭銀行”標(biāo)題下 本次政府儲(chǔ)備肉投放面向北京18家主要連鎖超市門店及相關(guān)零售終端投放 有交易員預(yù)計(jì):如果LME不采取措施 接下來(lái)可能將有數(shù)十萬(wàn)噸鋁流入LME 據(jù)報(bào)道:繼德國(guó)最大釀酒商拉德貝格啤酒公司9月宣布漲價(jià) 據(jù)報(bào)道:澳大利亞礦商Pilbara的鋰礦拍賣價(jià)再創(chuàng)新高 折算后的碳酸鋰成本 中集天達(dá)首次公開發(fā)行A股股票 招股書顯示此次擬公開發(fā)行股數(shù)不超過(guò)103, 多家銀行加強(qiáng)綠色金融頂層設(shè)計(jì) 致力于為經(jīng)濟(jì)社會(huì)綠色低碳轉(zhuǎn)型貢獻(xiàn)力量 萊特幣 比特幣 數(shù)字資產(chǎn) 火幣 以太經(jīng)典 比特股 EOS 比特幣現(xiàn)金 量子鏈 Hcash 泰達(dá)幣 瑞波幣 Qcash 比特幣鉆石 超級(jí)比特幣 優(yōu)幣 硬分叉 加密貨幣