Skip to content

Instantly share code, notes, and snippets.

@Lay4U
Last active August 19, 2019 06:39
Show Gist options
  • Save Lay4U/c8fd5d41869a5e464e3f0bbf9d414ef3 to your computer and use it in GitHub Desktop.
Save Lay4U/c8fd5d41869a5e464e3f0bbf9d414ef3 to your computer and use it in GitHub Desktop.
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout, Conv2D, Reshape, TimeDistributed, Flatten, Conv1D,ConvLSTM2D, MaxPooling1D
from keras.layers.core import Dense, Activation, Dropout
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.metrics import mean_squared_error
import tensorflow as tf
import matplotlib.pyplot as plt
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)
def create_dataset(signal_data, look_back=1):
dataX, dataY = [], []
for i in range(len(signal_data) - look_back):
dataX.append(signal_data[i:(i + look_back), :])
dataY.append(signal_data[i + look_back, -1])
return np.array(dataX), np.array(dataY)
look_back = 20
df = pd.read_csv('kospi.csv') # data can download as https://docs.google.com/spreadsheets/d/13qyMDbl9EsBPE6asoXkH_73Y4QVGzaiUXyir94nN3VE/edit#gid=535424417
total_data = df[["open", "low", "high", "volume", "close"]].values.astype('float32')
signal_data = df[["open", "low", "high", "volume", "close"]].values.astype('float32')
#preprocessing
scaler = StandardScaler()
signal_data = scaler.fit_transform(signal_data)
train_size = int(len(signal_data) * 0.80)
test_size = len(signal_data) - train_size - int(len(signal_data) * 0.05)
val_size = len(signal_data) - train_size - test_size
train = signal_data[0:train_size]
val = signal_data[train_size:train_size+val_size]
test = signal_data[train_size+val_size:len(signal_data)]
x_train, y_train = create_dataset(train, look_back)
x_val, y_val = create_dataset(val, look_back)
x_test, y_test = create_dataset(test, look_back)
#model
model = Sequential()
model.add(LSTM(128, input_shape=(None, 5),return_sequences=True))
model.add(Dropout(0.3))
model.add(LSTM(128, input_shape=(None, 5)))
model.add(Dropout(0.3))
model.add(Dense(128))
model.add(Dropout(0.3))
model.add(Dense(1))
#predict
forecast = 20
inputs = total_data[len(total_data) - forecast - look_back:]
inputs = inputs.reshape(-1,5)
inputs = scaler.transform(inputs)
X_test = []
for i in range(look_back, inputs.shape[0]):
X_test.append(inputs[i-look_back:i, 0:5])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 5))
# X_test = np.reshape(X_test, (-1, 5))
predicted = model.predict(X_test)
real_last = scaler.inverse_transform(inputs[-1])
real_last = real_last[-1]
predicted = predicted.reshape(-1, 5)
predicted_stock_price = scaler.inverse_transform(predicted)
print(predicted_stock_price)
@Lay4U
Copy link
Author

Lay4U commented Aug 19, 2019

result is


[[  4378.342    4247.811    4512.2803 402961.7      4369.876 ]
 [  4377.433    4245.599    4509.893  402643.2      4368.5737]
 [  4378.431    4246.4004   4508.5093 402258.94     4365.7065]
 [  4374.951    4242.766    4502.827  400327.62     4354.177 ]]

what I want is get only close

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment