Binanceに上場予定の通貨が並んだら指定した分の指値を入れてLINEにお知らせするBOT(予定)
相変わらず素人プログラムです。当たり前のようにエラー処理はしていません。あと、今回は損失が発生する場合があるので事前に言っておきます。
使うのは自己責任やで!
ではコードです。テストコードがそのまま残ってますが気にしないでください。使用する通貨をETHに変えれば多分ETH建てにも対応すると思います。あとBNBとか?そこらへんは自分で試してください。あと、使用する通貨が指定残高に足りない場合、持っているBTCで全力買いをします。たとえ10BTCあろうが全力です。くれぐれも間違えないように。指値の単位はサトシです。
6/5 なんとなくエラー処理を追加
#!/usr/bin/python3
# coding: utf-8
import requests
import time
import logging
import logging.handlers
import datetime
from decimal import Decimal, ROUND_DOWN
from binance.client import Client
from binance.exceptions import BinanceAPIException
from binance.enums import *
# BTCで買う場合の値段(現状は300satoshi)
BUY_PRICE = 0.000003
# BUY_PRICE = 0.00008628
# 買うときに使用するBTCの量(現状は0.1BTC)
BUY_AMOUNT = 0.1
# 目的の通貨
P_COIN = 'QKC'
# P_COIN = 'XRP'
# 使用する通貨
U_COIN = 'BTC'
# APIKEY&SECRET
key = ''
secret = ''
# 休止時間
sleeptimes = 5
def log_info():
# logging設定
# ログの出力名を設定
logger = logging.getLogger('binance_chkLog')
# ログレベルの設定
logger.setLevel(10)
# ログの出力形式の設定
formatter = logging.Formatter('%(asctime)s:%(lineno)d:%(levelname)s:%(message)s')
# ログの出力ローテーションハンドル
trh = logging.handlers.TimedRotatingFileHandler(filename='binance_chk.log', when='midnight', backupCount=5)
trh.setLevel(10)
trh.setFormatter(formatter)
logger.addHandler(trh)
# ログのコンソール出力設定
sh = logging.StreamHandler()
logger.addHandler(sh)
sh.setFormatter(formatter)
return logger
# LINEに通知する場合は自分のトークンを入れる
line_notify_token = ''
line_notify_url = 'https://notify-api.line.me/api/notify'
if __name__ == '__main__':
# ログ設定
loggers = log_info()
# クライアント情報取得
client = Client(key, secret)
# クライアントのBTC総量を取得
balance = client.get_asset_balance(asset=U_COIN)
# 取得したBTC総量が設定した買う際に使用するBTC量より少ない場合、取得したBTC総量を設定
if Decimal(balance['free']) < Decimal(BUY_AMOUNT):
loggers.info("設定したBTCの総量が足りません。現在の総量は" + str(balance['free']) + "になります。")
# 後で面倒なのでここで両方ともDecimalへ
BUY_AMOUNT = Decimal(balance['free'])
BUY_PRICE = round(Decimal(BUY_PRICE), 8)
loggers.info("購入に使用するBTCの総量は" + str(BUY_AMOUNT))
loggers.info("購入価格は" + str(BUY_PRICE))
# ペア情報の初期化
info = None
# ペア情報が取得できるまで回す
loggers.info("**************巡回を始めます**************")
try:
while info is None:
loggers.info("**************只今巡回中です**************")
# ペア情報を取得
info = client.get_symbol_info(str(P_COIN) + str(U_COIN))
# ペア情報が取得出来た場合
if info is not None:
# 価格を設定
# BTC量から価格を除算することで総量を決定(小数点以下は四捨五入)
alt_amount = Decimal(BUY_AMOUNT / BUY_PRICE).quantize(Decimal('0'), rounding=ROUND_DOWN)
loggers.info("購入できる総量は" + str(alt_amount) + "になります")
# 買いオーダー処理
order = client.create_order(
symbol=str(P_COIN) + str(U_COIN),
side=SIDE_BUY,
type=ORDER_TYPE_LIMIT,
timeInForce=TIME_IN_FORCE_GTC,
quantity=alt_amount,
price=BUY_PRICE)
# テスト買いオーダー
# order = client.create_test_order(
# symbol=str(P_COIN) + str(U_COIN),
# side=SIDE_BUY,
# type=ORDER_TYPE_LIMIT,
# timeInForce=TIME_IN_FORCE_GTC,
# quantity=alt_amount,
# price=str(BUY_PRICE))
# 以下LINE通知設定
payload = {'message': 'オーダーを送信しました'}
headers = {'Authorization': 'Bearer ' + line_notify_token}
line_notify = requests.post(line_notify_url, data=payload, headers=headers)
loggers.info("オーダーを送信しました")
break
time.sleep(sleeptimes)
except BinanceAPIException as x:
loggers.info(x)
except Exception as e:
loggers.info(e)
この記事が気に入ったらサポートをしてみませんか?