80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
import numpy as np
|
|
from sklearn.preprocessing import StandardScaler
|
|
from keras.models import Sequential
|
|
from keras.layers import LSTM, Dense
|
|
from v2realbot.controller.services import get_archived_runner_details_byID
|
|
from v2realbot.common.model import RunArchiveDetail
|
|
import orjson
|
|
|
|
runner_id = "838e918e-9be0-4251-a968-c13c83f3f173"
|
|
result = None
|
|
res, set = get_archived_runner_details_byID(runner_id)
|
|
if res == 0:
|
|
print("ok")
|
|
else:
|
|
print("error",res,set)
|
|
|
|
bars = set["bars"]
|
|
indicators = set["indicators"]
|
|
#print("bars",bars)
|
|
#print("indicators",indicators)
|
|
|
|
def scale_and_transform_data(bars, indicators):
|
|
"""Scales and transforms the `bars` and `indicators` dictionaries to use in an RNN time series prediction model.
|
|
|
|
Args:
|
|
bars: A dictionary containing OHLCV values and a timestamp.
|
|
indicators: A dictionary containing additional indicators and a timestamp.
|
|
|
|
Returns:
|
|
A tuple containing the scaled and transformed training data, validation data, and test data.
|
|
"""
|
|
|
|
# Combine the two dictionaries
|
|
#combined_data = {**bars, **indicators}
|
|
bar_data = np.column_stack((bars["time"], bars['high'], bars['low'], bars['volume'], bars['close'], bars['open']))
|
|
|
|
# Scale the data
|
|
scaler = StandardScaler()
|
|
scaled_data = scaler.fit_transform(bar_data)
|
|
|
|
# Create sequences of data
|
|
sequences = []
|
|
for i in range(len(scaled_data) - 100):
|
|
sequence = scaled_data[i:i + 100]
|
|
sequences.append(sequence)
|
|
|
|
# Split the data into training, validation, and test sets
|
|
train_sequences = sequences[:int(len(sequences) * 0.8)]
|
|
val_sequences = sequences[int(len(sequences) * 0.8):int(len(sequences) * 0.9)]
|
|
test_sequences = sequences[int(len(sequences) * 0.9):]
|
|
|
|
return train_sequences, val_sequences, test_sequences
|
|
|
|
#Scale and transform the data
|
|
train_sequences, val_sequences, test_sequences = scale_and_transform_data(bars, indicators)
|
|
# Convert the training sequences to a NumPy array
|
|
|
|
# Convert the training sequences array to a NumPy array
|
|
train_sequences_array = np.asarray(train_sequences)
|
|
|
|
# Reshape the training sequences to the correct format
|
|
train_sequences_array = np.reshape(train_sequences_array, (train_sequences_array.shape[0], train_sequences_array.shape[1], 1))
|
|
|
|
# Define the RNN model
|
|
model = Sequential()
|
|
model.add(LSTM(128, input_shape=(train_sequences_array.shape[1], train_sequences_array.shape[2])))
|
|
model.add(Dense(1))
|
|
|
|
# Compile the model
|
|
model.compile(loss='mse', optimizer='adam')
|
|
|
|
# Train the model on the sequence data
|
|
model.fit(train_sequences, train_sequences, epochs=100)
|
|
|
|
# Make a prediction for the next data point
|
|
prediction = model.predict(test_sequences[-1:])
|
|
|
|
# Print the prediction
|
|
print(prediction)
|