Skip to content

Simple async-friendly Python connector for RIT Client REST and DMA REST APIs

Notifications You must be signed in to change notification settings

JohnnyC0rp/RITC-python-connector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RIT_python_connector

Simple Python connector for both RIT APIs:

  • Client REST API (local, API key)
  • DMA REST API (remote, basic auth)

Install

pip install -e .

Super simple usage

import RIT_python_connector as rit

rit.connect(un="me", ps="123", case="Liquidity Risk Case")
book = rit.get_book("GTX", format="list")
print(book[:3])

You can use multiple argument names for connect, for example:

  • username: username, user, u, un, trader, trader_id
  • password: password, pass, pw, ps, passwd
  • mode: local/client or dma/server

Connection modes

Local (Client REST)

import RIT_python_connector as rit

rit.connect(
    mode="local",
    api_key="YOUR_API_KEY",
    base_url="http://localhost:9999",  # default
)

DMA (Direct Market Access)

import RIT_python_connector as rit

rit.connect(
    mode="dma",
    username="trader123",
    password="secret",
    case="Liquidity Risk Case",  # auto-resolves practice DMA port
)

The connector can auto-map known practice cases to DMA ports, including:

  • Liquidity Risk Case -> 16510
  • Volatility Trading Case -> 16530
  • Merger Arbitrage Case -> 16550
  • Algorithmic Market Making Case (server 1/2/3) -> 16565 / 16575 / 16585

You can still pass base_url= explicitly when needed.

Run the live example

RIT_USERNAME="YOUR_USER" \
RIT_PASSWORD="YOUR_PASS" \
RIT_CASE="Liquidity Risk Case" \
python3.12 examples/simple_usage.py

Optional env vars for the example:

  • RIT_TICKER (default: first available ticker)
  • RIT_POLL_INTERVAL (default: 0.8)
  • RIT_POLL_ITERATIONS (default: 20)

Output formats

Most getters accept format= and support:

  • "json" / "dict" / "raw"
  • "list" / "array"
  • "string" / "str" / "text"

Example:

rit.get_book("GTX", format="json")
rit.get_book("GTX", format="list")
rit.get_book("GTX", format="string")

Manual polling (classic)

import RIT_python_connector as rit

rit.connect(un="me", ps="123", case="Liquidity Risk Case")
updates = rit.poll_order_book(
    ticker="GTX",
    every=0.2,
    iterations=10,
    format="json",
)
print(f"Got {len(updates)} book snapshots")

Decorator listeners (more convenient)

import time
import RIT_python_connector as rit

@rit.on_order_book_update(ticker="GTX", every_n_updates=1, interval=0.1)
def on_gtx_book(book):
    print("GTX book update", len(book.get("bid", [])), len(book.get("ask", [])))

@rit.on_news_update(every_n_updates=1, interval=0.5)
def on_news(news_items):
    if news_items:
        print("News update", news_items[-1]["headline"])

rit.connect(un="me", ps="123", case="Liquidity Risk Case")
rit.start_listeners()  # optional, connect() starts listeners by default

time.sleep(5)
rit.stop_listeners()
rit.disconnect()

Endpoint coverage

Implemented wrappers for all endpoints in both client rest api.yaml and dma rest api.yaml:

  • /case, /trader, /limits, /news
  • /assets, /assets/history
  • /securities, /securities/book, /securities/history, /securities/tas
  • /orders, /orders/{id}
  • /tenders, /tenders/{id}
  • /leases, /leases/{id}
  • /commands/cancel

Notes

  • This library uses async HTTP internally (via httpx.AsyncClient) and runs it behind simple sync APIs.
  • connect(...) can auto-discover defaults from privod-johnny/creds when available.
  • For raw custom calls, use:
rit.request("GET", "/securities", params={"ticker": "GTX"})

About

Simple async-friendly Python connector for RIT Client REST and DMA REST APIs

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages