さて、さっそくですが、APIやオープンデータの威力を実感していただきたいと思います。もしも仮想通貨市場の過去の価格データを取得しようと思ったらどうすれば良いでしょうか?
仮想通貨の取引所では過去のデータを公開している所もあり、そこからcsv形式などでデータをダウンロードする事もできる様です。しかし、その場合はスクリプトなどを組んでいない限りは、一定時間毎にデータを収集しなければなりません。
もしも、たった一つのコマンドで各取引所毎の過去の価格データを取得する事ができたら夢の様な話ではないでしょうか?
そんな夢の様なサービスが提供されています。優秀な方たちがそんなサービスを既に作っているのです。
コンテンツ
cryptowatch APIの使い方
今回紹介するのはそんな夢を実現してくれるAPIの一つが「cryptowatch」です。
※Qiitaでかなり詳しく紹介されている記事を見つけました。「https://qiita.com/KyoHeyyy/items/73e3201aa091a04ff248」
使い方は一度覚えればいたって簡単です。例えプログラミングができなくともこのAPIを使用する事ができるのです。このAPIではアセット情報、通貨ペアの情報などをまとめて取得できます。このAPIの向こう側では、非常に多くの仮想通貨の市場データを抱えているのですが、まずは必要な部分だけの情報を取得できれば十分です。
論より行動。まずはこの便利すぎるAPIを使ってみましょう。
cryptowatchからローソク足の情報を取得しよう
ではcryptowatch APIを使って仮想通貨のローソク足を作る上で必要な情報を取得してみます。
APIからデータを取得する場合は、必要なデータをもらうためのリクエストを投げる必要があります。これを下さいと問いかけているイメージです。
ローソク足に必要なリクエストの形式は以下となります。
「markets/[取引所]/[通貨ペア]/ohlc」
※最初は意味が分からないかもしれませんが、ルールは簡単です。詳細は後述します。
例えばWEBサイトを閲覧する場合も実はリクエストを投げています。SNSを使う場合も同様です。必要なデータを取得するためのリクエストを投げる。そして結果が返ってくる。これはWEBサイトと全く同じです。
実際にリクエストを投げでみましょう
まずは実際にサンプルのリクエストをして結果を見てみましょう。
■サンプルのリクエスト
https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc
どうでしょうか?以下の様に文字や数字が並んだデータが取得できましたよね。言ってみればこれだけでAPIを使いこなせた訳です。
リクエストは何を意味している?
内容の詳細については後で述べるとして、まずはリクエスト形式の意味を掴んでおきましょう。
■リクエストの意味
・markes ・・・ この部分は固定です。そのままmarketsと入力してOK
・[取引所] ・・・ この部分に取引所の名称を入力します。例えば、日本でメジャーなbitflyerの情報を取得したければ、「bitflyer」を指定します。
・[通貨ペア] ・・・ 通貨のペアを指定します。ビットコインと日本円のペアの場合は「btcjpy」を指定します。
OHLCローソク足のデータを取得できます。※デフォルト設定では直近の500件のデータを取得
OHLCとは?
ちなみにOHLCとは、
・OpenPrice (始値)
・HighPrice (高値)
・LowPrice (安値)
・ClosePrice (終値)
を意味しています。トレード経験のある方なら、なじみのあるワードだと思います。※APIでチャートのデータを取得する際には頻出するワードなので覚えておいて下さい。
パラメータを指定
また、このリクエストでは、さらにbefore、after、periodsの3つのパラメータを指定する事が可能です。パラメータを指定する事で必要な情報だけに絞り込んだり、データを集約する事ができます。実際に使う場合には、これらのパラメータを指定する事が多いと思います。
・before ・・・ 指定日時よりも前のデータを取得します。
⇒形式:markets/[取引所]/[通貨ペア]/ohlc?before=[日時]
・after ・・・ 指定日時よりも後のデータを取得します。
⇒形式:markets/[取引所]/[通貨ペア]/ohlc?after=[日時]
・periods ・・・ 指定した秒足のデータを取得します。※1分足、1時間足、日足、それぞれ秒でしていします。
⇒形式:markets/[取引所]/[通貨ペア]/ohlc?periods=[対象とする足(秒)]
periodsの時間指定について
チャート分析を行う人にとっては、最後のperiodsについては結構使う機会が多いと思いますので、もう少し説明を追記します。まずは、1分、1時間、1日といった時間を秒に変換してみましょう。以下が対応表です。
■秒-分時日週の対応表
秒 | 分時日週 |
60 | 1分 |
3600 | 1時間 |
86400 | 1日 |
604800 | 1週 |
※「unixのタイムスタンプ変換」もご参考に(unixや、Linuxを使ったシステム開発でよく使ったな。。。)
もしも日足のデータを取得したい場合は秒に変換してperiods=86400と指定すればOKです。日足を参考にしている方でAPIを使いたい場合は、おそらく何度も出てくる数字です。
※LinuxやUNIXなどを触る方もこの数値は見慣れているかもしれません。1日中、Linux上でツールを稼働させる際などに、実施する時間を秒で指定する事が多いのです。
さて、これでローソク足の情報を取得する事ができました。仮想通貨の各取引所では当然チャートが表示できると思いますが、どの様なサービスであっても、元々はこれとほぼ同じデータを基にしてチャートを描画しているのです。
cryptowatchから取得したローソク足の情報を詳しく分解してみよう
初見であれば、おそらく「訳の分からないデータの集合」に見えるかもしれません。しかし、このデータはプログラマーやシステム側からすると、非常に扱いやすいデータなのです。見方が分かれば、非常にシンプルですし、チャートとして描画する事も難しくありません。
もう少しこのデータを分解して見てみましょう。今回は日足のデータで2018年3月1日以降のデータを取得してみます。
日足データを取得するためのリクエスト
今度のリクエストURLは以下の通りです。
■リクエストURL
https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=86400&after=1519862400
パラメータとして、まずperiodsを指定しています。86400は1日でしたね。つまりこれは日足のデータです。また、afterで指定している1519862400は2018年3月1日の9:00を意味しています。
つまりこれは、3月1日以降の日足データを取得するためのリクエストです。
このリクエストを実行すると、以下の様なリクエスト結果が表示されたはずです。
この様な形で。
APIから取得した結果の日足情報
ではリクエスト結果の先頭の部分を見てみましょう。
1 |
{"result":{"86400":[[1519862400,1140860,1188000,1098770,1104460,451.6083,515504300], |
先頭部分のデータを切り出してみました。
このデータはJSON形式と言って、APIで使用するデータ形式としては非常にメジャーなものです。JSON形式はルールに基づいた入れ子構造になっています。※詳細はまた別途ご紹介します。
まず、先頭の文字”result”は結果のデータだよ。という事を表わしています。
次に”86400″の部分は「日足」を意味しています。
そして、次の”1519862400″は2018年3月1日の9:00を意味しています。
つまり、こちらでリクエストした情報が取得できている事が分かります。
OHCLローソク足の情報
さらに、ローソク足のデータ[1519862400,1140860,1188000,1098770,1104460,451.6083,515504300]の部分も分解しましょう。タイムスタンプは日時に変換する必要があります。
1519862400 ⇒ 2018/03/01 09:00:00
1140860 ⇒ ビットコインの始値 114万860円
1188000 ⇒ ビットコインの高値 118万8000円
1098770 ⇒ ビットコインの安値 109万8770円
1104460 ⇒ ビットコインの終値 110万4460円
451.6083 ⇒ 出来高
を表わしています。
次のデータの固まりを見てみても同じ形式になっているはずです。また、次のデータの先頭1519948800は、2018/03/02 09:00:00を表わしています。
つまり、[]で囲まれたデータが1日分という事が分かります。※日足を指定しているので
この連続したデータを使えば、チャートを表現するのも簡単な気がしませんか?実際に、扱い方が分かればエクセルでグラフを表示するのと同じ位に簡単です。
APIを使ってOHLCローソク足の情報を取得してみて
さて、実際に見てみると思ったよりは簡単だったのではないでしょうか?
指定する取引所や通貨ペアを変更すれば当然他の情報も取得できます。また、1分足、15分足のデータを取得する事もできます。たった1行のリクエストを投げるだけで。
また、ローソク足の情報を取得するというのは、cryptowatchというサービスのほんの一部でしかありません。※本当にすごいAPIです。
ちなみに、数ある金融商品の中でも現在この様なAPIが数多く存在しているのは仮想通貨が圧倒的に多いと感じます。株やFXのトレードを行っている方も大勢いると思いますが、なかなか気軽に扱えるAPIがまだ少ないと感じているのではないでしょうか。
なので、APIを活用していこうと思うのであれば、今は仮想通貨が良いかもしれません。
今回リクエストを投げてみる事で、API、cryptowatchというサービスの素晴らしさ、データ収集の効果、はたまたプログラミングを行う事でいかに効率的に市場データの分析ができるか、が何となく分かっていただけたのではないでしょうか?
これからここで取得したデータを基にして、バックテストを行ったり、トレードルールを決めたりするための分析も行っていきましょう。