StatArb / StatBot / BONUS / func_position_info.py
func_position_info.py
Raw
from config_bonus_api import session_private
import requests


# Get position information
def place_market_close_order(ticker, side, size):
    
    exception = True
    try:
        order = session_private.place_active_order(
            symbol=ticker,
            side=side,
            order_type="Market",
            qty=size,
            time_in_force="GoodTillCancel",
            reduce_only=True,
            close_on_trigger=False
        )
        if "result" in order.keys():
            if "order_id" in order["result"]:
                exception = False
                print(order["result"]["order_id"], order["result"]["created_time"],exception)
                return (order["result"]["order_id"], order["result"]["created_time"],exception)
        
    except requests.exceptions.ConnectionError as errc:
        print("Connection error ",errc)
        pass
    except requests.exceptions.ReadTimeout as errr:
        print("Read timeout",errr)
        pass
    except requests.exceptions.RequestException as err:
        print("other errors ",err)
        pass

    return (0,"", exception)

# Get P&L Info
def get_closed_pnl_info(ticker,start_time):

    exception = True
    try:
        pnl = session_private.closed_profit_and_loss(symbol=ticker, start_time=start_time)
        closed_pnl = 0
        if "ret_msg" in pnl.keys():
            if pnl["ret_msg"] == "OK":
                if pnl["result"]["data"] != None:
                    for item in pnl["result"]["data"]:
                        closed_pnl += item["closed_pnl"]
        exception = False
        return (closed_pnl, exception)
    except requests.exceptions.ConnectionError as errc:
        print("Connection error ",errc)
        pass
    except requests.exceptions.ReadTimeout as errr:
        print("Read timeout",errr)
        pass
    except requests.exceptions.RequestException as err:
        print("other errors ",err)
        pass
        
    return (0, exception)


# Get position information
def get_position_info(ticker):
    
    exception = True
    try:
        position = session_private.my_position(symbol=ticker)
        side = 0
        size = ""
        pnl_un = 0
        pos_value = 0
        if "ret_msg" in position.keys():
            if position["ret_msg"] == "OK":
                if len(position["result"]) == 2:
                    if position["result"][0]["size"] > 0:
                        size = position["result"][0]["size"]
                        side = "Buy"
                        pnl_un = position["result"][0]["unrealised_pnl"]
                        pos_value = position["result"][0]["position_value"]
                    else:
                        size = position["result"][1]["size"]
                        side = "Sell"
                        pnl_un = position["result"][1]["unrealised_pnl"]
                        pos_value = position["result"][1]["position_value"]
        
        exception = False
        # Return output
        return (side, size, pnl_un, pos_value, exception)
    except requests.exceptions.ConnectionError as errc:
        print("Connection error ",errc)
        pass
    except requests.exceptions.ReadTimeout as errr:
        print("Read timeout",errr)
        pass
    except requests.exceptions.RequestException as err:
        print("other errors ",err)
        pass
    
    # Return output
    return ("", 0, 0, 0, exception)

# Query existing order
def query_existing_order(ticker, order_id):

    # Query order
    order = session_private.query_active_order(symbol=ticker, order_id=order_id)

    # Construct response
    if "ret_msg" in order.keys():
        if order["ret_msg"] == "OK":
            order_price = order["result"]["price"]
            order_quantity = order["result"]["qty"]
            order_status = order["result"]["order_status"]
            return order_price, order_quantity, order_status
    return (0, 0, 0)