Skip to content

âś… Opened Orders Tickets

Request: fetch IDs (tickets) of all currently opened orders and positions. Lightweight call to build fast lookups, cross‑checks, and polling loops.

Source files:

  • MetaRpcMT5/mt5_account.py — method opened_orders_tickets(...)
  • MetaRpcMT5/mt5_term_api_account_helper_pb2.py — OpenedOrdersTickets*

Menu entry: OpenedOrdersTickets


RPC

  • Service: mt5_term_api.AccountHelper
  • Method: OpenedOrdersTickets(OpenedOrdersTicketsRequest) → OpenedOrdersTicketsReply
  • Low-level client: AccountHelperStub.OpenedOrdersTickets(request, metadata, timeout)
  • SDK wrapper: MT5Account.opened_orders_tickets(deadline=None, cancellation_event=None)

đź”— Code Example

# Minimal canonical example
res = await acct.opened_orders_tickets()
# res is OpenedOrdersTicketsData
print(len(res.opened_orders_tickets), len(res.opened_position_tickets))

Method Signature

async def opened_orders_tickets(
    self,
    deadline: datetime | None = None,
    cancellation_event: asyncio.Event | None = None,
) -> account_helper_pb2.OpenedOrdersTicketsData

đź’¬ Plain English

  • What it is. The guest list for your trading party: two neat lists of IDs — order tickets and position tickets — nothing more, nothing less.
  • Why you care. Super fast checks ("do we still have anything open?"), set math (diff vs previous poll), and drill‑down fetches by ticket without transferring full objects.
  • Mind the traps.

  • Tickets are integers; the call does not return prices/volumes. Use OpenedOrders (full objects) if you need rich data.

  • Lists may be empty — that’s valid and means no open orders/positions.
  • Treat them as snapshots; if you poll, compare sets and act on the delta.

đź”˝ Input

No required input parameters.

Parameter Type Description
deadline `datetime None` Absolute per‑call deadline → converted to timeout.
cancellation_event `asyncio.Event None` Cooperative cancel for the retry wrapper.

⬆️ Output

Payload: OpenedOrdersTicketsData

Field Proto Type Description
opened_orders_tickets repeated int64 Ticket IDs of all currently opened orders.
opened_position_tickets repeated int64 Ticket IDs of all positions.

🎯 Purpose

  • Fast presence checks and polling loops with minimal payload.
  • Build ticket‑indexed caches, then fetch details only when needed.
  • Detect openings/closings by comparing previous and current snapshots.

đź§© Notes & Tips

  • For details, pair this with OpenedOrders (full objects) or ticket‑specific RPCs.
  • Convert lists to sets for O(1) membership checks and diffs.
  • Wrapper retries transient gRPC errors via execute_with_reconnect(...).

See also: OpenedOrders, PositionsTotal.


Usage Examples

1) Count & union (what’s live now)

res = await acct.opened_orders_tickets()
all_tickets = set(res.opened_orders_tickets) | set(res.opened_position_tickets)
print(f"orders={len(res.opened_orders_tickets)} positions={len(res.opened_position_tickets)} total={len(all_tickets)}")

2) Delta vs previous poll (open/close events)

prev = prev if 'prev' in globals() else (set(), set())
res = await acct.opened_orders_tickets()
orders_now = set(res.opened_orders_tickets)
pos_now    = set(res.opened_position_tickets)

orders_opened  = orders_now - prev[0]
orders_closed  = prev[0] - orders_now
pos_opened     = pos_now - prev[1]
pos_closed     = prev[1] - pos_now
print(orders_opened, orders_closed, pos_opened, pos_closed)
prev = (orders_now, pos_now)

3) With deadline & cancellation

import asyncio
from datetime import datetime, timedelta, timezone

cancel_event = asyncio.Event()
res = await acct.opened_orders_tickets(
    deadline=datetime.now(timezone.utc) + timedelta(seconds=3),
    cancellation_event=cancel_event,
)
print(bool(res.opened_orders_tickets or res.opened_position_tickets))