cryptowatch APIでJSON形式のOHLCデータを取得して内容を分析する部分まで解説しました。

BOT作成のために、これからやらなければならない事は色々とあります。実際にPythonで本格的なBOTを作る前に、まずは練習でOHLCデータを取得するための関数を作っておきましょう。

そんなの分かる!という方は今回の内容は飛ばしていただいてもOKです。既にPythonでバリバリプログラミングができるという場合であっても、内容の再確認という意味で読んでいたでいても、もちろんOKです。

システムトレードで使用するBOTの動きを理解しておこう

これから仮想通貨等のトレード用BOTを作成する上で、全体的な処理をざっくりと把握しておきましょう。細かい部分はまた別途ご紹介します。

仮想通貨の自動売買をする方法の一つとして、

1)一定時間(例えば1時間)毎にOHLCのローソク足情報を取得

2)売買シグナルが出ているかどうかを確認する。

3)シグナルが出ている様であれば、売買命令を出す。

といった方法(処理)があります。

この時、1)の一定時間毎にOHLCのローソク足情報を取得する処理が必要になります。これまでにお伝えした様にcryptowatch APIにリクエストを投げて、必要なOHLCを取得すればOKでしょ?と思うかもしれません。

ただ、リクエストのパラメータを覚えているでしょうか?

パラメータでは、

・before

・after

・periods

を指定できましたよね。

これらはタイムスタンプで指定する必要があります。ですから、もしもPythonのプログラムでこのリクエストを実行するのであれば、一度タイムスタンプに変換をする必要があります。

また、取得したリクエスト結果の中から、自分にとって必要な情報だけに絞り込みたいといった事もあるかもしれません。

これらの処理は毎回共通で行う処理です。この様な共通の処理は関数化しておくと便利です。あとは共通関数を呼べは良いだけです。

BOT作成に必要な関数とは?

このサイトをご覧になられている方は、プログラミングで言うところの関数の意味はご存じだと思います。

関数は簡単にいうと「処理をまとめたもの」として覚えておけば良いと思います。関数が便利なのは関数の中身の処理を知らなくとも使いこなせるという点です。

数学の世界でも公式を覚えておけば難しい問題を解くことができます。例え難しい公式の成り立ちを知らなくとも、公式さえあれば答えが出るのと同じ事です。

cryptowatch APIも関数と考えると分かりやすいかもしれません。cryptowatch APIにリクエストした後で、cryptowatch側のサーバでどの様な処理をしているかは、こちらでは分かりません。でも必要な情報は返却されます。

いずれにしても、関数を使いこなせる様になるとプログラミングがスムーズになるし、ソースが非常に見やすくなります。ぜひここで使い方も覚えておきましょう。

Pythonによる関数作成

では実際にPythonを使って関数を作成してみたいと思います。

まずはOHLCを取得するリクエストのおさらい

関数を作成する前に、cryptowatch APIからOHLCのローソク足データを取得する方法をおさらいしておきましょう。

■リクエストURL

[https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=86400&after=1519862400]

基本的にはPythonのコードの中でこのリクエストを発行すればOKです。そしてPythonの処理によって、このデータを分かりやすいものに加工することも簡単です。

今回のテーマであるPythonの関数によって、このOHLCのローソク足データをまずは取得してみましょう。

Pythonで関数化をしてみる

では実際にPythonで専用の関数を作成してみます。今回はシンプルな方法でコードを書いていきたいと思います。

Pythonで関数化をする場合は、「def」を先頭に付けて「関数名」を作成してあげればOKです。

例えば、以下の様な関数を作成して実行してみましょう。

とりあえず関数化する

まずはこの処理をそのまま関数化してみましょう。

■Pythonコード

[python]import requests

def get_data():
response = requests.get("https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=86400&after=1519862400")
data = response.json()
print( data["result"][‘86400’][0] )

get_data()[/python]

■実行結果

[1519862400, 1140860, 1188000, 1098770, 1104460, 451.6083, 515504300]

関数に引数を渡す

上記の様にとりあえずは関数化できました。たた、この場合、関数としての意味がありません。やはり引数を渡せたり、返り値を取得できる様にしなければなりません。上記のコードを基に、関数呼び出し時に引数を渡せる様にしてみましょう。

また、リクエスト構文を以下の様に書き換えましょう。こうしておく事で関数化した時にperiodsやafterの値を書き換えやすくなります。

response = requests.get(“https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc”,params = { “periods”:86400,”after”:1519862400})

組み合わせて一つのコードにすると、以下の様になります。日足を表す86400の部分は引数minとして受け取っています。関数の呼び出し元でも86400を代入して設定していますので、結果は全く同じです。

■Pythonコード

[python]import requests

def get_data(min):
response = requests.get("https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc",params = {"periods":min,"after":1519862400})
data = response.json()
return data

r_min = 86400
out_data = get_data(r_min)
print( out_data["result"][str(r_min)][0] )[/python]

■実行結果

[1519862400, 1140860, 1188000, 1098770, 1104460, 451.6083, 515504300]

■コード解説

作成した関数に「分」のパラメータを引数として与えられる様にしました。そして受け取ったデータをjson形式でパースして、関数の戻り値として受け取っています。

あとはこのjson形式のデータから必要なデータを取得して、printしているだけの関数です。

実際はbeforeや、afterの値も関数の外から指定した方が便利な事も多いので、必要に応じてカスタマイズすべきです。

■おまけ:Pythonコードを綺麗にしよう

コーディングというのは綺麗にしようと思うとキリがありません。ただ、なるべくPythonコードとして綺麗なものにしておきましょう。後から見たときに分かりやすいものにする。という事を意識しておく事が大切です。今回ご紹介した関数は決して綺麗な訳ではないですが。。。変数名とか。。。

まとめ

これで今回の目的であるcryptowatch APIからOHLCのローソク足データを取得する関数を作成できました。

そして、その関数を呼び出す事もできました。これからシステムトレードを実践するためにBOTを作成しようと思ったら、関数化は必須です。

関数化というのもやってみると非常に簡単だったと思います。基本的には既にある処理を共通化したり、分かりやすくするためにまとめればOKです。一度関数化をしておけば、コーディングやカスタマイズが非常に早くなります。

BOT作成に限らず、関数はこれから何度も使用する事になるので、ここでしっかりと掴んでおいて下さいね。