from config_execution_api import session_private from config_execution_api import limit_order_basis #from config_ws_connect import ws_public # <- original code websocket method from config_ws_connect import ws_public_get_orderbook # <- new websocket method from func_calcultions import get_trade_details from exceptions import FailedRequestError, InvalidRequestError from requests.exceptions import ConnectionError, Timeout, RequestException from json.decoder import JSONDecodeError # from simplejson.errors import JSONDecodeError # Set leverage def set_leverage(ticker): # Setting the leverage try: leverage_set = session_private.cross_isolated_margin_switch( symbol=ticker, is_isolated=True, buy_leverage=1, sell_leverage=1 ) # except (ConnectionError, Timeout, RequestException) as e: # print(e) except Exception as e: pass # Return return # Place limit or market order def place_order(ticker, price, quantity, direction, stop_loss): exception = True try: # Set variables if direction == "Long": side = "Buy" else: side = "Sell" # Place limit order # if limit_order_basis: # order = session_private.place_active_order( # symbol=ticker, # side=side, # order_type="Limit", # qty=quantity, # price=price, # time_in_force="PostOnly", # reduce_only=False, # close_on_trigger=False, # stop_loss=stop_loss # ) # else: # order = session_private.place_active_order( # symbol=ticker, # side=side, # order_type="Market", # qty=quantity, # time_in_force="GoodTillCancel", # reduce_only=False, # close_on_trigger=False, # stop_loss=stop_loss # ) # Place limit order - WITHOUT stop loss which will be managed by close profit/loss in main function if limit_order_basis: order = session_private.place_active_order( symbol=ticker, side=side, order_type="Limit", qty=quantity, price=price, time_in_force="PostOnly", reduce_only=False, close_on_trigger=False ) else: order = session_private.place_active_order( symbol=ticker, side=side, order_type="Market", qty=quantity, time_in_force="GoodTillCancel", reduce_only=False, close_on_trigger=False ) print("\n") print('-------------------------------------------------------------------') print("Place Order") print(order) print('-------------------------------------------------------------------') print("\n") exception = False # Return order return (order,exception) except (ConnectionError, Timeout, RequestException, JSONDecodeError, FailedRequestError, InvalidRequestError) as e: print(e) return ({},exception) # Initialise execution def initialise_order_execution(ticker, direction, capital): exception = True exception1 = False try: #orderbook = ws_public.fetch(f"orderBookL2_25.{ticker}") # <- original code websocket method orderbook = ws_public_get_orderbook(ticker) # <- new websocket method if orderbook: mid_price, stop_loss, quantity = get_trade_details(orderbook, direction, capital) if quantity > 0: order,exception1 = place_order(ticker, mid_price, quantity, direction, stop_loss) print("\n") print('-------------------------------------------------------------------') print("Initialise Order Execution") print(f"order: {order} exception1: {exception1}") print('-------------------------------------------------------------------') print("\n") if exception1: return ("","",0,exception) if "result" in order.keys(): if "order_id" in order["result"] and len(order)>0: exception = False print("order status: ", order["result"]["order_id"],order["result"]["created_time"],quantity,exception) return (order["result"]["order_id"],order["result"]["created_time"],quantity,exception) return ("","",0,exception) except (ConnectionError, Timeout, RequestException, JSONDecodeError, FailedRequestError, InvalidRequestError) as e: return ("","",0,exception)