# Reinforcement Learning + FX Trading Strategy

This post is based on my previous article written in Japanese.(http://nekopuni.holy.jp/?p=1231)

### Summary

– Applying reinforcement learning to trading strategy in fx market
– Estimating Q-value by Monte Carlo(MC) simulation
– Employing first-visit MC for simplicity
– Using short-term and long-term Sharpe-ratio of the strategy itself as a state variable, to test momentum strategy
– Using epsilon-greedy method to decide the action

### First-visit MC

1. Calculate the state at day t(state = Sharpe ratio one day before day t)
2. Decide the action according to the state(long position, no position or short position)
3. Update rewards matrix based on the reward obtained at next time step t+1
4. Update Q matrix once t is equal to the last time step T
Loop above procedure until you feel happy

### Python code

This time daily USDJPY from FRED is used for simulation.
So-called swap point and any transaction costs are not included in this code so far.

### Results

Still this code takes huge computation time for me so the results(Q matrix) below is done by only 1000 iterations.

For short position(action = 2) As seen in the figures above, the Q-value is lower if we have relatively extreme medium-term Sharpe ratio(lower than -1 and higher than 1)
For long position the Q-value is highest if short-term Sharpe is somewhere between 0.5 and 1.0 whilst between -0.5 and -1.0 is the highest area for short position.
Presumably this code could be seen as modest momentum strategy although I think this is depending on the sample period Figure above is the average of cumulative return for each episode with expanding window.
This seems to be converging a certain level.idk..

– Out of sample
See if this reinforce learning has explanatory power

– other market data such as other currency pairs

– improvement of the computation time
this code is very far from online-learning

# メモ: タプルのリストから任意の列を返す

### 概要

・MySQL.connectorを使うと実行結果がタプルのリストとして返ってくる。その返り値から任意の列を抽出する方法

### mapを使う

mapは第2引数が対象となるリスト、第1引数に対象となるリストの各要素に対して実行する関数を指定する。

### 参考

map, reduce, filterによるシーケンス操作 » Python Snippets
http://python.civic-apps.com/map-reduce-filter/

# 強化学習＋為替トレード戦略

### 概要

・強化学習をトレード戦略に適用するとこんな感じになるのかなというテスト。我流なので何やってんのpgrという場合も生暖かい眼で何卒よろしくお願いします(ヘッジ文言^^)
・モンテカルロをぶん回すことでQ-valueを推定します。
・今回は簡単のために初回訪問モンテカルロ(逐一訪問はめんどいのお)
・モメンタム戦略を試すため、状態として過去の自分自身のシャープレシオ(1ヶ月と3ヶ月)を使用しています。
・行動決定にはEpsilon-Greedy法

### 初回訪問モンテカルロ

いかんせん強化学習の学習自体が何をどう考えて良いか門外漢のため五里霧中＋Pythonも同じく門外漢のため五里霧中のため、自身の勉強方法も探索しっぱなしという^^;;
これであってんのですかねえ

・現在での状態を確認(状態=過去のシャープレシオ)

・その状態における行動価値をもとに行動決定(Epsilon-Greedy法)
・今回はロングポジション・ショートポジション・フラットの3つの行動から選ぶ

・次の期に得られる報酬をもとに、Rewardsマトリックスを更新

・エピソード終端まで来たら各状態行動対のQ値を更新

というフローを何回も繰り返し、Q値を推定していきます。

### コード

Pythonは行列計算させたほうが良いとばっちゃも言ってますように、速度が断然違いますな(1つ1つfor文をネストして各要素にアクセスしていたのは内緒)

### とりあえずの結果

まだ計算が遅い(私の環境だとモンテカルロ1回しで1秒強くらい)ので、モンテカルロの回数を増やすと大変なことに。。
モンテカルロ1000回で、それぞれの行動に対するQ値を見てみると以下

3Dグラフを書くとどこかの業界から殴りこみが来そうな気がするので(^^)簡易的にz軸上から見下ろした感じでグラフを書いてみると以下
・ロングポジションに対して ロングポジションに対してだと、1ヶ月のシャープレシオがやや高い(0.5~1.0)のときに、最もQ値が高くなっています。

やや控えめなトレンド戦略という感じでしょうか。 で、申し訳程度に各エピソードの累積リターンの平均をexpanding windowで取っていくとこんな感じで、まあ収束しているような気がしなくもないのですがどうなんでしょうか。。。

### 今後の課題

・アウトオブサンプル

ただ肝心なのはアウトオブサンプルでどうなのよという話

・ドル円以外の為替

・計算速度の向上

まだ確認すべきことは盛り沢山ですがとりあえず本日は以上(― ―)

### 参考文献

Amazon.co.jp： 強化学習: Richard S.Sutton, Andrew G.Barto, 三上 貞芳, 皆川 雅章: 本
http://www.amazon.co.jp/dp/4627826613

O’Reilly Japan – バンディットアルゴリズムによる最適化手法
http://www.oreilly.co.jp/books/9784873116273/

mplot3d tutorial — Matplotlib 1.3.1 documentation
http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html

# メモ: for文入れ子

### 概要

・複数のfor文を入れ子にせず、1行で書く方法

### 参考

Python で組み合わせや順列を得るときは itertools を使う | CUBE SUGAR STORAGE
http://momijiame.tumblr.com/post/68655902597/python-itertools

10.1. itertools — 効率的なループ実行のためのイテレータ生成関数 — Python 3.4.1 ドキュメント
http://docs.python.jp/3/library/itertools.html#itertool-functions

# Decompose option PnL into its greeks

### Summary

– Decomposition option PnLs into its greeks by using Taylor expansion
– Major greeks attribute to daily PnL are delta, gamma, theta and vega

### Taylor expansion

An arbitrary function $$f \left( x \right)$$ can be written by below formula:

$$f \left( x \right) = f \left( a \right) + f^{\left( 1 \right)} \left( a \right) \left( x – a \right) + \frac{f^{\left( 2 \right)} \left( a \right)}{2} \left( x – a \right)^2 + {\rm higher}.$$

The option present value $$V_t \left( S_t, T, \sigma_t, r_t \right)$$ is expressed with its derivatives(option greeks) in a similar manner:

$$V_t \left( S_t, \tau_t, \sigma_t, r_t \right) = V_{t-1} \left( S_{t-1}, \tau_{t-1}, \sigma_{t-1}, r_{t-1} \right) + \\ \frac{{\partial}V}{{\partial}S_{t-1}}{\rm d}S + \frac{{\partial}V}{{\partial}\tau_{t-1}}{\rm d}\tau + \frac{{\partial}V}{{\partial}\sigma_{t-1}}{\rm d}\sigma + \frac{1}{2} \frac{{\partial}^2V}{{\partial}S_{t-1}^2}{\rm d}S^2 + {\rm residuals},$$

where $$S_t$$ is underlying, $$\tau$$ is time to expiry, $$\sigma$$ is volatility and $$r$$ is interest rate respectively. Usually the effect of the interest rate sensitivity(rho, PV01 sensitivity for swaptions) is limited and included to the “residual” term as well as other higher derivatives.
Daily PnL $$R_t = V_t – V_{t-1}$$ is hence written by below formula:

$$R_t \approx \Delta_{t-1}{\rm d}S + \theta_{t-1}{\rm d}\tau + \nu_{t-1}{\rm d}\sigma + \frac{1}{2} \Gamma{\rm d}S^2.$$

If you consider stochastic volatility model such as SABR, above equation also holds sensitivity terms to that parameters(volvol, beta, rho). Furthermore, other related greeks including forward-delta, forward-gamma, normal-vega can be applied above interchangeably.

### Reference

Taylor series – Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Taylor_series

Riding the Swaption Curve by Johan G. Duyvesteyn, Gerben J. De Zwart :: SSRN
http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2008841