見出し画像

Binance をPythonで操作。

自動売買bot作成でよく使ったものの備忘録。

勉強しながら書いたもので、コードは汚いかもです。
指摘などしていただけると勉強になります。

update 2019/09/06バイナンスの手数料の体系がかわりました

下のリンクからアカウントを作ると10%の割引が受けられます。
BNBを使用して手数料を払えばさらに25%割引になります。

手数料をさらに10%節約する方法

取引所のAPIを使うのにpythonでBinanceでの使用に特化した

python-binanceというモジュールを使用しています。

python-binanceは基本的には全てこのサイトを見ればよいです。

python-binance

CCXTというモジュールもありますが、

このnoteでは使っていません。

CCXTは数多くの取引所で使用できるモジュールです。

今後複数の取引所を使用する場合はこちらを使用するのが
良いかもしれません。

対応していない注文方法などもあるようなので
取引所に特化したものを使うメリットもあります。

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の作成

ATRの取得

手数料用のBNBを自動補充

三角取引(常に微損になる)

仮想通貨の銘柄同士の相関関係を算出

動である通貨ペアの全てのオーダーをキャンセルする



コーヒー飲みます。ありがとうございます。