【仮想通貨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