Binance をPythonで操作。
自動売買bot作成でよく使ったものの備忘録。
勉強しながら書いたもので、コードは汚いかもです。
指摘などしていただけると勉強になります。
update 2019/09/06バイナンスの手数料の体系がかわりました
下のリンクからアカウントを作ると10%の割引が受けられます。
BNBを使用して手数料を払えばさらに25%割引になります。
取引所のAPIを使うのにpythonでBinanceでの使用に特化した
python-binanceというモジュールを使用しています。
python-binanceは基本的には全てこのサイトを見ればよいです。
CCXTというモジュールもありますが、
このnoteでは使っていません。
CCXTは数多くの取引所で使用できるモジュールです。
今後複数の取引所を使用する場合はこちらを使用するのが
良いかもしれません。
対応していない注文方法などもあるようなので
取引所に特化したものを使うメリットもあります。
--------------------------------------------------------------
2019.8.15にBAINANCEのAPIのアップデートがありました。OCO注文がAPIから可能になったようです。未検証。
モジュール
pip install python-binance #これでモジュールpython-binanceをインストール
from binance.client import Client
from binance.enums import *
from binance.exceptions import *
APIを入れる
client = Client(api_key, api_secret)
#Binanceで作ったAPIを入れる。
価格の取得
ticker = client.get_ticker(symbol='BTCUSDT')
last = ticker['lastPrice']
bidPrice = ticker['bidPrice']
askPrice = ticker['askPrice']
残高の取得
my_BTC_balance = client.get_asset_balance(asset= BTC)
free_BTC = my_BTC_balance['free'] #使用可能な量
locked_BTC = my_BTC_balance['locked'] #使用中の量
成り行き注文
order = client.order_market_buy(
symbol='BNBUSD',
quantity=1)
#通貨を変数にするなら
coin_R = 'USDT'
order = client.order_market_buy(
symbol='BNB'+coin_R,
quantity=1)
指値注文,iceberg注文
#テストオーダー
order = client.create_test_order(
symbol = pair,
side = SIDE_SELL,#or SIDE_BUY
type = ORDER_TYPE_LIMIT,#指値
timeInForce = TIME_IN_FORCE_GTC,
quantity = str(sell_Qty),
price = str(sell_price))
#リアル
order = client.create_order(
symbol = pair,
side = SIDE_SELL,#or SIDE_BUY
type = ORDER_TYPE_LIMIT,
timeInForce = TIME_IN_FORCE_GTC,
quantity = str(sell_Qty),
price = str(sell_price))
#iceberg リアル
order = client.create_order(
symbol = pair,
side = SIDE_SELL,
type = ORDER_TYPE_LIMIT,
timeInForce = TIME_IN_FORCE_GTC,
quantity = str(sell_Qty),
icebergQty = str(iceberg_Qty),
#これだけ最初に注文が入る。約定したら、quantityを最大として、順次追加。
price = str(sell_price))
ローソク足を取得
# 前日から現在までの1 minute klinesを取得
klines = client.get_historical_klines("BNBBTC", Client.KLINE_INTERVAL_1MINUTE, "1 day ago UTC")
# klineの2017年12月のデータを取得
klines = client.get_historical_klines("ETHBTC", Client.KLINE_INTERVAL_30MINUTE, "1 Dec, 2017", "1 Jan, 2018")
# 上場以来のweekly klinesを取得
klines = client.get_historical_klines("NEOBTC", KLINE_INTERVAL_1WEEK, "1 Jan, 2017")
klines_30min = client.get_klines(symbol=pair, interval=Client.KLINE_INTERVAL_30MINUTE,limit=10)
klines_4h = client.get_klines(symbol=pair, interval=Client.KLINE_INTERVAL_4HOUR,limit=10)
klines_6h = client.get_klines(symbol=pair, interval=Client.KLINE_INTERVAL_6HOUR,limit=10)#6時間足を4本取得
kline_1H = klines_1H[-1] #まだ確定していない直前の一時間足
kline_2H = klines_1H[0] #直前の1時間前から2時間前の一時間足
kline_3H = klines_1H[1] #直前の2時間前から3時間前の一時間足
time = kline_1H[0]#open time
open = kline_1H[1]
high = kline_1H[2]
low = kline_1H[3]
close = kline_1H[4]
volume =kline_1H[5]
c_time =kline_1H[6]#close time
q_volume =kline_1H[7]#Quote asset volume(amount)
KLINE_INTERVAL_1MINUTE = '1m'
KLINE_INTERVAL_2MINUTE = '3m'
KLINE_INTERVAL_5MINUTE = '5m'
KLINE_INTERVAL_15MINUTE = '15m'
KLINE_INTERVAL_30MINUTE = '30m'
KLINE_INTERVAL_1HOUR = '1h'
KLINE_INTERVAL_2HOUR = '2h'
KLINE_INTERVAL_4HOUR = '4h'
KLINE_INTERVAL_6HOUR = '6h'
KLINE_INTERVAL_8HOUR = '8h'
KLINE_INTERVAL_12HOUR = '12h'
KLINE_INTERVAL_1DAY = '1d'
KLINE_INTERVAL_3DAY = '3d'
KLINE_INTERVAL_1WEEK = '1w'
KLINE_INTERVAL_1MONTH = '1M'
オーダーIDを取得
open_orders = client.get_open_orders(symbol='BTCUSDT')#オーダーIDを取得
open_order_ID_0 = open_orders[0]["orderId"]#一番古いオーダーを選択
オーダーキャンセル。
client.cancel_order(
symbol=pair,
orderId=ここにオーダーIDを入れる)
その他自力でできるようになったこと
IFDOCO注文 トレイリングストップ注文
ローソク足を取得してSMAの作成
ローソク足を取得してEMAの作成
ローソク足を取得してWMAの作成
手数料用のBNBを自動補充
三角取引(常に微損になる)
仮想通貨の銘柄同士の相関関係を算出
自動である通貨ペアの全てのオーダーをキャンセルする
コーヒー飲みます。ありがとうございます。