スクリーンショット_2018-04-15_15

【仮想通貨bot】 JavaScriptで作る仮想通貨自動取引bot 第7回 VIX戦術bot(3) ☆ソースコードあり

【概要】

実際に売買するVIX戦術botのソースコード公開(オープンソース)

・実際にbotを動かしてみる

・注意事項など

前回、前々回ではVIX戦術botを作る上での基本的な方針をお話しましたが、今回は本番稼働するbotのソースコードを公開します。私のGitHubにソースコードをアップロードしておいたので、これを使いましょう。

(ちなみにどうでもいいですが画像はAIによる自動生成です)

【追記】4/16 0:50 ファイルが更新されていない箇所があり、一部の機能が正常に動作しなかったようでした。修正したので古いバージョンになっている方は再度ダウンロードしてください。

ソースコードは実はかなり修正したのですが、もし不具合などあれば、私のTwitterでリプライしてもらえると多分反応します。

なお、MITライセンスにしたので、著作権表示とライセンスの内容をソースコードに書いておけば、非公開・公開/商用・非商用を問わずに、自由に再頒布することができます。したがって例えば、儲かるbotが作れたら、トレードに使うだけでなく、作成したbotをソースコード非公開の状態で販売することが可能です。(これもまた一部から怒られそうですが、特に悪いことをしているわけではないので。。)

ただし、私の方では作成したbotについて責任を負わないというライセンスでもあるので、この点はご理解いただければと思います。

さて、それでは早速動かしていきましょう。ソースコードをダウンロードして適当な場所においてください。まずはバックテストをしていきます。いくつかライブラリを追加したので、まずインストールしておきます。

cd tona-bitflyer-bot
npm install

では、バックテストを実行してみましょう。下記のような結果が得られれば成功です!

$ node bot/vixrsi/backtest.js
【LONG】 2018/03/29 16:00:00
【LONG】 2018/03/29 17:00:00
【利確/損切時刻】 2018/03/29 18:00:00 【利益】 133.4
【LONG】 2018/03/30 00:00:00
【利確/損切時刻】 2018/03/30 02:00:00 【利益】 1429.8000000000002
【SHORT】 2018/03/31 14:00:00
【利確/損切時刻】 2018/04/01 14:00:00 【利益】 542.6
...
推定総利益: 8975.199999999999
推定勝率: 0.75

これは60分足、BTC0.1枚単位で2週間程度回した場合の結果です。1枚単位で回せば勝手に9万円増える計算です。上手いトレーダーに比べたら微妙な結果かもしれませんが、シンプルな実装でもそこそこ行けることがわかったので、損している部分を見つけて、TradingViewを見ながらチューニングすればなかなか良くなりそうですね。

このバックテストの設定ファイルは bot/vixrsi/vixrsi_config.js に書かれています。バックテストの売買単位や時間足を変えたい場合は、exports.backtest の中の amount が売買単位、candleSize がn分足になるので、こちらを設定してください。

次にシミュレータを実行してみます。1分足で回してもすぐには売買しないことが多いので、最悪飛ばしても構わないですが、念のためやっておきましょう。

$ node bot/vixrsi/simulator.js
(simulate) シグナル: HOLD
----------
(simulate) シグナル: HOLD
----------
(simulate) シグナル: BUY
...

シミュレータでの動作確認が出来たら、実際に売買するbotの設定をします。 bot/vixrsi/vixrsi_config.js を開いてください。デフォルトでamount(売買単位)と candleSize(ローソク足)は下記のようになっていると思いますが、念のため確認しましょう。

exports.trader = {
 amount: 0.001, // 1回のトレードの取引枚数。
 candleSize: 1, // n分足、本番では60がおすすめ
 ... //他のパラメータ
}

今回は主に動作確認をしたいので、仮に1分足、0.001枚で回すことにしますが、短い期間だと儲からないことが多いので、実運用では長めで回すことをおすすめします。あと、動作確認はしていますが、現時点では最低限の実装しか追加していないので、このまま回すのは結構リスクが高いと思います。このbotの運用で損をした場合でも、私の方では一切の責任を負いかねますので、この点ご了承いただければと思います。

さて、問題なければ実際にbotを動かしてみましょう。下記のコマンドを入力してください。

node bot/vixrsi/vixrsi_bot.js trade

だいたい1分毎にHOLD, BUY, SELLのどれかが表示されます。

[稼働開始]
HOLD
HOLD
HOLD
...
BUY
シグナル: BUY
ポジション: LONG
取引枚数(BTC) 0.001
{ child_order_acceptance_id: 'JRF20180415-043800-283865' }
EXIT
...

シグナルがBUYになると、0.001枚の買い注文を成行で出します。IDが返ってきたら実際に注文ができています。実際にブラウザから取引履歴を開いて、実際に注文が通っていることを確認しましょう。

なお、サーバの負荷が高い場合、下記のようなエラーが送られてきます。

{ status: -208,
 error_message: 'Order is not accepted. Please try again later.',
 data: null }

この場合サーバ側には注文が入っていないことになります。実は、この問題が結構厄介で、現時点のGitHubに上がっているソースコード上では、注文を出した時点でポジションを移行することになっています。なので、実際には買い注文が通っていないのにLONGの状態で処理を進めてしまうことになります。どうも以前よりサーバ負荷が高いような気がするので、この状況には対処する必要があります。この対策をした取引botについても、近いうちにGitHubにソースコードをアップします。

ソースコードについては次回あたりに説明する予定ですが、できるだけシンプルに書いたつもりなので、TradingViewと合わせて読めばある程度JavaScriptやnode.jsの経験のある方なら現時点でも大体わかると思います。本当はもうちょっとドキュメント書きたいのですが、使っているライブラリについて知りたい方はとりあえずpackage.jsonを見ていただければと思います。

次回は今回のソースコードを見ながら、TradingViewのスクリプトをJavaScriptに変換するコツなどについて書く予定です。

Twitterはこちらです。 https://twitter.com/tonacoin BitMEXのアフィリンクあるので踏んでくれると喜びます。 https://www.bitmex.com/register/1zrLfZ