CNTKの強化学習でFXトレードする(1日目)
明日有給を取ったので今日から4連休です。時間ができたので以前から試してみたかったCNTKのdeeprlライブラリを利用した強化学習(DQN)ベースのFX自動売買システムの構築にチャレンジしてみます。
過去、既に統計的方法や機械学習の様々な方法、ディープラーニング(DNNやCNN、LSTM)などいろいろな方法でチャレンジしてきましたがあまり結果がよろしくありませんでした。10連敗というある意味すごい記録を打ち立てたこともあります。
FXは囲碁や将棋のような完全情報ゲームでないためチャート上に答えがない可能性もありますが、現代の年金術としての可能性にかけてみようという男のロマンというかヨコシマな思いです。
まずはdeeprlの使い方ですが、CNTKの強化学習用パッケージdeeprlの使い方を参考にしました。
OpenAI Gymを使ったサンプルが提供されているので、その内容を読み解けば使い方がわかりそうです。
まず以下の部分が最も重要で、CNTKで提供している強化学習エンジン部分の初期化処理のようです。
強化学習の各種設定は設定ファイルに記載してそれを読み込むような手法で第1引数がそれにあたります。CNTKインストールしていると該当のフォルダにいくつか設定がありますので、中身を見てみてください。
agent = qlearning.QLearning(config_filename='config_examples/qlearning.config', o_space=o_space, a_space=a_space)
次にo_space,a_spaceの部分ですが、こちらはOpenAI Gymの取得して設定している値になっていましたが、いろいろ調べるとo_spaceについては現在のゲーム自体の状態を表して情報で、a_spaceはゲームの操作(Action)の状態を宣言しているものでした。
FXでいればo_spaceはチャートの情報、a_spaceは買い(long),売り(short),何もしないなどを表しています。
具体的に以下の例ですと、チャートの情報を5個の実数(-1.0〜1.0)で表現し、ユーザアクションを3つの操作で表すよとした場合の表現になります。
o_space = gym.spaces.Box(-1.0,1.0, (5,)) a_space= gym.spaces.Discrete(3)
あとはゲームを開始して強化学習させます。
#ゲームの開始 action, debug_info = agent.start(observation) #loop #ゲームの実行 #reward = game(action) #次のゲーム操作 action, debug_info = agent.step(reward, observation)
とりあえず主要なポイントこれだけのようなので、あとは観測値の種類、学習やり方や報酬の与え方をいろいろ工夫しながらモデルを作成していくことになりそうです。