From e158f553cfbadd7842ca4f07ddf000c65c809c52 Mon Sep 17 00:00:00 2001 From: Nawaz Haider Date: Sat, 3 Jan 2026 13:11:51 +0600 Subject: [PATCH] Update trading logic and order placement in response to configuration changes --- config.py | 4 ++-- main.py | 6 ++++-- utils/clob_orders.py | 27 +++++++++++++++------------ 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/config.py b/config.py index 0e9ec9d..1892f52 100644 --- a/config.py +++ b/config.py @@ -9,5 +9,5 @@ PROFIT_MARGIN = 0.02 TRADING_BPS_THRESHOLD = 50 MARKET_SESSION_SECONDS = 900 TIMEZONE = "US/Eastern" -MAX_TRADES = 1 -PLACE_OPPOSITE_ORDER = False # Hedge orders +MAX_TRADES = 2 +PLACE_OPPOSITE_ORDER = True # Hedge orders diff --git a/main.py b/main.py index e40427a..b4ba908 100644 --- a/main.py +++ b/main.py @@ -80,10 +80,12 @@ async def main(): down_ask_price = 1 - up_bid_price down_bid_price = 1 - up_ask_price + up_trend = up_bid_price > down_ask_price + if trades < MAX_TRADES: trading_side = book.last_signal - if trading_side == SIGNALES.UP: + if (trading_side == SIGNALES.UP) and up_trend: await place_anchor_and_hedge( up_token, down_token, @@ -96,7 +98,7 @@ async def main(): f"Placed UP anchor and hedge orders. Total trades: {trades}" ) - elif trading_side == SIGNALES.DOWN: + elif (trading_side == SIGNALES.DOWN) and not up_trend: await place_anchor_and_hedge( up_token, down_token, diff --git a/utils/clob_orders.py b/utils/clob_orders.py index 1bdac02..6dec8a9 100644 --- a/utils/clob_orders.py +++ b/utils/clob_orders.py @@ -5,6 +5,7 @@ from py_clob_client.clob_types import OrderArgs from py_clob_client.order_builder.constants import BUY from config import PROFIT_MARGIN, PLACE_OPPOSITE_ORDER from utils.clob_client import get_client +from in_memory_db.utils import contains_item as in_memory_db_contains_item logger = logging.getLogger(__name__) @@ -34,11 +35,15 @@ async def place_anchor_and_hedge( anchor_token_id = down_token_id hedge_token_id = up_token_id - asyncio.create_task(place_limit_order(anchor_token_id, price, size)) - if PLACE_OPPOSITE_ORDER: - asyncio.create_task( - place_limit_order(hedge_token_id, 1 - price - PROFIT_MARGIN, size) - ) + anchor_order_id = await place_limit_order(anchor_token_id, price, size) + if PLACE_OPPOSITE_ORDER and anchor_token_id: + for _ in range(900 * 100): + if in_memory_db_contains_item(anchor_order_id): + hedge_order_id = await place_limit_order( + hedge_token_id, 1 - price - PROFIT_MARGIN, size + ) + break + await asyncio.sleep(0.01) logger.info(f"Order prices: {price} and {1 - price - PROFIT_MARGIN}") else: @@ -47,7 +52,6 @@ async def place_anchor_and_hedge( async def place_limit_order(token_id: str, price: float, size: int): client = get_client() - start_time = asyncio.get_event_loop().time() try: response = client.create_and_post_order( OrderArgs( @@ -57,11 +61,10 @@ async def place_limit_order(token_id: str, price: float, size: int): side=BUY, ) ) + logger.info( + f"Placed limit order: Token ID={token_id}, Price={price}, Size={size}, ID={response['orderID']}" + ) + return response["orderID"] except Exception as e: logger.error(f"Error placing order for token {token_id}: {e}") - return - end_time = asyncio.get_event_loop().time() - logger.info( - f"Order placed! ID: {response['orderID']} in {end_time - start_time:.2f} sec" - ) - return response["orderID"] + return None