101 lines
3.5 KiB
Python
101 lines
3.5 KiB
Python
import libraries.balance_accounts as balance_accounts
|
|
from libraries.wrappers import earn_binance
|
|
from libraries.wrappers import earn_kucoin
|
|
from libraries.wrappers import earn_okx
|
|
from libraries.wrappers import earn_gateio
|
|
from libraries.earner import earner
|
|
from threading import Thread
|
|
import time
|
|
import datetime
|
|
import json
|
|
|
|
|
|
def seconds_to_time(total_seconds: float) -> str:
|
|
'''
|
|
Takes an int or float as an input and it returns a D:HH:MM:SS formatted string.
|
|
|
|
Parameters:
|
|
total_seconds (float): The number of seconds to convert
|
|
|
|
Returns:
|
|
str: The formatted string
|
|
'''
|
|
|
|
time_delta = datetime.timedelta(seconds=total_seconds)
|
|
|
|
hours = time_delta.seconds//3600
|
|
remainder = time_delta.seconds%3600
|
|
minutes = remainder//60
|
|
seconds = remainder%60
|
|
|
|
return f"{time_delta.days}:{hours:02d}:{minutes:02d}:{seconds:02d}"
|
|
|
|
|
|
if __name__=="__main__":
|
|
|
|
version = "2025.01.06"
|
|
start_time = time.time()
|
|
|
|
with open("config.json") as f:
|
|
config = json.load(f)
|
|
|
|
connectors = {"binance": earn_binance.binance_earn(),
|
|
"gateio": earn_gateio.gateio_earn(),
|
|
"kucoin": earn_kucoin.kucoin_earn(),
|
|
"okx": earn_okx.okx_earn()}
|
|
earners = []
|
|
|
|
for item in config["exchanges"]:
|
|
earners.append(earner(connectors[item], config["exchanges"][item]))
|
|
|
|
while True:
|
|
threads = []
|
|
|
|
#Run earners
|
|
for item in earners:
|
|
threads.append(Thread(target=item.run))
|
|
for item in threads:
|
|
item.start()
|
|
for item in threads:
|
|
item.join()
|
|
|
|
#Print status
|
|
print("="*80)
|
|
|
|
subscriptions = []
|
|
redemptions = []
|
|
for item in earners:
|
|
print(item.get_status_string())
|
|
subscriptions.append(item.get_last_subscription())
|
|
redemptions.append(item.get_last_redemption())
|
|
last_subscription = max(subscriptions, key=lambda d: next(iter(d.values())))
|
|
last_subscription_key = next(iter(last_subscription.keys()))
|
|
last_subscription_value = next(iter(last_subscription.values()))
|
|
if last_subscription_value == 0:
|
|
last_subscription_key = "Never"
|
|
last_subscription_value = ""
|
|
else:
|
|
last_subscription_value = datetime.datetime.fromtimestamp(last_subscription_value).strftime('%Y-%m-%d %H:%M:%S')
|
|
last_redemption = max(redemptions, key=lambda d: next(iter(d.values())))
|
|
last_redemption_key = next(iter(last_redemption.keys()))
|
|
last_redemption_value = next(iter(last_redemption.values()))
|
|
if last_redemption_value == 0:
|
|
last_redemption_key = "Never"
|
|
last_redemption_value = ""
|
|
else:
|
|
last_redemption_value = datetime.datetime.fromtimestamp(last_redemption_value).strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
print("-"*80)
|
|
total_on_trading = sum([item.get_trading_balance() for item in earners])
|
|
total_on_earning = sum([item.get_earning_balance() for item in earners])
|
|
print(f"Version {version} | Total funds: {total_on_trading+total_on_earning:.2f} | Total on earn: {total_on_earning:.2f} ({total_on_earning/total_on_trading*100:.2f}%)")
|
|
print(f"Uptime: {seconds_to_time(time.time()-start_time)} | Last subscription: {last_subscription_key} - {last_subscription_value} | Last redemption: {last_redemption_key} - {last_redemption_value}")
|
|
|
|
#Wait for next lap
|
|
time.sleep(config["lap_time"])
|
|
|
|
|
|
|
|
|
|
|