13
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

深層強化学習(Double-QLearning)を用いたシステムトレーディング

Last updated at Posted at 2021-07-25

はじめに

 近年、人工知能ブームにより、人工知能を使ったトレーディング手法が盛んである。そこで、今回は深層強化学習を用いたシステムトレーディングを実施した。
 まず、実際の深層強化学習モデルである。agentの行動として、 BUY、HOLD、SELLの三つの内一つを選択する。環境の戻り値として、状態(今現在保有しているポジションの価格、市場価格、手持ちのキャッシュ)、報酬(手持ちのキャッシュの変化値(含む益も含む))、終了(取引の終了か否か)、情報(ターミナルにディスプレイする情報)を返す。

rl_flow.png

使用データについて

トレンド傾向の掴みやすさから、yahoo financeからGSPCの日足を使用した。

訓練データの期間:2015/1/1 - 2017/6/30
テストデータの期間:2017/7/1 - 2021/1/1

以下ソースコード

Double-QLearning1

Q-Learningモデル

\tilde{Q}(S_t, a) = R_{t+1}+\gamma \max _{a} Q\left(S_{t+1}, a; \boldsymbol{\theta}_{t}\right)

Double-QLearningでは以下の二つの式を用いる。

学習過程

\tilde{Q}(S_t, a) = R_{t+1}+\gamma Q\left(S_{t+1}, \operatorname{argmax}_{a} Q\left(S_{t+1}, a ; \boldsymbol{\theta}_{t}\right) ; \boldsymbol{\theta}_{t}'\right)

行動選択過程

 a = \operatorname{argmax}_{a}  Q\left(S_{t+1}, (a + a')\right)

実際のコードは以下のようになる。

学習

        if s_flag == 11:
            q = self.model.predict(state)  
            next_q = self.model_2.predict(next_state)
            t = np.copy(q)

            t[:, action] = reward + (1 - done) * self.gamma*np.max(next_q, axis=1)
            self.model.train_on_batch(state, t)
        else:
            q = self.model_2.predict(state)  
            next_q = self.model.predict(next_state)
            t = np.copy(q)

            t[:, action] = reward + (1 - done) * self.gamma*np.max(next_q, axis=1)
            self.model_2.train_on_batch(state, t)

2つもモデルを用意する。(Q1、Q2とする)
行動には、3つのパターンがある。

  1. Q1、Q2を足し合わせた行動
  2. Q1、Q1を足し合わせた行動
  3. Q2、Q2を足し合わせた行動

実際の行動は1のみ。
学習を行うのは2、3のどちらか一方を1/2の確率で選択する。

行動選択

    def act(self, state,s_flag=12):
        if np.random.rand() <= self.epsilon:
            return np.random.choice(self.action_size)
        act_values = self.brain._predict(state,s_flag)
        if self.epsilon > self.epsilon_min:
            self.epsilon *= self.r
        return np.argmax(act_values)

売買ルール

1.空売りは認めない
2.ポジションを持っている場合、追加注文を出せない。
3.最後のステップでポジションを全て売却する。
4.ポジションは全買い、全売り
5.所持金は1000000ドル

実装と結果

qlearningより、勝率、収益率の向上が見られる。

ソースコードはこちら

Unknown.png

ソースコードはこちら

  1. H. van Hasselt, "Double Q-learning", Advances in Neural Information Processing Systems,(2010), 23:2613–2621

13
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?