Как обучить нейросеть торговать на бирже. Обучение с подкреплением

Код ниже определяет пользовательскую среду Gym под названием CryptoTrader, которая имитирует торгового бота криптовалютами.

Среда принимает на вход исторические данные рынка (data) и начальную сумму капитала и выдает текущее наблюдение на рынке, вознаграждение и флаг завершения симуляции.

Пространство наблюдений определяется как массив с низкой размерностью с тем же количеством измерений, что и входные данные, а пространство действий определяется как непрерывный прямоугольник с одним измерением, где положительные значения представляют покупку криптовалюты, а отрицательные значения представляют продажу криптовалюты.

Обучение нейронной сети в этой симуляции может проходить путем применения алгоритмов обучения с подкреплением, таких как Q-обучение или алгоритмы глубокого обучения с подкреплением, такие как DQN или PPO. Для этого необходимо определить функцию награды (reward), которую будет получать агент за каждое выполненное действие, и использовать эту функцию для обновления весов нейронной сети в соответствии с выбранным алгоритмом обучения с подкреплением.

import numpy as np import pandas as pd import random import gym from gym import spaces from tensorflow.keras import Sequential from tensorflow.keras.layers import Dense class CryptoTrader(gym.Env): def __init__(self, data, capital): self.data = data self.capital = capital self.reward_range = (-np.inf, np.inf) self.action_space = spaces.Box(low=-1, high=1, shape=(1,)) self.observation_space = spaces.Box(low=0, high=1, shape=(len(data.columns),)) def reset(self): self.current_step = 0 self.balance = self.capital self.stocks = 0 self.net_worth = self.balance + (self.stocks * self.data.iloc[self.current_step]['Close']) self.profit = 0 return self.data.iloc[self.current_step] def step(self, action): current_price = self.data.iloc[self.current_step]['Close'] done = False if action > 0: # покупка affordable_stocks = int(self.balance / current_price) stocks_bought = int(affordable_stocks * action) cost = stocks_bought * current_price self.balance -= cost self.stocks += stocks_bought elif action < 0: # продажа stocks_sold = int(self.stocks * abs(action)) profit = stocks_sold * current_price self.balance += profit self.stocks -= stocks_sold self.profit += profit self.net_worth = self.balance + (self.stocks * current_price) self.current_step += 1 if self.current_step >= len(self.data.index)-1: done = True obs = self.data.iloc[self.current_step] reward = self.net_worth - self.capital return obs, reward, done, {} def build_model(input_shape): model = Sequential() model.add(Dense(32, activation='relu', input_shape=input_shape)) model.add(Dense(16, activation='relu')) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse') return model def train_model(env, episodes, steps): input_shape = env.observation_space.shape model = build_model(input_shape) for episode in range(episodes): state = env.reset() state = np.reshape(state, [1, input_shape[0]]) for step in range(steps): action = model.predict(state) next_state, reward, done, _ = env.step(action) next_state = np.reshape(next_state, [1, input_shape[0]]) target = reward if not done: target = (reward + 0.95 * np.amax(model.predict(next_state)[0])) target_f = model.predict(state) target_f[0] = target model.fit(state, target_f, epochs=1, verbose=0) state = next_state if done: break print("Episode ", episode + 1, " total net worth: ", env.net_worth) return model if __name__ == '__main__': data = pd.read_csv('data.csv') capital = 1000 env = CryptoTrader(data, capital) model = train_model(env, episodes=100, steps=200)

Выражение 0.95 * np.amax(model.predict(next_state)[0]) представляет собой целевое значение (целевую функцию), которое необходимо достичь при обновлении весов нейронной сети.

Здесь 0,95 обозначает коэффициент дисконтирования, который отражает то, что будущие награды менее важны, чем текущие награды.

np.amax(model.predict(next_state)[0]) представляет собой наибольшее ожидаемое значение награды для следующего состояния, которое оценивается с помощью текущей нейронной сети.

Это лишь пример, как работает обучение с подкреплением.

Системы с искусственным интеллектом можно применять в любой отрасли и в любом бизнесе.
Напишите мне в вацап, и я расскажу как можно усилить с помощью ИИ именно ваш бизнес

7
5 комментариев