自動トレードボット(マージントレード版)
目次
はじめに
少し前ですが、Poloniexで仮想通貨の現物取引ボットを作った記事の続編です。
前のボットは現物買いしかできませんでしたが、今回は空売り空買いができるマージントレードに対応させました。
ボットを動かす前にマージントレード口座に資金を入れておく必要があります。
マージントレード口座への資金の入れ方は前回の記事を参照してください。
使い方
使い方は前のボットと基本的に一緒です。
先ずpredictionpriceモジュールをインストールします。GitHubのリポジトリからcloneして入れてください。
git clone https://github.com/darden1/python-predictionprice.git cd python-predictionprice python setup.py install
バージョン0.2.2のpoloniexモジュールが必要ですが、predictionpriceをインストールする時に、私のリポジトリにForkしたものを自動でとってくるようにしてあります。
アンインストール時は、pipでアンインストールしてください。
pip uninstall predictionprice
ボットは、examples/margintrade
フォルダ中の、margintradebot.py
です。
7~10行目に、適当なgmailアドレスとパスワード、Poloniex.comのAPIKeyとSecretを書き込んでください。
myGmailAddress = "********@gmail.com" myGmailAddressPassword = "************" myAPIKey = "************************" mySecret = "************************************************"
ボットはLinuxで実行することを想定しています。nohup
を付けて以下の様に実行してください。
nohup python margintradebot.py > out.log 2> err.log &
ボットを落としたい場合は、以下のコマンドでプロセスIDを確認してkillします。
ps auxw | grep python
ボットの取引ルール
基軸コインBTC(20行目のbasicCoin = "BTC"
で指定。)に対し5種類のコイン(12行目のcoins = ["ETH", "XMR", "XRP", "FCT", "DASH"]
で指定。)で取引しています。
例えばマージン口座内に1BTCがある時、実際借りれる資金はレバレッジ2.5をかけた2.5BTCなので、これを取引コイン数5で割った0.5BTCを各コインの証拠金として割り当ててます。
ボットは、一日に一回Ploniex.comの日脚データが更新されるUTC時間の00:01(日本時間09:01)に取引をします。
明日の価格予想アルゴリズムは決定木を使っており、明日の価格上昇確率が50%以上で買い(long)サイン、それ以下で売りサイン(short)を出しますが、バックテストの正答率が悪い場合(50%を下回る場合)はポジションを持たない(hold)ようにしてあります。
運用結果
以下運用成績です。2ヶ月程運用しましたが、結果は散々でした。
前のボットでは空売りが出来なかったので取引機会を逃していると思っていましたが、空売りが出来てもダメでした。
ボットは1日に1度、売買シグナルを出してポジションを入れ替えます。
このポジション入れ替えの直前と直後で、資金の評価額がどれだけ変わるか調べてみたところ、平均で1%程評価額が下がっていました。
つまりスプレッドは1%で、取引する度に1%ずつ資金を失うことになります。
以前の記事で、バックテストではスプレッドが0.3%を超えると利益を出すのが難しくなるという記事を書きましたが、1%だと更に厳しいでしょうね。
ちなみに、スプレッドがゼロだった場合を想定して、上の運用結果グラフを書き直すと、以下になります。
スプレッドがゼロでもだめですね。
仮想通貨取引は、24時間365日取引が可能で、かなり低い資金で始められる(Poloniexでは0.0001BTC。日本円で約10円)ので魅力を感じていましたが、スプレッドが大きいのでデイトレードには向いてない気がしてきました。
最近Bitcoin価格は急上昇しているので、Bitcoinを買ってそのまま塩漬けするのが一番いいかもです。
ただ、トレーニングデータに他のデータ(例えばBTC_ETHのデータにBTC_XMR)を追加してみたり、移動平均やRSI等追加してみたり、予測アルゴリズムを決定木だけではなく、色々な学習器のアンサンブル等にしたらどうなるんだろうという気はしています。
一応、これらを想定してモジュールを作ってありますが、しばらくは放置ですね。。