soy-curd's blog

The blog is written about maebashi or sake or beer or program. [https://twitter.com/soycurd1]

実践Pythonビットコイン売買プログラミング その2

第4章 ビットコインの売買をプログラムしてみよう

セットアップ

長い前準備でしたが、それではPythonを用いたプログラミングを始めましょう。

まずは、Python3.5の実行環境を用意してください。筆者はMac OSXにて実行しました。

coincheckは、api越しにビットコインの売買ができるようにapiを公開しています(https://coincheck.com/ja/documents/exchange/api)。 取引所APIは、認証の不要なPublic APIと、認証に必要なPrivate APIが用意されています。 Private APIを利用するには、APIキーページ(https://coincheck.com/ja/api_settings)にて、アクセスキーとシークレットキーを作成する必要があります。これらの情報を用いると決済等の機能が外部から可能になってしまうので、絶対に外部に漏らしてはいけません。また、誤動作を防いだり、外部にキーが漏れた場合に影響範囲を狭くしたりするため、編集リンクからAPIパーミッションを設定することができます。ここでは、自分が使う最低限の機能のみを有効にしておくべきです。

まずは、実行環境にPython用のcoincheck apiラッパーをインストールしましょう。

pip install coincheck

そして、Pythonスクリプトファイルを作成し、以下のように記述してください。

from coincheck import market

m = market.Market()
result = m.ticker()
print(result)

これを実行すると、

{'ask': 179809, 'volume': '25692.25624239',
'timestamp': 1493995535, 'bid': 179711,
'last': 179711, 'high': 186762, 'low': 163384}

というような出力が得られたかと思います。これはティッカー、つまり取引時間中のビットコインの値段を表しています。この得られた値について、coincheckのドキュメントでは以下のように説明されています。

last 最後の取引の価格

bid 現在の買い注文の最高価格

ask 現在の売り注文の最安価格

high 24時間での最高取引価格

low 24時間での最安取引価格

volume 24時間での取引量

timestamp 現在の時刻

例えば、askに注目してみましょう。この値は、179809でした。この単位は円なので、「1BTCを179809円で売りたい人がいて、その値段は全ての売りたい人の中で最安値である」ということです。つまり私たちが、179809円以上の値段で買い注文を入れたら、(売り注文の数量を超えない分は)179809円で決済させることができるということです。

常に市場のティッカーは変動しているため、定期的にこれを監視することで、その動きを知ることができます。例えばデイトレードなどで直近の値動きが知りたい場合は、bid(買い)とadk(売り)を知りたくなるでしょう。しかし、週に1、2度売買をするのみだったら、highとlowのみを知れれば良いかもしれません。暴落と暴騰のみ知りたいなら、volumeが急増したタイミングだけアラートするというやりかたも考えられます。

以下では単純に、「売値がある一定の値段になったら買い注文を入れる」というプログラムを書いてみます。

売買

coincheckにおいて、取引を行うAPIはPrivate APIなので、アクセスキーとシークレットキーを使用する必要があります。以下のプログラムにおいて、access_keyとsecret_keyの箇所は実行前にあらかじめ編集しておいてください。

from coincheck import market, order
import time

m = market.Market()
o = order.Order(
    access_key="your access key",
    secret_key="your secret key"
)

rate = 177466  # 買いたい額 ----(1)

while True:
    ticker = m.ticker()
    ask = ticker["ask"]

    # 売値が基準値を下回ったら買い
    print("ask: {}, rate: {}".format(ask, rate))
    
    # 売値が基準値を上回っている場合はスリープして待つ
    if ask >= rate:  ----(2)
        time.sleep(60)  # 60秒スリープ
        continue  # ループの最初に戻る

    result = o.buy_btc_jpy(rate=rate, amount=0.005)  # ----(3)
    if "error" in result.keys():
        print("注文が失敗しました: " + result["error"])
    else:
        print(str(rate) + "yen買い注文しました")

    break  # 注文終了

このプログラムでは、(1)において指定した額を、whileループの中の(2)でチェックしています。売値が(1)を上回っている場合、その値段では買えないのでループの最初に戻ります。売値が(1)を下回っている場合、その値段で買える可能性があるので注文を出します(4)。このようにして、売値がある一定の値段になったら買い注文をプログラムを記述することができます。

なお、(3)において、買値を指定する指値注文をしているため、実際には注文が成立しない場合があります。それが嫌な場合は、rateを指定しない成り行き注文にしてください。その時点での最低額の値段で買うことができます。ただし、rateを指定しないため予想とは異なる値で売買が成立することもあるので、注意してください。

おわりに

上のプログラムは単に指値注文をした場合とほとんど同じ挙動を示しますが、注文タイミングを制御しているため、大量に購入することをあまり他の参加者に知られたくない場合に有効かもしれません。また、制御を工夫すれば、チャートに応じて逆指値レートを上げ下げしたり、注文量を変更したりすることもできるでしょう。効率よくビットコインを売買するプログラムを作成すれば、自分の資産を増やすことも夢ではありません(もちろん、値動きによっては減ってしまうかもしれませんが)。

この記事が読者のビットコイン生活の糧となりましたら幸いです。

簡単安心!ビットコイン取引所 coincheck

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin