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

В этой статье мы рассмотрим, как создать среду для торговли акциями.

Это исходный код, который мы создали для среды торговли акциями.

Давайте углубимся в каждую часть кода.

В конфигурации,

тикер — название акции, которую мы используем

opens_account_balance — Начальный баланс счета

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

В функции init мы инициализировали переменные среды.

Здесь мы используем автономный файловый поток для получения данных о ценах на акции. мы также можем использовать API (yahoo) для получения данных в реальном времени.

self.ohlcv_df['SMA_10'] = self.ohlcv_df['Close'].rolling(10).mean()
self.ohlcv_df['SMA_21'] = self.ohlcv_df['Close'].rolling(21).mean()
self.ohlcv_df['SMA_50'] = self.ohlcv_df['Close'].rolling(50).mean()
self.ohlcv_df['EMA_10'] = self.ohlcv_df['Close'].ewm(span=10, adjust=False).mean()
self.ohlcv_df['EMA_21'] = self.ohlcv_df['Close'].ewm(span=21, adjust=False).mean()
self.ohlcv_df['EMA_50'] = self.ohlcv_df['Close'].ewm(span=50, adjust=False).mean()

Здесь, используя библиотеку панды, мы вычисляем простую скользящую среднюю и экспоненциальную скользящую среднюю для периодов 10, 21, 50 дней. мы будем использовать эти данные для создания наблюдения за окружающей средой.

self.action_space = spaces.Box(low=np.array([-1]), high=np.array([1]), dtype=np.float)
self.observation_space = spaces.Box(low=0,high=1,shape=(len(self.observation_features), self.horizon + 1),dtype=np.float,)

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

def get_observation(self):
      observation = (self.ohlcv_df.loc[self.current_step 
                      - self.horizon : self.current_step
                      -1,self.observation_features,].to_numpy().T)
return observation

Используя функцию получения наблюдения, мы создаем наблюдение, взяв данные 10-дневного временного интервала.

В функции execute_trade_action мы выполняем действия покупки, продажи и удержания.

если действие удерживается, мы ничего не делаем.

Если действие «Купить», мы проверяем, сколько акций мы можем купить по текущей цене акции. В скрипте мы разрешаем максимальное количество шаров выполняться как 10. Мы можем изменить это значение.

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

Здесь cost_basis используется для отслеживания средней цены акции.

Если действие — продажа, мы добавляем проданную сумму к балансу денежных средств и вычитаем количество из num_shares_hold. Здесь также мы разрешаем максимальное количество акций для продажи, равное 10. Мы можем изменить это значение.

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

Пошаговая функция используется для выполнения действия модели в текущей среде.

Здесь мы выполняем модельное действие (покупка, продажа или удержание) и выполняем соответствующее торговое действие с помощью функции execute_trade_action.

Мы рассчитываем вознаграждение, вычитая текущую стоимость счета из стоимости открытия. Используя это вознаграждение, модель изменит свой вес, чтобы получить лучшее вознаграждение в будущем.

Как только модель полностью проходит данные обучения, эпизод завершается.

В конце концов, пошаговая функция вернет следующее наблюдение, текущее вознаграждение и завершение эпизода.

С помощью функции сброса мы сбрасываем все в исходное состояние.

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