scalpel · faza 0 · komit 78382f1
Cross-market arbitraž engine za karte. Prati cene na više platformi, računa neto maržu posle svih provizija i troška držanja, i predlaže cenu — u režimu koji biraš po događaju, od pukog posmatranja do automatskog izlaganja. Jezgro je domain-agnostično.
Sa realnim provizijama — kupovina +18%, prodaja −7.5% — karta od 100 EUR mora da poraste na 130.71 EUR samo da bi se izašlo na nulu. Zato jezgro sistema nije kupovina nego procena da li će konkretan događaj završiti u desnom repu.
Naš proračun. Ponovljivo:
python examples/reality_check.py. Ulazne provizije su procene iz branše —
v. napomenu uz tabelu platformi.
Jedna karta od 100 EUR, držana 90 dana. Množitelj je odnos prodajne i kupovne cene — ono što se u razgovoru zove „×2" ili „×10".
| Množitelj | Prodato za | Nama legne | Neto | Prinos |
|---|---|---|---|---|
| ×1.20 | 120.00 | 99.96 | −9.91 | −8% |
| ×1.31 | 131.00 | 121.18 | +0.27 | prag |
| ×2 | 200.00 | 185.00 | +64.09 | +54% |
| ×2.5 | 250.00 | 231.25 | +110.34 | +94% |
| ×3 | 300.00 | 277.50 | +156.59 | +133% |
| ×4 | 400.00 | 370.00 | +249.09 | +211% |
| ×10 | 1000.00 | 925.00 | +804.09 | +681% |
Naš proračun — examples/portfolio_scenarios.py.
×2 do ×4 je realan raspon za dobar odabir. ×10 postoji, ali je izuzetak i ne sme biti osnova računice. Ispod ×1.31 se gubi novac ma koliko rast delovao lepo.
10 karata po 100 EUR, uloženo 1180.00 EUR sa provizijama. Nijedna ne propada.
| Množitelj | Prihod | Rezultat | Prinos |
|---|---|---|---|
| ×1.20 | 999.60 | −209.50 | −18% |
| ×2 | 1850.00 | +640.90 | +54% |
| ×2.5 | 2082.50 | +873.40 | +74% |
| ×3 | 2499.00 | +1289.90 | +109% |
| ×4 | 3332.00 | +2122.90 | +180% |
Ovo je gornja granica — savršen ishod u kome ništa ne ostane neprodato. Vredi je videti zbog prvog reda: i kad se proda svaka karta, ×1.20 je gubitak od 18%.
Ne kupuje se deset istih karata i ne završavaju sve isto. Ovo je mešovita serija — različite cene, različiti množitelji, jedna neprodata.
| Partija | Uloženo | Ishod | Prihod | Rezultat |
|---|---|---|---|---|
| 3 × 40 EUR | 141.60 | ×2.5 | 277.50 | +141.31 |
| 4 × 80 EUR | 377.60 | ×1.8 | 532.80 | +145.89 |
| 2 × 150 EUR | 354.00 | ×3.2 | 888.00 | +525.27 |
| 1 × 150 EUR | 177.00 | isteklo | 0.00 | −181.36 |
| Ukupno | 1050.20 | 1698.30 | +622.20 |
+59% na uloženo. Devet od deset karata prodato, prosečan množitelj oko ×2.3 — nijedna eksplozija, a rezultat je solidan. Primeti i cenu jedne neprodate karte od 150 EUR: −181.36, jer se gubi i uloženo i trošak držanja.
Rasprodat derbi, turneja koja nestane za minut, finale koje niko nije očekivao. Ovo je desni rep zbog koga posao uopšte postoji.
| Kupljeno | Prodato | Množitelj | Neto | Prinos |
|---|---|---|---|---|
| 50.00 | 400.00 | ×8 | +312.75 | +530% |
| 100.00 | 1200.00 | ×12 | +988.69 | +838% |
| 50.00 | 750.00 | ×15 | +637.05 | +1080% |
| 40.00 | 1000.00 | ×25 | +877.64 | +1859% |
Ali evo koliko jedna eksplozija zaista nosi. Deset karata po 100 EUR, devet propadne, jedna eksplodira:
| Množitelj te jedne | Prihod | Rezultat | Prinos | Ishod |
|---|---|---|---|---|
| ×5 | 462.50 | −746.60 | −63% | gubitak |
| ×10 | 925.00 | −284.10 | −24% | gubitak |
| ×15 | 1387.50 | +178.40 | +15% | profit |
| ×20 | 1850.00 | +640.90 | +54% | profit |
Jedna karta mora da poraste ~×15 da sama pokrije devet promašaja. Zato posao ne počiva na eksplozijama nego na tome da većina karata bude prodata uz skroman množitelj — mešovita serija iznad daje +59% bez ijedne eksplozije.
Ranija računica u dolarima: 10 karata po $47.20 (=$472 uloženo), promašaj propada bez ostatka, pogodak ide ×10.
| Pogodaka | Prihod | Rezultat | Prinos | Ishod |
|---|---|---|---|---|
1 / 10 | $370.00 | −113.64 | −24% | gubitak |
1.31 / 10 | — | 0.00 | 0% | prag · 13% |
2 / 10 | $740.00 | +256.36 | +53% | profit |
3 / 10 | $1110.00 | +626.36 | +129% | profit |
Živi na ubuntuservervm.net.jovanovic.vip:11780 — docker stack na .88
(Postgres + aplikacija), dve pozadinske petlje, web UI.
| Deo | Šta radi | Ritam |
|---|---|---|
| Watcher | obilazi watchlistu i beleži viđene cene u istoriju | 30 min |
| Repricer | računa prodajnu cenu za pozicije koje držimo | 30 min, 10 min pred termin |
| Watchlista | pretraga kataloga, dodavanje, režim po događaju, istorija cena | iz browsera |
| Pozicije | kupljene karte, predlog cene sa obrazloženjem, ručna ograničenja | iz browsera |
Provereno u kodu, ne po sećanju. Nijedna nije potpuna.
| Platforma | Čita cene | Izlaže oglase | Pravila + provizije | Stanje |
|---|---|---|---|---|
| Ticketmaster | da | ne | da | kod napisan, nikad pokrenut protiv živog API-ja — nema ključa |
| StubHub | ne | ne | da | samo fee model i pravna pravila |
Izvori:
Ticketmaster Discovery ·
StubHub Inventory ·
StubHub Catalog ·
StubHub o provizijama.
Provereno 27.07.2026 — nalazi istraživanja.
Posledica: sistem ne može ni da napuni watchlistu ni da vidi prave konkurentske oglase.
Repricer je gotov i tačan, ali radi nad praznim ulazom — sve provere su rađene nad ručno
ubačenim podacima. Provizije su procene iz branše, nisu izmerene.
Pravna ograničenja su izvršni kod, ne komentar u dokumentaciji.
tradable: false pre bilo kakve proceneodbijenoSve tri bi se inače pojavile tek u produkciji, tiho.
| Greška | Posledica da je prošla |
|---|---|
Baza vraća 100.0000 gde memorija vraća 100 |
dva skladišta se ponašaju različito — vidi se tek u ispisu |
| Ključ nad cenama primao samo jedan oglas po prolazu | repricer nikad ne bi imao uporedive oglase; sve bi stajalo na „bez promene" |
| Snimak se određivao po kategoriji umesto globalno | rasprodata tribina izgleda kao da još ima karata |
Zajednički uzrok otkrivanja: jedan skup testova pušta se nad oba skladišta (memorija i Postgres). Kad postoje dve implementacije istog interfejsa, testovi idu nad ugovorom, ne nad implementacijom.
examples/*.py;
spoljni nalazi u istraživanju
(INFO_BANK/research/karte-platforme-i-pravni-okvir.md, 42 izvora);
pravni status po zemljama u src/scalpel/core/jurisdictions.py
(svaki unos nosi izvor i pouzdanost).E:\Work\AI\scalpel · presek i plan:
INFO_BANK/projects/scalpel/STATUS.md · nova sesija počinje sa /pickup.