python-binanceを使ってみているのだけれど、かゆいところに手が届かない。
少し関数を作ってみたので共有まで。
# 自分の持っているコイン一覧(BTC除く)をリストで返す関数(遅い)
# >>> get_my_coin_list()
# >>> ['ETH', 'DNT', 'MCO']
g_account = client.get_account()['balances']
def get_my_coin_list ():
lst = []
for bal in g_account:
basset = bal['asset']
bfree = float(bal['free'])
blocked = float(bal['locked'])
ttl = bfree + blocked
if ttl == 0 or basset == 'BTC':
continue
elif ttl < float(client.get_symbol_info(basset+'BTC')['filters'][1]['minQty']):
continue
else:
lst.append(basset)
return lst
# あるコインの現在価格(ティッカー/対BTC)を返す関数
# >>> get_current_price('ETH')
# >>> 0.080845
g_tickers = client.get_all_tickers()
def get_current_price (sym):
return float((i for i in g_tickers if i['symbol'] == sym+'BTC').__next__()['price'])
# あるコインをいくつ自分が持っているかを返す関数
# >>> get_current_amount('ETH')
# >>> {'asset': 'ETH', 'free': '0.47080900', 'locked': '0.00000000'}
g_account = client.get_account()['balances']
def get_current_amount (sym):
return (i for i in g_account if i['asset'] == sym).__next__()
# 全てのコイン(BTCとペアがあるもののみ)を返す関数
# >>> get_all_coin_lst()
# >>> ['ETH', 'LTC', 'BNB', 'NEO', ... (省略)
g_tickers = client.get_all_tickers()
def get_all_coin_list ():
lst = []
for t in g_tickers:
if t['symbol'].endswith('BTC'):
lst.append(t['symbol'][0:-3])
return lst
# 自分の持っているコインの合計(BTC換算)を返す関数
# >>> get_my_asset()
# 0.009220648101
def get_my_asset ():
lst = get_my_coin_list()
ast = 0.0
for l in lst:
a = get_current_amount(l)
ast += (float(a['free']) + float(a['locked'])) * get_current_price(l)
a = get_current_amount('BTC')
ast += (float(a['free']) + float(a['locked']))
return ast
# 持っているコイン全てにストップロス注文を行う関数(ムダが多いのは歴史的経緯)
# >>> stop_loss_orders(0.9)
# 引数の0.9は、現在値の0.9倍にストップロスを入れる、という意味
# >>> Stop-Loss, ETH, 0.07291600, 0.470, 0.03427052
# >>> Stop-Loss, ICN, 0.00011859, 290.000, 0.03439110
g_account = client.get_account()['balances']
def stop_loss_orders (num):
for bal in g_account:
basset = bal['asset']
bfree = float(bal['free'])
blocked = float(bal['locked'])
ttl = bfree + blocked
if ttl == 0 or basset == 'BTC':
continue
elif ttl < float(client.get_symbol_info(basset+'BTC')['filters'][1]['minQty']):
continue
else:
sym = basset
b = bfree
s = client.get_symbol_info(sym+'BTC')
mq = float(s['filters'][1]['minQty'])
mp = float(s['filters'][0]['minPrice'])
i = get_current_price(sym)
qty = round(math.floor(b / mq) * mq, 10)
p = "%.8f" % round(math.floor(float(i) * num / mp) * mp, 10)
o = client.create_order(
symbol = sym+'BTC',
side = SIDE_SELL,
type = ORDER_TYPE_STOP_LOSS_LIMIT,
timeInForce = TIME_IN_FORCE_GTC,
quantity = qty,
price = p,
stopPrice = p)
print('Stop-Loss, {0}, {1:.8f}, {2:.3f}, {3:.8f}'.format(sym, float(p), qty, float(p) * qty))
プログラミングは大学出て以来なので、お行儀悪いところがあればご指摘いただければ幸いです。
基本、「動けば良い」「すごい遅かったチューニング」の発想でやっています。。。
なお、上記関数のご使用はご自身の責任にてお願いします。
2018年5月13日日曜日
登録:
コメントの投稿 (Atom)
python-binanceを使ってみているのだけれど、かゆいところに手が届かない。 少し関数を作ってみたので共有まで。 # 自分の持っているコイン一覧(BTC除く)をリストで返す関数(遅い) # >>> get_my_coin_list() # &...
-
『反脆弱性』を読んでいると、「それはどうだろう」とか「そこは触れてくれないのね」というところがいくつかある。そういったところ触れてみる。思いつくままに。 トップダウンの功罪 『反脆弱性』では、おおよそトップダウンはシステムを脆くする(冗長性を失う)から、ボトムダウンが望まし...
-
難しそうに見える主張でも、結論だけを見てみると至って常識的なことを言っている、ということは良くある。 例えば、ウィトゲンシュタインは「論理的に考えるのは超大事だけど、論理だけじゃダメ。その土台としての感性も大事だよね」だし、ソロスは「先読みをすると、先読みの先読みをされる。結...
-
『反脆弱性』の主張を図を使ってまとめると、下記のようになる。 まず、確率を考える。横軸にある出来事(例えば株で連続で勝った/負けた回数)、縦軸に確率を取る。世間一般の認識では、少し勝ったり少し負けたりすることが一番多くて、極端に勝ったり負けたりはしないことになっ...
0 件のコメント:
コメントを投稿