Торговля акциями с использованием алгоритмов обучения с подкреплением является активной областью исследований. Основным компонентом обучения с подкреплением является окружающая среда. Чтобы использовать любые алгоритмы подкрепления, нам нужно создать среду. Создание надлежащей среды имеет решающее значение для успеха любых алгоритмов обучения с подкреплением.
В этой статье мы рассмотрим, как создать среду для торговли акциями.
Это исходный код, который мы создали для среды торговли акциями.
Давайте углубимся в каждую часть кода.
В конфигурации,
тикер — название акции, которую мы используем
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.
Мы рассчитываем вознаграждение, вычитая текущую стоимость счета из стоимости открытия. Используя это вознаграждение, модель изменит свой вес, чтобы получить лучшее вознаграждение в будущем.
Как только модель полностью проходит данные обучения, эпизод завершается.
В конце концов, пошаговая функция вернет следующее наблюдение, текущее вознаграждение и завершение эпизода.
С помощью функции сброса мы сбрасываем все в исходное состояние.
Используя описанную выше процедуру, мы можем создать среду торговли акциями для алгоритмов обучения с подкреплением.