FX自動取引システムを作りました(が負けてます)

2019年02月6日

Pythonを使ってFX自動取引システム&Twitterボットを制作したので紹介します。

動機

  • FXのテクニカル分析ってプログラムで自動化できるんじゃない?
  • 不労所得があったらハッピーだろうな
  • トレードの状況をリアルタイムに正直にツイートするボットがあったら面白そうだな

技術的な話

取引口座

OANDAという会社が、REST APIを公開しているので、これを使ってトレードするようにしました。
(意外とFX取引のAPIを公開している会社は少ない)

OANDAはすごくて、Java, Python, JavascriptそれぞれにWebAPIのラッパーライブラリを用意してくれています。
今回はPythonでシステムを作ってみることにしました。

プログラミング

主にPythonのv20-python、schedule、pandas、oauthlib、あたりのライブラリを使用して制作しました。

大きく分けて

  • 価格データを取得して、分析用の数値を算出して、DBに保存する「recorder」
  • DBのデータを見て、トレードを行う「trader」
  • 取引のデータを見てツイートを行う「tweeter」
  • プログラムを定期的に実行する「scheduler」

という構成でプログラムを作りました。

2018年12月末くらいから作り始めて、1週間くらいで動くようになったのですが、
不具合や直したい点が日々出てきて、2019年2月現在も手直しを続けています。

DBはsqliteを使っていて、1ファイルにまとめているんですが、「database is locked」がちょいちょい発生してました。
処理の順序を考えてなるべく回避しているのですが、いくつかのファイルに分けたほうが良さそうな気がします。
そのうちやります。

あとOANDAのAPIがよく死んでるので、それの例外処理に取組み中です。
あとプロセスが死んでたらcronで起動してもらいたいのですが、なんかcronが動かなくて、それも取り組み中です。

実行環境

Google Cloud PlatformのComputing Engineで実行しています。
f1-microインスタンスを使っています。無料でクラウドのサーバ使えるってマジ素晴らしいですね。

しかもGoogle Cloudのスマホアプリがすごくて、簡単にスマホでSSHが使えるのに感動しました。
よくログ見たりプロセス死んでたら起動したりしてます。

Twitter

トレードの結果をツイートするTwitterボットにしてみました。
@fx_junko

名前の由来は「順張り」と最近観て面白かったアニメのキャラ(紺野純子)です。
イラストはココナラで依頼して描いてもらいました。かわいいですね〜

トレードのロジック

米ドル/円でやってます。

5分足のボリンジャーバンドとMACDを見て判断しています。

方針としては「強めの方向が出てきたら順張りでエントリー、逆向きに動いたら撤退」という感じです。

大体のロジックはこんな感じです。(数字は様子を見て調整します)

エントリー

  • 終値がボリンジャーバンド(期間14, σ2)を超えた
  • かつ、最近のローソク14本でMACD(長期26, 短期12, シグナル9)がシグナルを同じ方向にクロスしている

値動きに興味の無い方には意味がわからないですよね。

「最近の値動きと比べて大きく動いた」かつ「同じ方向に進む感じが出てきた」
というときに、同じ方向に進むことに賭ける、という感じです。

イグジット

  • 現在値がボリンジャーバンドの中央を超えて反対側(買いポジションなら下、売りなら上)5分の1以上を超えた
  • または、終値がボリンジャーバンドの中央を超えて反対側(買いポジションなら下、売りなら上)になった
  • または、ローソクが3回連続逆向きの線(買いポジションなら陰線、売りなら陽線)になった

値動きに興味の無い方には意味がわからないですよね。

「価格が、最近の価格の平均と比べて、賭けた方向の反対側を超えている」もしくは「連続して賭けた方向と逆に動いてる」
というときに、手仕舞いする、という感じです。

その他

  • 最近のローソク8本でボリンジャーバンドの反対側を超えていたらエントリーしない(急な反転は長続きしない気がする)
  • 21:30-08:00UTC(06:30-17:00JST)はエントリーしない(大きい方向性ができない気がする)

などの条件を入れています。

成績

2019年1月頃から運用を初めて、2019年2月初頭現在なんと、、、

マイナス17,000円です(^o^)
(-170pips@10000通貨単位)

まあデモ口座で動かしてるので全然良いんですが。

調子良かったら本番口座で動かそうと思っていましたが、まだまだですね。

動かし始めた当初はMACDだけで判断してて、ずっと負けてたんですが、
最近ボリンジャーバンドの判定とトレード時間の制限を入れてからは徐々に巻き返して、
いきそうな、気がします!!

ソースコードはこちら

https://github.com/KobayashiTakaki/fx-junko

自由に使っていただいて結構ですが、損失が出ても責任は取れません。

終わりに

皆様もオリジナルのトレードシステムを作ってみてはいかがでしょうか!!

OANDAはデモ口座ならサクッとアカウント作ってすぐにAPIが使えます。

そしてうちの純子と勝負しましょう……良い取引ロジックがあったら教えてください……

以上です。