Data API
A read-only JSON feed of the trading engine's closed trades, open positions, and performance history.
This is a highly experimental trading engine with a very short live track record. Its results are not statistically meaningful and the strategy may lose money. If you mirror these trades, using a paper (simulated) account only is strongly recommended to minimise risk.
I am not a credible or licensed financial source, and nothing here is financial advice. Independent market research is necessary before acting on any of this data. You are solely responsible for your own trading decisions and any losses that result.
Every trade published in this feed was executed in a paper account. No real capital has been deployed by the engine.
Acknowledge before continuing
The endpoint documentation is hidden until you confirm you have read the warnings above.
Endpoints
All responses are JSON over HTTPS. Every payload embeds the same disclaimer object so the warning travels with the data.
Service index
GET https://spunukollu.com/api/index.json
Performance history — equity curve vs SPY and QQQ
GET https://spunukollu.com/api/performance.json
Closed trades — 0 recorded
GET https://spunukollu.com/api/trades.json
Open positions — 3 currently held
GET https://spunukollu.com/api/positions.json
Regime classifications — which market condition the classifier reached
GET https://spunukollu.com/api/conditions.json
Live vs expectations — measured against backtest numbers committed before go-live
GET https://spunukollu.com/api/expectations.json
Overlay events — price-shock (C4) and macro-headwind (C5) firings
GET https://spunukollu.com/api/overlays.json
Scanner universe — what was ranked each session, and how it narrowed
GET https://spunukollu.com/api/universe.json
Atom feed — completed trades, for a feed reader
GET https://spunukollu.com/api/feed.xml
Schema and compatibility
Every payload carries a schema_version and validates against a
published JSON Schema (draft 2020-12).
GET https://spunukollu.com/api/schema.json
Versioning. Current version is 1.0. A MINOR
bump adds fields; a MAJOR bump may remove or retype them — so ignore unknown keys
rather than failing on them.
Conventions. Dates are ISO 8601. Percentages are already scaled
(3.14 means 3.14%). Prices are USD. null means
not-yet-computable — for example a profit factor with no losing trade — never zero.
Caching. Responses carry an ETag; send
If-None-Match and expect 304. The data changes once per
trading day, so polling faster returns identical bytes.
Mirroring trades
A minimal poller. Run it against a paper broker account.
import requests
BASE = "https://spunukollu.com/api"
positions = requests.get(f"{BASE}/positions.json", timeout=15).json()
print("as of", positions["as_of"], "-", positions["count"], "open")
for p in positions["positions"]:
print(f"{p['side']:5} {p['symbol']:6} "
f"entry={p['entry_price']:.2f} "
f"stop={p['atr_stop']:.2f} "
f"unreal={p['unrealized_pct']:+.2f}%")
# Mirror into YOUR OWN paper account here, sized to YOUR capital.
# Never copy the engine's share quantities directly.
Timing. Positions are published after the session
closes, so a mirrored fill will differ from the engine's. Treat
atr_stop as a catastrophic backstop, not a target.
Sizing. Quantities reflect a small paper account — size to
your own capital and risk tolerance, never by copying quantity.
Terms of use
Data is provided as-is, with no warranty of accuracy, completeness, or availability, and may change or disappear without notice. Please keep polling to a few requests per hour — the feed only changes once per trading day. No liability is accepted for any loss arising from use of this data. Not financial advice.