5
9

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 5 years have passed since last update.

為替予測モデル x 独自トレードロジック の FX自動トレードシミュレーションで モデルにトレードロジックも入れ込む (+α)

5
Last updated at Posted at 2019-04-24

機械学習を用いたオレオレFXシステムトレーディングプログラムのロジック解説
のプログラムを久しぶりにいじっているのですが、トレードロジックも可能な範囲でモデルに取り込んだ方が賢くない?
って思ったので、今実装中の内容を書いてみます。
 
現在の最新のコードは以下です。
https://github.com/ryogrid/fx_systrade/blob/81c5e396e3032104289f3adaa8dda438651fd7bf/xgboost_trade_colab_gpu.py
 
少し前のコードですが、Google Colaboratoryですぐ試せるようにした Jupyter Notebook はこちら。
https://github.com/ryogrid/ryogridJupyterNotebooks/blob/master/run_xgboost_trade_best_score_plus_30p_saigen_not_use_gdrive_colab_cpu_4thread_specified_no_use_dumped_pickle.ipynb

実装中のプログラム

簡潔に書きます。

正直なところ全てをモデルに入れ込むのは難しい、というか思いつかないので、ひとまず、為替予測を行うのではなく、ある日にトレードをした場合に勝てる確率がどれだけあるか、を出力するモデルというのを考えて、実装しています。
 
以下ということです。

  • ショートかロングかは既存の為替予測のモデルを用いて判断する
  • 新しいモデルには既存プログラムに入力していたデータに加えて、各足の時点での既存モデルでの予測結果を加えます。
    • メタ特徴量とか言う・・・やつだと思います。値の作り方とかはググって下さい。交差検証のようにK分割とかして作ります。
  • 2値分類のモデル
  • XGBoostを使う (それなりに使えるものがXGBoostしかない)
  • 学習時のラベルデータ
    • 本記事の先頭に貼った記事を読んでもらえば分かりますが、決済ルールは単純なものなので、データを作るのはちと面倒ですが、決済するタイミングと結果はある時点 T{n} を定めれば、唯一の結果として求まります。
  • 既存のトレードロジックの他の条件は取り除く (チャートの形状、ボラティリティなどを考慮するといったもの)
    • 損切りもひとまず行わないようにする

ってな感じです。

まあ、とどのつまり?、トレードロジックの方でも為替予測モデルに入力している情報を使って、売買のフィルタリング(見送る)とかをしているので、そこのパラメータもチューニングするのってなんかムダな感じするなあ、と思ったのがきっかけだったりします。
 
何かアイデア等あればコメント欄まで。
知恵をお借りできれば幸いです。

なんちゃってFXトレードロボコンテスト

記事のタイトルの+αについて書いておきます。
カブロボ(株)はかなり前からコンテストとか行われていますが、FXについてはあまり知らないなあということで、知人とどっちが賢いトレードプログラムを書けるか競争しています。
で、2人だけってのも寂しいので、興味のある方がいれば一緒にやりましょう。
私のコードを改良してみた、とかそんなんでもOKです!
参加表明はこの記事のコメント欄か、Twitter の id:ryo_grid の bio からたどれるメールアドレスにメールか、Twitterで ryo_grid まで ご連絡ください。

以下、レギュレーション的なもの。正直ガチンコではないので、普通に考えるとあり得ないものも含まれますがご理解下さい。

  • 2001年から2008年まで + 2009年の初日のちょこっと、のドル円の5分足のデータを使います
  • 学習等に用いてよいのは2001-2006のデータ(後述の例外っぽいものもあるので注意)
  • 評価は2007-2008 + 2009の頭のちょびっとで行う
  • 初期資産は100万円
  • スプレッドは0.3銭 (上記の始値の+0.15銭が買い値、-0.15銭が売り値とします)
  • トレードは一日一回を上限とし、資産の何割を投入するかは自由です。
  • 取引手数料は無し (スプレッドが実質的な手数料ということになります)
  • 決済したポジションは次の日からすぐに利用できるものとする (従って、複利で資産が変化します)
  • 期限は5月末日。結果と、入力する上記のCSVから結果を再現可能な、作成したコード等は私の方で確認できる状態にしておいて下さい。
     (別にロジックを盗もうとかそういうつもりはないので、public にして問題がないのであれば、githubにでも置いてください)
  • (これがかなりアレなのですが、) 作成するプログラムのパラメータチューニングにおいて、評価期間のデータを用いることはアリです。なぜなら、データが見えてしまっている以上防ぎようがないからです。
    • 私もXGBoostのモデルとトレードロジックの中のパラメータを、評価期間のデータでバックテストした結果で評価値としてチューニングするとかアレなことをしています
    • ただし、機械学習的な手法を用いる際に、評価期間のデータを入力データセットに含めるのはNGです。
    • いろいろ曖昧なルールですが、まあ、よしなに判断して下さい
  • レバレッジは1倍です
  • 計算資源に縛りはありません

なんか書き忘れたことがありそうですが、曖昧な点があればコメント欄までお願いします。
ちなみに、参考までに、私のコードだと、ベストのパラメータで+50%が現時点で最高のリザルトです。

以上!

5
9
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
5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?