bitbankでAPIを使った損切り(ストップ成行)注文(Python用コード)

  • 公開日:2018/07/23
  • 更新日:2018/10/19
  • 投稿者:n bit

残念ながらビットバンクでは標準の注文システムで損切り(ストップ成行)注文に対応していません。そこでAPIを使った損切り注文のシステムをPythonで記述しました。損切り注文の入れ方とPythonコードを紹介します。

  • Python
  • ブロックチェーン
  • 仮想通貨
  • 取引所
  • bitbank

この記事は約 分で読めます。(文字)

bitbankでAPIを使った損切り(ストップ成行)注文

ビットバンクに標準で用意されている注文方法は2種類しかありません。通常の『指値注文』と『成行注文』のみです。

仮想通貨に限らず投資において最も大事な事は投資の源泉となる資産をしっかりと守ること。そのためには損切り(ストップ成行)注文が必要不可欠となりますが残念ながら標準では用意されていません

代わりにビットバンクではAPIが用意されていますので、そちらのAPIから損切り注文をセットしておくことになります。

ビットバンクの公式APIの基本的な解説に関しては下記のページをご覧ください。

こちらのページで使用したビットバンクAPI用の基本的なPythonコードをベースにして損切り注文用のコードを作っていきます。

損切り(ストップ成行)注文用 Pythonコードサンプル

損切りを行うためには3つの機能が必要となります。

  • 1つ目の機能は現在の価格を取得すること。
  • 2つ目の機能は現在の価格を損切り用の価格と比較して損切り価格に到達しているか判断すること。
  • 3つ目の機能は損切り価格に到達しているようであれば損切りをの注文を発注すること。

1つ目と2つ目の機能に関してはビットバンクで標準に用意されていますので、自分でコードを書くのは2つ目の現在の価格と損切り価格を比較する部分が主な記述部分です。

現在の市場価格を取得する

現在の市場価格を取得するコードは公式API解説ページでも記述していたget_ticker関数を使って取得できます。get_ticker関数の記述と呼び出し方法は以下の通りです。get_ticker関数の引数には価格を取得したい通貨ペアを指定します。今回のPythonサンプルコードは『BTC/JPY』用です。

import python_bitbankcc


class BitBankPubAPI:

def __init__(self):
self.pub = python_bitbankcc.public()

def get_ticker(self, pair):
try:
value = self.pub.get_ticker(pair)
return value
except Exception as e:
return None

def main():
pub_set = BitBankPubAPI()

ticker = pub_set.get_ticker('btc_jpy')
last_price = float(ticker['last'])

if __name__ == '__main__':
main()

現在の価格を損切り用の価格と比較して損切り価格に到達しているか判断する

現在の価格と損切り価格にセットした値を比較して条件分岐をさせますのでif文を利用します。if文の記述方法に自信がない方はこちらのページでif文について学習出来ます。

今回は損切り価格を850,000円でセットした場合で考えてみましょう。現在価格は先ほど取得した値をlast_price変数に代入していますので、last_price変数と損切り価格でセットした850,000円を比較してif文で分岐させるだけです。

if last_price <= 850000:

損切り(ストップ成行)注文を発注する

損切りの注文にはorder関数を利用します。order関数の引数には通貨ペア、注文価格、注文の数量、買いor売り、指値or成行を指定します。

『BTC/JPY』の損切り注文の場合、引数の値は下記のような指定になります。

  • pair:btc_jpy
  • price:一応現在価格(今回は成行注文のため基本的にはいくらでもOK)
  • amount:注文の数量
  • side:sell(売り)
  • order_type:market(成行)

ここで1つだけ問題になるのは注文の数量です。現在持っているポジションの数量を事前に取得しておく必要があります。

ポジションの数量を取得する方法は公式APIの基本解説ページで利用したget_asset関数から取得することができます。

Pythonのサンプルコードは下記のようになります。

import python_bitbankcc


class BitBankPrvAPI:

def __init__(self):
API_KEY = 'BITBANK_API_KEY'
API_SECRET = 'BITBANK_API_SECRET'
self.prv = python_bitbankcc.private(API_KEY, API_SECRET)

def get_asset(self):
try:
value = self.prv.get_asset()
return value
except Exception as e:
return None

def order(self, pair, price, amount, side, order_type):
try:
value = self.prv.order(pair, price, amount, side, order_type)
return value
except Exception as e:
return None

def main():
prv_set = BitBankPrvAPI()

ticker = pub_set.get_ticker('btc_jpy')
last_price = float(ticker['last'])

asset_dict = prv_set.get_asset()
for asset in asset_dict['assets']:
if asset['asset'] == 'btc':
bace_currency_ammount = float(asset['free_amount'])

price = last_price
amount = bace_currency_ammount
side = 'sell'
order_type = 'market'
prv_set.order(pair, price, amount, side, order_type)

if __name__ == '__main__':
main()

Pythonサンプルコード完成形

ここまでの流れを1つのPythonコードにまとめると下記のようになります。

import python_bitbankcc

import time

class BitBankPubAPI:

def __init__(self):
self.pub = python_bitbankcc.public()

def get_ticker(self, pair):
try:
value = self.pub.get_ticker(pair)
return value
except Exception as e:
return None

class BitBankPrvAPI:

def __init__(self):
API_KEY = 'BITBANK_API_KEY'
API_SECRET = 'BITBANK_API_SECRET'
self.prv = python_bitbankcc.private(API_KEY, API_SECRET)

def get_asset(self):
try:
value = self.prv.get_asset()
return value
except Exception as e:
return None

def order(self, pair, price, amount, side, order_type):
try:
value = self.prv.order(pair, price, amount, side, order_type)
return value
except Exception as e:
return None

def main():
pub_set = BitBankPubAPI()
prv_set = BitBankPrvAPI()

while True:
ticker = pub_set.get_ticker('btc_jpy')
last_price = float(ticker['last'])

asset_dict = prv_set.get_asset()
for asset in asset_dict['assets']:
if asset['asset'] == 'btc':
bace_currency_ammount = float(asset['free_amount'])

if last_price <= 850000:
price = last_price
amount = bace_currency_ammount
side = 'sell'
order_type = 'market'
prv_set.order(pair, price, amount, side, order_type)

break

time.sleep(5)

if __name__ == '__main__':
main()

現在価格を取得し損切り価格と比較して価格判定に引っかかるようであれば損切り注文発注する流れをwhile文で無限ループにしています。sleepを利用して5秒間隔でループを繰り返すようになっています。損切り(ストップ成行)注文が発注されましたらbreakでループを抜けるようになっています。

APIに負荷がかかり凍結される可能性がありますのでsleepを使わずwhile文で無限ループするのはやめておきましょう。

while文の使い方がわからない方はこちらのページで学習できます。

今日のdot

今回は注文システムには必要不可欠となる損切り(ストップ成行)注文をビットバンクの公式APIを利用して発注できるようにしました。理解しやすいように基本的な構造部分のみをまとめていますので後は必要に応じて機能を付与したり、自分で利用しやすいように改変してください。

しかし、損切り注文は標準の注文システムで出来るようにしておいてほしいものですね。私は割と頻度が高く利用している取引所ですので残念です。

▲ ページの先頭へ戻る

このページの目次

目次