深層強化学習（IMPALA）を用いたシステムトレーディング

# はじめに

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

![reinforcelearning.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/f0977400-d398-b6a4-477d-179606b4557e.png)


## 使用データについて

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

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

以下ソースコード

https://github.com/sugiyama404/ReinfoceLearningForTrading/blob/main/get_csv.ipynb

# IMPALA[^1]

[^1]より、Deepl翻訳を用いると、以下の機能を持っている。

>単一のパラメータセットを持つ単一の強化学習エージェントを使用して、大規模なタスクのコレクションを解>決することを目指しています。主な課題は、データ量の増加と学習時間の延長に対応することです。我々は、>新しい分散エージェントIMPALA（Impor-tance Weighted Actor-Learner Architecture）を開発し>た。このエージェントは、単一マシンでの学習においてリソースをより効率的に使用するだけでなく、データ>効率やリソース利用を犠牲にすることなく、数千台のマシンに拡張することができる。このアーキテクチャで>は、アクターと学習を分離し、V-traceと呼ばれる新しいオフポリシー補正法を組み合わせることで、高ス>>>ループットで安定した学習を実現しています。

![Screen Shot 2021-08-22 at 10.45.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/df87acc7-b489-a6fe-c93b-4963295855ca.png)

impalaの利点として以下の点が挙げられる。
・V-traceと言う奇跡の生成確率を考慮した重点サンプリングを利用して、on-policyの生成タイミングのずれを修正している。
・分散学習が効率化した他、複数タスクの同時学習でも成果が出る。

## On-PolicyとOff-Policyの違い

データ収集時の方策 μと学習している方策 πが一致している場合は、On-Policyであり、一致していない場合は、Off-Policyである。

代表的なon-policyはTRPO，PPO，A3C
代表的なoff-policyはDDPG，TD3,IMPALA

![off_policy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/bd60ca85-1447-f0dd-ff54-5d784400ac66.png)

## 数式モデル

### V-traceターゲット

```math
V_s := V(x_s) + \mathbb 
\sum_{t=s}^{s+n-1} \gamma^{t-s} \biggr(\prod_{i=s}^{t-s} c_i \biggr) \delta_tV
```

以下の束縛条件がつく。

```math
\delta_tV := \rho_{t}(r_t+ \gamma V(x_{t+1})-V(x_t)) \\
\rho_i = \min(\bar \rho,\frac{\pi(a_i|x_i)}{\mu(a_i|x_i)}) \\
c_i = \min(\bar c, \frac{\pi(a_i|x_i)}{\mu(a_i|x_i)}) \\
\bar \rho \ge \bar c
```

### 方策勾配

```math
(V_s - V_\theta(x_s)) \nabla_\theta V_\theta(x_s)
```

### ベースライン勾配

```math
\rho_s \nabla_\omega \log \pi_\omega(a_s|x_s) (
r_s + \gamma \mathcal R^n V(x_{s+1}) - V_\theta(x_s))
```

### エントロピー勾配

また，方策 $\pi_\omega$ が局所解に収束してしまうのを防ぐため，エントロピー損失を加えることも考えられます．

```math
- \nabla_\omega \sum_a \pi_\omega(a|x_s)\log \pi_\omega(a|x_s)
```

### 勾配の合計値

勾配の合計値を求める。

勾配の合計 = 方策勾配損失関数 + &alpha; ベースライン損失関数 + &beta; エントロピー損失関数



# モデル

[^2]を参考に以下のモデルを考案した。

![impala_model.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/ac859e86-555f-f053-ad67-6f8a8c9c5797.png)


# 売買ルール

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

# 実装と結果

ソースコードはこちら

https://github.com/sugiyama404/ReinfoceLearningForTrading/blob/main/IMPALA/impala_test.ipynb



![Unknown.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/104be0e2-ce33-45a2-d6aa-1d1948cccd49.png)

ソースコードはこちら

https://github.com/sugiyama404/ReinfoceLearningForTrading/blob/main/make_data_analysys.ipynb


[^1]: L. Espeholt and K. Kavukcuoglu, et al. "IMPALA: Scalable Distributed Deep-RL with Importance Weighted Actor-Learner Architectures"(2018)

[^2]: W. Lu,J. Li,Y. Li, A. Sun, and J. Wang, 'A CNN-LSTM-Based Model to Forecast Stock Prices', (2020), Hindawi Complexity Volume 2020,p.10