Q 関数の近似に DeepSense Network を使用した、深層強化学習ベースのビットコイン取引エージェント。
データセット、前処理、ネットワーク アーキテクチャ、実装の詳細については、このリポジトリの Wiki を参照してください。
コードを実行するためのすべての依存関係を含む ubuntu 仮想マシンをセットアップするには、 assets/vm
を参照してください。
事前に構築された Docker イメージを Docker Hub から直接プルし、次のように実行します。
docker pull samre12/deep-trading-agent:latest
docker run -p 6006:6006 -it samre12/deep-trading-agent:latest
または
コマンドを実行してローカルで docker イメージをビルドし、イメージを次のように実行します。
docker build -t deep-trading-agent .
docker run -p 6006:6006 -it deep-trading-agent
これにより、エージェントをトレーニングするためのリポジトリがセットアップされ、
現在のディレクトリをコンテナ内の/deep-trading-agent
にマウントします
イメージの構築中に、取引所から最新の取引履歴が取得およびサンプリングされ、ビットコイン価格の分単位スケールのデータセットが作成されます。このデータセットは/deep-trading-agent/data/btc.csv
に配置されます
エージェントのトレーニングを開始するには、構成ファイルで適切なパラメーターを指定し (構成ファイルの例は/deep-trading-agent/code/config/config.cfg
にあります)、 /deep-trading-agent/code/main.py
使用してコードを実行します。 /deep-trading-agent/code/main.py
トレーニングはTensorboardを介したロギングとモニタリングをサポートします
vim
とscreen
コンテナーにインストールされ、構成ファイルを編集してtensorboard
を実行します
Tensorboard を使用してトレーニングを監視するには、コンテナのポート6006 をホスト マシンの6006にバインドします。
プロジェクトをサポートするには、このリポジトリに を与えてください ?。
Preprocessor
で指定された時間間隔内で取引されたビットコインの最高価格と最低価格、および取引量を抽出します。 Deep Q-Trading からインスピレーションを得て、単一資産の単純化された取引問題を解決します。
各取引単位では、ニュートラル(1)、ロング(2)、ショート(3)の 3 つのアクションのうち 1 つだけが許可され、エージェントの現在のポジションに応じて報酬が得られます。 Deep Q-Learning エージェントは、蓄積された報酬の合計を最大化するようにトレーニングされています。
現在の Deep Q-Trading モデルは、 Q 関数の近似にDeep Senseアーキテクチャを使用することによって変更されています。
このリポジトリに記載されている手順を変更することで、1 分あたりのビットコイン シリーズが取得されます。 Coinbase取引所でのトランザクションは、ビットコイン価格シリーズを生成するためにサンプリングされます。
データセットをダウンロードするには、 assets/dataset
を参照してください。
基本的な前処理
欠損値を完全に無視してデータセットから削除し、価格のタイムスタンプを使用して連続値のブロックを蓄積します。
エージェントの状態と期間を合わせた履歴の長さよりも小さいタイムスタンプの数を持つ蓄積されたブロックはすべて、エージェントのトレーニングに使用できないため、フィルターで除外されます。
現在の実装では、エージェントの現在の状態の表現を生成するために、過去 3 時間 (180 分) の分当たりのビットコイン価格が使用されます。
既存のデータセット (執筆時点) では、データセットの前処理中に生成されるログは次のとおりです。
INFO:root:Number of blocks of continuous prices found are 58863
INFO:root:Number of usable blocks obtained from the dataset are 887
INFO:root:Number of distinct episodes for the current configuration are 558471
高度な前処理
欠損値を処理し、より小さいブロックを連結して、連続価格ブロックのサイズを増やします。
モデルのパフォーマンスにあまり影響を与えない方法で欠損値を埋めるための文献における標準的な手法は、減衰のない指数関数的な埋め込みを使用することです。
(実装予定)
Deep Senseネットワークの実装には Tensorflow "1.1.0" バージョンが使用されます。
実装は、ビットコイン データの単一の時系列にわたる学習を組み込むために、ネットワーク アーキテクチャにいくつかの簡素化を加えて、この Github リポジトリから適応されています。
実装と前処理は、この Medium の投稿からインスピレーションを受けています。 Deep Q ネットワークの実際の実装は、DQN テンソルフローから適応されています。