Ich hab nun etwas aufgeräumt und deine Ratschläge beherzigt ... Geht das denn jetzt so?(1)
Code: Alles auswählen
import time
from binance.helpers import round_step_size
from binance.enums import *
from binance import Client
def getStepSize(einfo, symbol):
for s in einfo["symbols"]:
if s["symbol"] == symbol:
for f in s["filters"]:
if f["filterType"] == "LOT_SIZE":
return float(f["stepSize"])
raise Exception("Symbol on einfo not found.")
def get_assets(client, prices):
info = client.get_account()
balances = info["balances"]
assets = []
for b in balances:
f = float(b["free"])
if f != 0:
n = b["asset"]
if n == "NFT" or n == "ETHW":
continue
usdt = 1.0 if n == "USDT" else float(
next(p for p in prices if p["symbol"] == n+"USDT")["price"])
sum1 = f + float(b["locked"])
sum2 = round(usdt * sum1, 2)
assets.append({
"name": n,
"usdt": usdt,
"sum1": sum1,
"sum2": sum2
})
return assets
def sell_overboughts(to_sell_list, sum4, client):
for d in to_sell_list:
symbol = d["name"]+"USDT"
sum = abs(sum4 - d["sum2"])
print(f"Sell {symbol} for {sum} $")
if sum > 10:
amount = round_step_size(sum / d["usdt"], getStepSize(einfo, symbol))
print(client.create_test_order(
symbol=symbol,
side=SIDE_SELL,
type=ORDER_TYPE_MARKET,
quantity=amount))
else:
amount = round_step_size(20 / d["usdt"], getStepSize(einfo, symbol))
print(client.create_test_order(
symbol=symbol,
side=SIDE_SELL,
type=ORDER_TYPE_MARKET,
quantity=amount))
amount = round_step_size((20 - sum) / d["usdt"], getStepSize(einfo, symbol))
print(client.create_test_order(
symbol=symbol,
side=SIDE_BUY,
type=ORDER_TYPE_MARKET,
quantity=amount))
def buy_oversolds(to_buy_list, sum4, client):
for d in to_buy_list:
symbol = d["name"]+"USDT"
sum = abs(sum4 - d["sum2"])
print(f"Buy {symbol} for {sum} $")
if sum > 10:
amount = round_step_size(sum / d["usdt"], getStepSize(einfo, symbol))
print(client.create_test_order(
symbol=symbol,
side=SIDE_BUY,
type=ORDER_TYPE_MARKET,
quantity=amount))
else:
amount = round_step_size(12 / d["usdt"], getStepSize(einfo, symbol))
print(client.create_test_order(
symbol=symbol,
side=SIDE_SELL,
type=ORDER_TYPE_MARKET,
quantity=amount))
amount = round_step_size((12 + sum) / d["usdt"], getStepSize(einfo, symbol))
print(client.create_test_order(
symbol=symbol,
side=SIDE_BUY,
type=ORDER_TYPE_MARKET,
quantity=amount))
client = Client(
"",
"")
einfo = client.get_exchange_info()
prices = client.get_all_tickers()
assets = get_assets(client, prices)
assets = sorted(assets, key=lambda d: d["sum2"], reverse=True)
sum3 = sum(d["sum2"] for d in assets)
sum4 = round(sum3 / 6, 2) - 0.5
print(*assets, sep="\n")
print(sum3, sum4)
to_sell_list = list(filter(lambda d: d["name"] != "USDT" and d["sum2"] > 10 and d["sum2"] >= sum4 and abs(sum4 - d["sum2"]) > 1, assets))
to_buy_list = list(filter(lambda d: d["name"] != "USDT" and d["sum2"] > 10 and d["sum2"] < sum4 and abs(sum4 - d["sum2"]) > 1, assets))
sell_overboughts(to_sell_list, sum4, client)
time.sleep(3) # Sleep for 3 seconds
buy_oversolds(to_buy_list, sum4, client)
Kann ich in Python3 eine "Präprozessordirektive" verwenden (einen Schalter), um einfach zwischen "create_test_order" und "create_order" zu wechseln?
(1): Damit sei gemeint, könnte man den Code nach einem halben Jahr oder nach 5 Jahren noch einfach verstehen?