Open interest, COT positioning, term structure, and roll pressure — the signals traders actually need, delivered as clean, typed API responses. Not another data feed. A signal engine.
Six signal engines working together. Each produces structured, typed responses — not raw data dumps. Built for systematic traders, quants, and developers who need clean signals, not cleanup work.
Each signal type is computed from raw CFTC and CME data, validated, and served as a structured response. No parsing, no cleaning, no guesswork.
Python SDK with sync and async clients. Builder pattern. Typed responses. WebSocket streaming client with auto-reconnect. Get signals in 5 lines.
# Install $ pip install openinterest-lens # Get positioning signals in 5 lines from openinterest_lens import OpenInterestLensClient client = OpenInterestLensClient(api_key="oil_sk_live_...") signal = client.get_signals("ES", signal_type="positioning") print(signal.smart_money.z_score) # 2.14 print(signal.smart_money.percentile) # 96.5 print(signal.composite.direction) # "long" print(signal.composite.confidence) # 0.87
# Get term structure curl -H "X-API-Key: oil_sk_live_..." \ "https://api.openinterestlens.melabuilt.ai/v1/term-structure/ES" # Get COT data with Z-scores curl -H "X-API-Key: oil_sk_live_..." \ "https://api.openinterestlens.melabuilt.ai/v1/cot/CL?start_date=2026-01-01" # Get roll pressure curl -H "X-API-Key: oil_sk_live_..." \ "https://api.openinterestlens.melabuilt.ai/v1/roll-pressure/NQ"
# Stream signals in real-time import asyncio from openinterest_lens.websocket import AsyncSignalStream async def main(): stream = AsyncSignalStream( api_key="oil_sk_live_...", contracts=["ES", "CL"], signal_types=["positioning", "term_structure"], ) async for signal in stream: print(f"{signal['contract']}: {signal['signal_type']}") asyncio.run(main())
# Async client with retry + builder pattern from openinterest_lens import ClientBuilder client = ( ClientBuilder() .api_key("oil_sk_live_...") .base_url("https://api.openinterestlens.melabuilt.ai") .timeout(30) .max_retries(3) .retry_delay(1.5) .build_async() ) async for signal in client.stream_signals(contracts=["ES"]): print(signal.composite.direction)
FastAPI + SQLAlchemy 2.0 + Redis + TimescaleDB. Async from top to bottom. Docker-ready with CI/CD pipeline.
Tiered access with real rate limits. No fake "enterprise" walls — just clear, honest pricing for developers and trading firms.