From 7d5581bfff71e6abe9db00cfa1643ab8cc690ed6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20S=C3=A1nchez?= Date: Wed, 8 Jan 2025 09:22:42 -0300 Subject: [PATCH] subscribing and redeeming --- libraries/earner.py | 43 ++++++++++++++++++++++++++++++++++++++++--- main.py | 8 +++++--- 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/libraries/earner.py b/libraries/earner.py index 738e45a..095e4a7 100644 --- a/libraries/earner.py +++ b/libraries/earner.py @@ -108,8 +108,25 @@ class earner: def subscribe(self,amount): print(f"{str(self.connector)} | Subscribing {amount} {self.currency}") - - if True: + available_product = self.connector.get_available_products(self.currency) + subscription = {} + if available_product["asset"]==self.currency: + #Every exchange has it own subscription method + if str(self.connector) in ["binance","kucoin"]: + subscription = self.connector.subscribe_product(available_product["productId"],amount) + elif str(self.connector)=="gateio": + min_rate = self.connector.get_min_rate(available_product["asset"])["min_rate"] + time.sleep(.5) #For the sake of the API + subscription = self.connector.subscribe_product(available_product["productId"],amount,min_rate) + elif str(self.connector)=="okx": + transfer = self.connector.transfer_to_funding(available_product["asset"],str(amount)) + transfer_state = self.connector.get_transfer_state(transfer["transId"]) + if "Success" in transfer_state: + subscription = self.connector.subscribe_product(available_product["productId"],amount) + else: + print(f"{str(self.connector)} - Transfer of funds failed!") + return 1 + if "Success" in subscription: self.last_subscription_time = time.time() return 0 return 1 @@ -117,7 +134,27 @@ class earner: def redeem(self,amount): print(f"{str(self.connector)} | Redeeming {amount} {self.currency}") - if True: + available_product = self.connector.get_available_products(self.currency) + redemption = {} + if available_product["asset"]==self.currency: + if str(self.connector) in ["binance","gateio"]: + redemption = self.connector.redeem_product(available_product["productId"],amount=amount) + elif str(self.connector)=="kucoin": + position = self.connector.get_position(self.currency) + if "Error" not in position: + redemption = self.connector.redeem_product(position["orderId"],amount=amount) + else: + print(f"{str(self.connector)} - Position not found!") + return 1 + elif str(self.connector)=="okx": + redemption_step = self.connector.redeem_product(self.currency, amount=amount) + if "Success" in redemption_step: + transfer_step = self.connector.transfer_to_trading(self.currency, redemption_step["amount"]) + redemption = self.connector.get_transfer_state(transfer_step["transId"]) + else: + print(f"{str(self.connector)} - Redemption failed!") + return 1 + if "Sucess" in redemption: self.last_redemption_time = time.time() return 0 return 1 diff --git a/main.py b/main.py index b78ab3c..eb4cccb 100644 --- a/main.py +++ b/main.py @@ -12,6 +12,7 @@ import time import datetime import json import sqlite3 +import socket def load_keys_from_db(file_name: str) -> list: @@ -101,7 +102,7 @@ def main(): total_on_trading = sum([item.get_trading_balance() for item in earners]) total_on_earning = sum([item.get_earning_balance() for item in earners]) time_of_day = datetime.datetime.now().strftime('[%Y/%m/%d %H:%M:%S]') - print(f"{time_of_day} | 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"{time_of_day} | Version {version} | Total funds: {total_on_trading+total_on_earning:.2f} | 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}") print(colors.blue+"="*80+colors.white) #Wait for next lap @@ -371,7 +372,7 @@ def get_last_redemption(): @earn_api.route("/get_total_balance", methods=["GET"]) def get_total_balance(): if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - valid_brokers = [str(item.connector) for item in earners] + valid_brokers = [str(item.connector) for item in earners] broker = request.args.get("broker") if broker is None: return jsonify({'Error': 'broker is None'}) @@ -391,11 +392,12 @@ Missing endpoints: def run_API(port): serve(earn_api, host="0.0.0.0", port=port) + #earn_api.run(host="0.0.0.0", port=port) if __name__=="__main__": - version = "2025.01.07" + version = "2025.01.08" start_time = time.time() with open("config.json") as f: