import os
import pandas as pd
import numpy as np
from binance.client import Client
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM, Dropout
from sklearn.preprocessing import MinMaxScaler
# 바이낸스 API 설정
api_key = 'YOUR_API_KEY'
api_secret = 'YOUR_API_SECRET'
client = Client(api_key, api_secret)
# 데이터 가져오기
symbol = 'BTCUSDT'
interval = '1h'
klines = client.get_historical_klines(symbol, interval, '1000 hours ago UTC')
# 데이터 프레임에 저장
columns = ['open_time', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume', 'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore']
df = pd.DataFrame(klines, columns=columns)
df['open_time'] = pd.to_datetime(df['open_time'], unit='ms')
# 필요한 데이터만 선택
df = df[['open', 'high', 'low', 'close', 'volume']].astype(float)
# 데이터 전처리
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(df)
# 시계열 데이터 준비
sequence_length = 60
X, y = [], []
for i in range(sequence_length, len(scaled_data)):
X.append(scaled_data[i - sequence_length:i])
y.append(scaled_data[i, 0])
X, y = np.array(X), np.array(y)
# 훈련 데이터와 검증 데이터 분리
split = int(0.8 * len(X))
X_train, X_test = X[:split], X[split:]
y_train, y_test = y[:split], y[split:]
# LSTM 모델 생성
model = Sequential()
model.add(LSTM(128, return_sequences=True, input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(64, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(1))
# 모델 컴파일 및 학습
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))
# 예측
last_sequence = scaled_data[-sequence_length:]
last_sequence = last_sequence.reshape((1, last_sequence.shape[0], last_sequence.shape[1]))
predicted_open_price = model.predict(last_sequence)
predicted_open_price = scaler.inverse_transform(np.concatenate((predicted_open_price, np.zeros((1, 4))), axis=1))[:, 0]
print(f"1시간 뒤의 예측된 시가: {predicted_open_price[0]:.2f} USDT")
이 프로그램은 Binance API를 사용하여 BTCUSDT(비트코인 대 USDT)의 과거 시간별 가격 데이터를 가져와 LSTM(Long Short-Term Memory) 신경망을 사용하여 1시간 뒤의 시가를 예측하는 코드입니다. 데이터 전처리를 거친 후, 시계열 데이터를 준비하고, 이를 훈련 데이터와 검증 데이터로 나눕니다. 그 다음, LSTM 모델을 생성하고 학습한 뒤 예측을 수행합니다.
여러 기준 데이터를 변경하여 실제 정확도를 테스트해보는 샘플 코드입니다.
반응형