import os import pandas as pd import numpy as np import tensorflow as tf import tinkoff_invest import json def get_usd_to_rub_exchange_rate(token): session = tinkoff_invest.Session(token) currency = session.get_currency("USDRUB") return currency.last_price def prepare_data(file_path, window_size=100): data = pd.read_json(file_path, lines=True) data_array = np.array(data) target = data_array[window_size:, -1] data_input = np.array([data_array[i:i+window_size, :-1].flatten() for i in range(len(data_array)-window_size)]) return data_input, target def create_model(input_shape): model = tf.keras.Sequential([ tf.keras.layers.Dense(128, activation="relu", input_shape=(input_shape,)), tf.keras.layers.Dense(1, activation="sigmoid") ]) return model def train_model(model, data_input, target): model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"]) epochs = 10 for epoch in range(epochs): model.fit(data_input, target, epochs=1, verbose=0) model.save_weights("model_weights.h5") return model def load_model(input_shape): model = create_model(input_shape) model.load_weights("model_weights.h5") return model def test_model(model, new_data): predictions = model.predict(new_data) return predictions.flatten() def main(): model_path = "model_weights.h5" data_path = "data.json" window_size = 100 if not os.path.isfile(model_path): print("Веса модели не найдены. Пожалуйста, выполните тренировку.") return model = load_model(window_size * (data_input.shape[1] // window_size)) memory = [] while True: print("Выберите режим:") print("1 - Тренировка нейросети") print("2 - Режим предсказания") print("3 - Режим реального времени и запись данных для обучения") print("0 - Выход") mode = input("Введите номер режима: ") if mode == "0": break elif mode == "1": default_data_path = "data.json" data_path = input(f"Введите путь к файлу с данными (по умолчанию {default_data_path}): ") data_path = data_path if data_path else default_data_path data_input, target = prepare_data(data_path, window_size) model = train_model(model, data_input, target) print("Нейросеть успешно обучена и веса сохранены.") elif mode == "2": sequence = [float(input(f"Введите значение {i + 1}: ")) for i in range(100)] predictions = test_model(model, np.array([sequence]).flatten()) print(f"Предсказанная вероятность для следующего колебания: {predictions[0]}") elif mode == "3": token = "ваш_токен_авторизации" exchange_rate = get_usd_to_rub_exchange_rate(token) label = 0 if exchange_rate < memory[-1] else 1 memory.append(exchange_rate) if len(memory) >= window_size: with open(data_path, 'a') as file: file.write(json.dumps({"rate": exchange_rate, "label": label}) + '\n') sequence = np.array(memory[-window_size:]).flatten() predictions = test_model(model, sequence.reshape(1, -1)) print(f"Предсказанная вероятность для следующего колебания: {predictions[0]}") memory.pop(0) if __name__ == "__main__": main()