前回はBinanceの公式APIを活用した統計情報の取得方法について扱いましたが、今回はAPIを使った買い注文の出し方、売り注文の出し方の基本について扱ってみたいと思います。

なお、Binanceの公式APIの導入方法については過去記事「Binance公式APIを導入して仮想通貨(暗号資産)の統計情報を取得してみよう!」で扱っていますので、ぜひ参考にしてみてください。

スポンサーリンク




目次

  1. 買い注文の方法
  2. 売り注文の方法
  3. まとめ

1.買い注文の方法

それでは早速、買い注文について考えてみたいと思います。まずはライブラリをインポートしましょう。

from binance.client import Client

次いでAPIにアクセスします。

# BinanceAPIにアクセス
client = Client('あなたのAPIキー', 'あなたのシークレットキー')

APIにアクセスしたら、現在の資産状況を取得してみましょう。ここではUSDT建の注文を扱います。引数に「USDT」を渡して残高(free)を取得します。なぜこうするかというと、買い注文を出す前に購入する通貨の購入量を計算する必要があるためです。残高は浮動小数点(float)で帰ってきます。

# 資産情報取得
basis = client.get_asset_balance(asset='USDT')
basis_free = float(basis['free'])

今度は、購入対象の現在の価格(lastPrice)を取得します。下記では購入対象が「BAT」になっています。ここには取得したい通貨のペアのティッカーシンボル(ティッカーコード)を渡してやります。このように通貨ペアは通貨のティッカーシンボルと基軸通貨のティッカーシンボルの組み合わせとなっています。USDT建のBATは「BATUSDT」で、ビットコイン建は「BATBTC」となります。

# 通貨の最新の価格(lastPrice)を取得
ticker = client.get_ticker(symbol='BATUSDT')
last_price = float(ticker['lastPrice'])

最後に買い注文を出します。注文方法は大きく分けて成行注文指値注文の二つがあります。今回は成行注文で行ってみたいと思います。

# 買い注文(成行注文)
buy_quantity = int(basis_free / last_price * 0.99)
buy_order = client.order_market_buy(symbol=PAIR_SYMBOL, quantity=buy_quantity)
buy_asset = round(float(buy_order['executedQty']) * last_price, 8)

1行目で注文量を計算しています。買い注文には手数料0.1%が掛かるため、少なくともその金額を差し引いた金額にしないと注文できません。ここではほぼ残高全額の99%を使って注文を出しています。

2行目で買い注文を実際に出しています。注文には通貨ペアの文字列と、計算した注文量をAPIの関数に渡してやります。

3行目では、買った分量に現在の価格を掛けて現在の基軸通貨ベースの金額(8桁のfloat)を算出しています。

成行注文、指値注文とは?

ところで「成行注文」とはどんな注文のことでしょうか?ご存知でない方のために簡単に説明すると、成行注文とはその時の価格で注文することです。この注文方法の特徴ですが、時価で買うのですぐに注文が約定(やくじょう)されます。つまり買いが成立します。

また「指値注文」という注文もあります。こちらは価格をこちらで決める注文のことです。価格はこちらの希望価格で注文を出すので同額の売値がなければ、そのまま注文が保留となります。つまり、同額の売値が出てきた時点ではじめて買いが成立する注文のことです。

どちらを使うかは目的に応じて使い分ける必要がありますが、今回はとりあえず買い注文を出すということで成行注文としてみました。下記に買い注文のサンプルプログラムを示します。

買い注文サンプル

# -*- coding: utf-8 -*-
from binance.client import Client
import datetime

# ---------- 設定 ----------

# APIキー、シークレットキー設定
API_KEY = 'あなたのAPIキー'
SERCRET_KEY = 'あなたのシークレットキー'

# 購入通貨
PAIR_SYMBOL = 'BATUSDT'

# ---------- 処理開始 ----------

# 日時取得
dt = datetime.datetime.now()

# BinanceAPIにアクセス
client = Client(API_KEY, SERCRET_KEY)

# 資産情報取得
basis = client.get_asset_balance(asset='USDT')
basis_free = float(basis['free'])

# 通貨の最新の価格(lastPrice)を取得
ticker = client.get_ticker(symbol=PAIR_SYMBOL)
last_price = float(ticker['lastPrice'])

# 買い注文(成行注文)
buy_quantity = int(basis_free / last_price * 0.99)
buy_order = client.order_market_buy(symbol=PAIR_SYMBOL, quantity=buy_quantity)
buy_asset = round(float(buy_order['executedQty']) * last_price, 8)

# ステータス表示
print('----------------------------------------')
print(str(dt.strftime('%Y/%m/%d %H:%M')))
print('----------------------------------------')
print(PAIR_SYMBOL)
print('----------------------------------------')
print('last_price: ' + str(last_price))
print('buy_asset: ' + str(buy_asset))
print('----------------------------------------')

2.売り注文の方法

今度は売り注文です。APIにアクセスするところまでは買い注文と同じです。資産状況を取得するところがちょっと違っていますが、今回はさっき買ったBATの残高を確認するので、PAIR_SYMBOLから「USDT」を取った状態、つまり文字列「BAT」を関数に渡します。

すると残高(free)が帰ってきます。

# 資産情報取得
currency_symbol = PAIR_SYMBOL.replace('USDT', '')
currency = client.get_asset_balance(asset=currency_symbol)
currency_free = int(float(currency['free']))

そして売り注文を出します。買い注文では通貨ペアの状態で出すので、そのままPAIR_SYMBOLを渡しています。今回の売り注文では全額を売るのでcurrency_freeをそのまま渡しています。

# 売り注文(成行注文)
sell_order = client.order_market_sell(symbol=PAIR_SYMBOL, quantity=currency_free)
now_asset = float(sell_order['cummulativeQuoteQty'])

では、まとめとして売り注文のサンプルプログラムを下記に示します。

売り注文サンプル

# -*- coding: utf-8 -*-
from binance.client import Client
import datetime

# ---------- 設定 ----------

# APIキー、シークレットキー設定
API_KEY = 'あなたのAPIキー'
SERCRET_KEY = 'あなたのシークレットキー'

# 通貨設定
PAIR_SYMBOL = 'BATUSDT'

# ---------- 処理開始 ----------

# 日時取得
dt = datetime.datetime.now()

# BinanceAPIにアクセス
client = Client(API_KEY, SERCRET_KEY)

# 資産情報取得
currency_symbol = PAIR_SYMBOL.replace('USDT', '')
currency = client.get_asset_balance(asset=currency_symbol)
currency_free = int(float(currency['free']))

# 売り注文(成行注文)
sell_order = client.order_market_sell(symbol=PAIR_SYMBOL, quantity=currency_free)
now_asset = float(sell_order['cummulativeQuoteQty'])

# ステータス表示
print('----------------------------------------')
print(str(dt.strftime('%Y/%m/%d %H:%M')))
print('----------------------------------------')
print('USDT')
print('----------------------------------------')
print('now_asset: ' + str(now_asset))
print('----------------------------------------')

まとめ

今回はシンプルに成行注文で買い注文、売り注文を出す方法を扱ってみました。Binanceの公式APIを使えば、こんなに簡単に売り買いの注文を出すことができるんですね!前回扱った「Binance公式APIを導入して仮想通貨(暗号資産)の統計情報を取得してみよう!」と組み合わせれば、もっと実践的な売買プログラムを組めそうです。

例えば、特定の通貨の価格のしきい値を決めて、この金額になったら買い注文、この金額になったら売り注文のような、シンプルなシステムトレード・プログラムならすぐにでも組めそうです!

一時見られた情熱的な仮想通貨(暗号資産)ブームは去りましたが、自動で売買プログラムを組めば「あれ、気がついたらこんなに増えてた?」みたいなことになるかもしれませんよ!…ならないかもしれませんけど(笑)