こんにちは、ビットコインの自動売買ツールを開発している龍権(@ryuken_biz)です。

この前は「bitFlyer」のAPIを使ってみていい感じだったので、その続きを開発中です。
前の記事をまだ読んでいない方は、是非お読みください。
関連記事1:bitFlyerのAPIを使ってみた – 自動売買への道(1)
関連記事2:bitFlyerのAPIを使ったソースコードを実行してみた – 自動売買への道(2)

前回と前々回はbitFlyerのAPIを使ってみて、更にソースを実装して動作確認までしています。
今回は、実際ソースコードを使って自動売買のための一部の機能を実装したので、その中身をご紹介しましょう。

目次

何を作ったの?

まず、作ったのはデータを収集するプログラムです。
プログラム名が「collect」なので、「コレクター」と呼ぶことにしましょう。

あなた
いやいや、自動売買プログラムを作ったんじゃないの?

龍権
そうなんです。ゴールは自動売買プログラムですが、そのためにはまずデータを収集しないといけないので。

何を収集するの?

収集しているのは、bitFlyerで取引される最終取引額です。
最終取引といっても常に取引されているので、常に収集する必要があります。

この最終取引額を見ると、相場が上がっているのか下がっているのかが分かります。
つまり、価格が常に上下しているチャートを眺めているのと同じことをしているわけです。

あなたが取引する時は、どうしていますか。
何も見ないで思いつきで、買ったり売ったりしてないですよね。

そうなんです。
取引するためには過去データが必要なんです。
bitFlyerで取引する時は過去チャートが見れますが、自動売買プログラムには過去チャートが見えません。
ですので、過去データを集めておいて、取引プログラム内でチャートのように使う必要がでてきます。

これでなぜ過去データを収集しているか、お分かりですよね。

どうやって保存してるの?

説明を簡単にするために、チャートの時間足を例にしましょう。
データは常に収集していますが、欲しいのは1時間あたりの四本値だけです。
四本値とは、始値・高値・安値・終値のことをいいます。
つまり、1時間内での始値・高値・安値・終値を保持しておけば良いのです。

この4つの値をMySQLのデータベースに下記のように保存しています。
データを常に取得しているのは、高値と安値がいつ更新されるか分からないからです。

データベースに保存されているデータ

+---------------------+---------+---------+---------+---------+
| datetime            | first   | low     | high    | last    |
+---------------------+---------+---------+---------+---------+
| 2017-12-03 17:00:00 | 1339200 | 1328910 | 1343990 | 1333124 |
| 2017-12-03 18:00:00 | 1333124 | 1324039 | 1337519 | 1328061 |
| 2017-12-03 19:00:00 | 1328061 | 1327700 | 1336000 | 1331552 |
| 2017-12-03 20:00:00 | 1331552 | 1330500 | 1387000 | 1385210 |
| 2017-12-03 21:00:00 | 1385210 | 1370000 | 1396000 | 1396698 |
| 2017-12-03 22:00:00 | 1396698 | 1382340 | 1407450 | 1393090 |
| 2017-12-03 23:00:00 | 1393090 | 1371250 | 1397100 | 1383706 |
+---------------------+---------+---------+---------+---------+

どうやって使うの?

僕はなるべくシンプルなルールで取引するようにしています。
たくさんある指標を見ても混乱するので、基本移動平均線しか見ません。

自動売買プログラムでは、僕が普段取引している方法をそのまま実装したいと思っております。
つまり5時間移動平均、25時間移動平均、75時間移動平均線を使って、それらの上げ下げで取引タイミングを決めています。

そのためには、1時間ごとの5時間移動平均、25時間移動平均、75時間移動平均も保持しないといけないので、「コレクター」で次のような移動平均データも作っています。
移動平均データの計算公式は、Money Partnersの指数平滑移動平均を参考にしました。

データベースに保存されている移動平均データ

+---------------------+----------+----------+----------+
| datetime            | value_05 | value_25 | value_75 |
+---------------------+----------+----------+----------+
| 2017-12-03 23:00:00 |  1366922 |  1321048 |  1263916 |
+---------------------+----------+----------+----------+

実際に取引プログラムでは、この移動平均データを見ることになります。
例えば、5時間移動平均と25時間移動平均がゴールデンクロスしたら「買い」、デッドクロスしたら「売り」という具合で注文を出せば良いんです。

まとめ

これで自動売買するためのデータはすべて揃いました。
後は、売買ルールを決めればいいだけですが、この売買ルールが一番の肝になります。
売買ルール次第では、利益も損失もあり得るので、最初はシンプルなルールで小さく取引していこうと思います。

そしてルールが固まったところで細かい調整をしたり、サイズを増やしたりして利益を狙いたいと思います。

bitFlyer」での自動売買プログラムの完成版を紹介した記事も、合わせてご覧ください。
関連記事:bitFlyerで自動取引するプログラムを完成させた – 自動売買への道(4)