Code: Alles auswählen
import numpy as np
import tensorflow as tf
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
from sklearn.preprocessing import MinMaxScaler
import matplotlib.pyplot as plt
import sys
import random
import datetime
import matplotlib
data = []
with open("BTCUSDT_0.csv") as fp:
lines = fp.readlines()
for c, line in enumerate(lines):
x = line.split(";")
data.append((float(x[1]) + float(x[2])) / 2.0)
len0 = len(data)
for i in range(len0, len0 + 50):
data.append(data[len0 - 1])
data2 = []
for i in range(10):
temp = []
for j in range(i * 50, i * 50 + 100):
temp.append(data[j])
data2.append(temp)
sc_x = MinMaxScaler()
sc_y = MinMaxScaler()
train_data_x = sc_x.fit_transform(data2).reshape(-1, 1, 1)
train_data_y = []
for i in range(10):
for j in range(i * 50, i * 50 + 100):
train_data_y.append(j)
train_data_y = sc_y.fit_transform(np.reshape(train_data_y, (-1, 1)))
print(train_data_x.shape, train_data_y.shape)
units_c = 100
regressor = Sequential()
regressor.add(
LSTM(units=units_c, return_sequences=True, input_shape=(train_data_x.shape[1], 1))
)
regressor.add(Dropout(0.2))
regressor.add(LSTM(units=units_c, return_sequences=True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units=units_c, return_sequences=True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units=units_c))
regressor.add(Dropout(0.2))
regressor.add(Dense(units=1))
regressor.compile(optimizer="adam", loss="mean_squared_error")
regressor.fit(train_data_x, train_data_y, epochs=200, batch_size=16)
pre = regressor.predict(train_data_x)
pre = sc_x.inverse_transform(pre.reshape(-1, 100))
xs1 = []
for i in range(550):
xs1.append(data[i])
xs2 = []
for i in range(10):
for j in range(50):
xs2.append(pre[i][j])
for i in range(50, 100):
xs2.append(pre[-1][i])
nowy = datetime.datetime.now()
ys = []
for i in range(550):
ys.append(nowy + datetime.timedelta(0, 300 * (i - 500)))
dates = matplotlib.dates.date2num(ys)
print(len(xs1), len(xs2), len(ys))
plt.plot_date(dates, xs1, label="data", linestyle="solid")
plt.plot_date(dates, xs2, label="data2", linestyle="solid")
plt.legend()
plt.show()