【仮想通貨bot】 JavaScriptで作る仮想通貨自動取引bot 第3回 初めてのbot作成(1)

【概要】

・bot作成の流れの説明

・実際に取引を行うコードを作成する

・覚えるべきことの説明


前回はbitFlyerでの売買bot作成の事前準備を行いました。今回からは、実際に売買を行うbotを作っていきましょう。ただし、予め断っておくと、bot作成の概要をつかむことが目的ですので、今回(と次回)はこれを作ったからといって儲かる可能性はほとんどないです。

本当はバックテストをして良いロジックを組むべきですが、例えば0.001枚で動かして見て、これは自分でも作れそうだな、という感触を実感してほしいということが今回の目的です。一応気持ちとしては毎日更新していきたいので、今後のnote記事で徐々に儲かるbotに改善していきましょう。

さて、それでは作成していきます。大まかな流れとしては、

1. bitFlyerからAPI Keyを取得し、設定ファイルに追記

2. node.js からAPI経由で売買する機能の実装

3. 売買のシグナルを出力する関数の実装

4. 売買のシグナルにしたがって売買注文をだすことを繰り返す

5. 様子を見て動いていることが確認できたら終了

となります。長くなるので、若干中途半端ですが今回は3までを実装していきます。


それではやっていきます。一応動作確認していますが、もし動作しないことがあれば、私のTwitterにリプライしてもらえれば、可能な限り返答します。

1. bitFlyerからAPI Keyを取得し、設定ファイルに追記

まず、自動売買に必要なAPIキーを取得します。bitFlyer lightningのページから、左のバーをクリックして、「API」をクリックします。そうすると画面下部に「新しいAPIキー」を作成というボタンが出てくるので、APIキーを作成します。権限はとりあえず全部チェックを入れておいて問題ないと思います。

次に、適当なフォルダを作成します。ここでは仮にbitflyer-botディレクトリとしておきます。

まず、作業ディレクトリを作り、下記を secret.json  として保存してください。なお、このファイルは絶対に外部に漏らさないでください。

{
 "apiKey": "作成したAPI Key",
 "apiSecret": "作成したAPI Secret",
}

2. node.js から売買する機能の実装

そして、下記の内容を同じディレクトリに first-bot.js として保存してください。このコードは実際に0.001BTCを成行で買うので、念のためbitFlyer lightningの画面も開いておきましょう。

// first-bot.js
// ライブラリ
var request = require('request');
var crypto = require('crypto');
var fs = require('fs');

// シークレットな情報
var SECRET = JSON.parse(fs.readFileSync('secret.json', 'utf8'));
var API_KEY = SECRET.apiKey;
var API_SECRET = SECRET.apiSecret;

// TODO: その他の設定情報(ストラテジーのパラメータや売買単位など)

// 実際に売買を行う関数
function firstBot () {
 var timestamp = Date.now().toString();
 var method = 'POST';
 var path = '/v1/me/sendchildorder';

 var body = JSON.stringify({
    product_code: 'FX_BTC_JPY',
    child_order_type: 'MARKET',
    side: 'BUY',
    price: 0, // 成行のときは0を指定
    size: 0.001
 });
 var text = timestamp + method + path + body;
 var sign = crypto.createHmac('sha256', API_SECRET).update(text).digest('hex');

 var options = {
   url: 'https://api.bitflyer.jp' + path,
   method: method,
   body: body,
   headers: {
     'ACCESS-KEY': API_KEY,
     'ACCESS-TIMESTAMP': timestamp,
     'ACCESS-SIGN': sign,
     'Content-Type': 'application/json'
   }
 };

 request(options, function (err, response, payload) {
   console.log('Buy 0.001 BTC');
   console.log(JSON.parse(payload));
 });
}

firstBot();

これを、ターミナル(Windowsだと多分Powershell)を開いて、先程作成したbitflyer-botディレクトリに移動して、

node first-bot.js

 とタイプして実行してください。

コンソール上では次のように表示されるはずです。

$ node first-bot.js
{ child_order_acceptance_id: 'JRF20180409-104342-588878' }

bitFlyer lightningの建玉に0.001BTCの買いが入っていれば成功です!一応画面から売り注文をいれてポジションを解消しておきましょう。

と、一応コマンドラインから注文をできるようになったものの、正直これはAPIの知識がないとすべてをいきなり把握することは難しいです。よくわからないという方はやはり本やWebの情報を読むか、そのうちコードの説明をするつもりなので、そちらを読んでいただければと思います。

また、ターミナルは普通に開発で使うので、そもそもよく分からない方は「ターミナル」や「シェル」で検索して、cd, mkdir, ls くらいは最低限覚えましょう。

さて、次に、売買のシグナルを出力する関数も作りましょう。

3. 売買のシグナルを出力する関数の実装

次の関数を先程のfirst-bot.jsに追記してください。

function simpleSignal (side) {
  if (side === 'SHORT') return 'BUY';
  if (side === 'LONG') return 'SELL';
}

これは単にポジションがショートだったらこのシグナルが出たときに買ってロングに、ロングだったら売ってショートにするだけの非常にシンプルなシグナルです。


長くなってしまうので、4以降は次回説明しますので、少々お待ちください。。


最後に、今後必要になってくるであろう知識を挙げておきます。

・まずプログラミング初心者の方はJavaScriptの基礎的な知識とターミナルの基本的な操作(ほぼ必須になってきます)

・JavaScriptの中級レベルの知識(ただしコピペでよければ無くてもいいです)

・Web API の知識(これもコピペレベルでよければなくてもいいです)

まあ読んでいるうちに慣れてくる気もするので、本腰入れて勉強しなくても良いとは思いますが、そのうち面白くなってきたら勉強したくなってくると思います。

今回は以上です。次回は初めてのbotを完成させます。余力があればGitHubで公開します。わからないことがあったらできればググってほしいですが、私のTwitterにリプしてもらえれば可能な限り返答します。

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