読者です 読者をやめる 読者になる 読者になる

Pythonと機械学習

Pythonも機械学習も初心者ですが、頑張ってこのブログで勉強してこうと思います。

自動トレードボット

Python Bitcoin

目次

はじめに

ここまでで仮想通貨の自動トレードボット作成に必要な知識がそろったので、実際にボットを作ってみました。

一カ月ほど運用していますが、まあ結果は全然ダメです。

Githubに公開したので、何かの参考にしてもらえれば幸いです。

スクリプト中にコメントは全然書いてないです。そのうちアップデートしようと思っていますが、不明点やアドバイスなどコメント頂ければありがたいです。

基本的には以下の機能をひっくるめてモジュール化(predictionpriceというモジュール名にしてます)し、ボット内ではモジュールの中の関数を順番に呼び出すような形になります。 各機能の詳細は過去記事を参照してください。

使い方

準備するもの

ボットを稼働するにあたって事前に以下が必要になります。

ボット稼働方法

先ず、predictionpriceモジュールをインストールします。

git clone -b 1.x https://github.com/darden1/python-predictionprice.git python-predictionprice-1.x
cd python-predictionprice-1.x
python setup.py install

git cloneでダウンロードしなくても、Githubのサイトに行って、zipでとってきてもいいです。

アンインストールするときはpip uninstallで行ってください。

pip uninstall predictionprice

ボットは、examplesフォルダ中のpredictionPriceBot.pyです。

predictionPriceBot.py中の以下の記述(7~10行目)に、Gmailアドレスとパスワード、Poloniex.comのAPIKeyとSecretを記述します。

myGmailAddress = "********@gmail.com"
myGmailAddressPassword = "************"
myAPIKey = "************************"
mySecret = "************************************************"

ボットはLinux上で稼働することを想定しています。nuhupを使って実行すると、シェル端末を落としてもバックグラウンドで実行され続けます。

nohup python predictionPriceBot.py > out.log 2> err.log &

ボットを落としたい場合はpsコマンドにauxwオプションを付けてpythongrepするとプロセスIDが確認できます。

ps auxw | grep python

プロセスIDが確認できたらkillコマンドで落としてください。

ボット内のルーチン

ボット内では以下のルーチンを一日に一回、Poloniex.comの日足データがアップデートされるUTC時間00:01(日本時間09:01)に実行します。

  • 仮想通貨価格データ取得
  • バックテストの実施
  • 明日の価格予想
  • バックテスト結果と明日の価格予測結果のメール送信
  • 明日の価格予測結果に従って成行トレード
  • トレード後のバランスデータをメール送信
  • バランスデータをcsvファイルに保存
  • 学習パラメータの最適化(最適化した学習パラメータを翌日の予測に使います)

トレードするコインの組み合わせはcoinsbasicCoinで変更できます。

デフォルトで基軸コインをbasicCoin = "BTC"にしてます。まあこれはいじらない方がいいです。

対BTCに対してトレードするコインはデフォルトでcoins = ["ETH", "XMR", "XRP", "FCT", "DASH"]の5つにしました。過去データが十分にあって取引量が比較的多いものを選んでます。

注意

このボットを稼働しても確実に利益が出るわけではないので、試しに使ってみる際は十分そのことを理解した上でご使用ください。

損切り機能も無いので、十分お気を付けください。

ちなみに以下、私の一カ月のボット運用結果です。

f:id:darden:20161108233905p:plain

最近は、Bitcoinレートが急上昇していて対BTCコインが軒並み下がっており、現物買いだけ(ボットは現物買いしかしません)では利益が出るわけが無いんですね。空売り機能も追加しないとだめですね。

まあ取りあえずはプロトタイプを作ったということで、ゆっくり改良していこうと思います。

どなたか新しいトレードボットアルゴリズム開発の際に参考にしていただければ幸いです。願わくば上手くいく方法を教えてください。

おまけ

ちょっと自分のバランスデータを見たい時に、iPhoneでPoloniex.comのWebサイトに行き、毎回ログインするのが非常に面倒くさいので、Poloniex.comのバランスデータを取得するスクリプトgetPoloniexBalance.pyを作りました。(examplesフォルダの中に入っています。)

numpyしか使っていないので、iPhoneアプリPythonista 3で動きます。

もしよかったらこちらも使ってやって下さい。