Сделайте агента RL, чтобы он играл против человека
В своей настройке я использую стабильные базовые показатели, чтобы создать агента, который найдет хорошую политику для покупки и продажи на валютном рынке.
С этой целью я сделал 3 вспомогательных файла для создания своей среды.
Один - это спотовые курсы данного процентного обменного курса, второй - действия клиента (покупка, продажа, ничего не делать), а второй - суммы, которые клиенты использовали в этой настройке.
Каждая строка данных представляет день. и каждую колонку в секунду в день. Таким образом, спотовая ставка [i,j] соответствует действию клиента и количеству i-го дня и j-й секунды.
Я хочу, чтобы мой агент отвечал на действия клиента. Поэтому, если клиент совершает покупку, для моего агента имеет смысл сделать ту же сумму, что и на продажу, чтобы уменьшить его подверженность риску или разбить сумму на более мелкие части с течением времени.
По сути, клиенты каждый раз нарушают работу агента.
Итак, я сделал функцию
def _client_action(self):
spot = spots[i,j]
amount = amounts[i,j]
action = actions[i,j]
# Disrupt the agent's variables with this function
transaction(spot, amount,action)
def _agent_action(self, action):
spot = spots[i,j]
transaction(spot, action[0], action[1])
def step(self, action):
_client_action()
agent_action()
reward = ...
obs = self._next_obs()
return obs, reward, done, {}
Возможна ли эта среда? Я начал это с парадигмой Alpha Go
Я хочу, чтобы моя система реагировала, когда против него принимаются меры. Но все, что я думаю, в то время он делает - это случайные ходы. Я использую A2C с MlpPolicy.
Затем следует скорректировать приведенный ниже тестовый код. Я предоставлю новые данные spot, c_amount, c_action или скармливаю их по одному, и агент должен выводить, что делать (Купить X, Продать X, Ничего не делать).
obs = env.reset()
for i in range(0, len(client_amounts.index)):
for j in range(0, len(client_amounts.columns)):
c_amount = client_amounts.iloc[i,j]
c_action = client_actions.iloc[i,j]
action, _states = model.predict(obs)
obs, rewards, dones, info = env.step(action)
env.render()