Update trading configuration and enhance order placement logic with signed orders caching

This commit is contained in:
Nawaz Haider
2026-01-12 15:36:24 +06:00
parent 430f2e9ad0
commit b4c3eb90c9
4 changed files with 59 additions and 17 deletions
+26 -11
View File
@@ -26,7 +26,7 @@ async def cache_token_trading_infos(
async def place_anchor_and_hedge(
up_token_id, down_token_id, anchor_side, price, size=5
up_token_id, down_token_id, anchor_side, price, size=5, signed_orders_cache=None
):
if anchor_side == "UP":
anchor_token_id = up_token_id
@@ -35,26 +35,41 @@ 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))
asyncio.create_task(
place_limit_order(hedge_token_id, 1 - price - PROFIT_MARGIN, size)
place_limit_order(anchor_token_id, price, size, signed_orders_cache)
)
asyncio.create_task(
place_limit_order(
hedge_token_id,
round(1 - price - PROFIT_MARGIN, 2),
size,
signed_orders_cache,
)
)
logger.info(
f"Placed anchor and hedge orders: Anchor Token ID={anchor_token_id}, Hedge Token ID={hedge_token_id}"
)
async def place_limit_order(token_id: str, price: float, size: int):
async def place_limit_order(
token_id: str, price: float, size: int = 5, signed_orders_cache=None
) -> str:
client = get_client()
try:
order_args = OrderArgs(
token_id=token_id,
price=price,
size=size,
side=BUY,
)
signed_order = client.create_order(order_args)
if signed_orders_cache and (token_id, price) in signed_orders_cache:
signed_order = signed_orders_cache[(token_id, price)]
logger.info(
f"Using cached signed order for Token ID={token_id}, Price={price}"
)
else:
order_args = OrderArgs(
token_id=token_id,
price=price,
size=size,
side=BUY,
)
signed_order = client.create_order(order_args)
response = client.post_order(signed_order)
logger.info(
f"Placed limit order: Token ID={token_id}, Price={price}, Size={size}, ID={response['orderID']}"
+27
View File
@@ -8,6 +8,8 @@ import threading
import websocket
from enum import Enum
from config import POLYMARKET_WS_MARKET_URL, TRADING_BPS_THRESHOLD
from py_clob_client import OrderArgs
from py_clob_client.order_builder.constants import BUY
from utils.clob_client import get_client
logger = logging.getLogger(__name__)
@@ -34,6 +36,8 @@ class OrderBook:
"order_book": {"bids": [], "asks": []},
}
self.signed_orders_cache = {}
self.ws = None
self.running = False
self.thread = None
@@ -108,6 +112,7 @@ class OrderBook:
target=lambda: asyncio.run(self._continuous_trading_monitor()), daemon=True
)
self.monitoring_thread.start()
asyncio.create_task(self.create_signed_orders_cache())
logger.info("WebSocket price stream and trading monitor started")
@@ -208,6 +213,28 @@ class OrderBook:
logger.info("Stopped continuous trading monitor")
async def create_signed_orders_cache(self):
start = time.time()
prices = [0.01]
while prices[-1] < 0.99:
prices.append(round(prices[-1] + 0.01, 2))
client = get_client()
for price in prices:
for token_id in [self.up_token_id, self.down_token_id]:
order_args = OrderArgs(
token_id=token_id,
price=price,
size=5,
side=BUY,
)
signed_order = client.create_order(order_args)
self.signed_orders_cache[(token_id, price)] = signed_order
end = time.time()
logger.info(
f"Pre-created signed orders cache for tokens in {round((end - start) * 1000)} milliseconds"
)
def clear_screen(self):
os.system("cls" if os.name == "nt" else "clear")