Cała historia, krok po kroku
1. Nasłuchuje grupy, nigdy pojedynczego tradera
Jeden portfel, który coś kupił, nie rusza niczego. Trzeba co najmniej
3 skutecznych portfeli grających to samo naraz (cluster_threshold), żeby
agent nazwał to kworum wartym spojrzenia.
„To samo naraz" okazało się trzema wymaganiami, a przez długi czas sprawdzaliśmy
tylko jedno. Grupa musi dziś być trzema portfelami, z których każdy wziął
cenę z rynku, zamiast wystawić ofertę i czekać. Każdy musi wylądować po tej
samej stronie tego samego zakładu, a nie tylko na tym samym rynku. Każdy musi
przyjść w osobnej transakcji. Dwa portfele wypełnione jedną transakcją to
jedna decyzja w dwóch przebraniach, a market maker, którego ofertę ktoś trafił,
nigdy nie miał zdania.
Dokręcenie tego sprowadziło miesiąc alertów z 263 do 14. Po odtworzeniu na
otwartych już pozycjach 32 z 38 nigdy nie zostałoby zawartych. Żadna reguła
nie była zbędna: w pojedynkę łapały 14%, 48% i 25% złych grup.
2. Jeśli grupa sprzedaje, agent kupuje drugą stronę
Sprzedać można tylko to, co się już ma, a świeża pozycja nie ma nic. Przez długi
czas każdy sygnał „grupa sprzedaje" odbijał się więc od giełdy. To mniej więcej
40% sygnałów, które dostajemy.
Obejście tkwi w kształcie rynku. Rynek z dwoma wynikami wycenia je tak, by
sumowały się do 1 $, i dokładnie jeden z nich kończy wart 1 $. Sprzedaż „tak" po
90¢ i kupno „nie" po 10¢ to ta sama opinia. To drugie jest zwykłym zakupem,
który agent potrafi wykonać.
Pozycje otwarte w ten sposób to lustra. Agent pamięta obie strony — tę, którą
trzyma, i tę, którą handluje grupa — bo tej drugiej potrzebuje, żeby wiedzieć,
kiedy wyjść.
3. Czy grupa w ogóle jest jeszcze tego zdania?
Grupa może zgadzać się o 15:00 i kłócić sama ze sobą o 15:02. Jeśli którykolwiek
z tych samych portfeli stanął po przeciwnej stronie tego samego rynku w
ciągu ostatnich 10 minut (reversal_lookback_s), agent odrzuca sygnał. To
nie grupa. To portfel publicznie zmieniający zdanie.
Okno nie jest zgadywane. Zarejestrowane odwrócenia następowały 121 do 457
sekund po sobie, a potem nic aż do 915. 600 siedzi w tej luce. Kupuje cały
zysk najmniejszym kosztem ubocznym.
Siedzi tu druga liczba i to najbardziej myląca na całej stronie.
max_reversed_wallets ma wartość 0. Wygląda to jak wyłączona zapadka, a
znaczy dokładnie odwrotnie: nie toleruje żadnego odwracającego się portfela,
więc jeden jedyny odrzuca całą grupę. Podniesienie tej liczby rozluźnia regułę.
Zapadkę wyłącza się, zerując okno, nie ją.
Odmawia też z drugiej strony. Odstaw odwrócone portfele i zostaje mniej niż 3?
Sygnał też przepada — nie dlatego, że za dużo zmieniło zdanie, tylko dlatego, że
to właśnie one sprawiały, iż wyglądało to na grupę.
Jedna pułapka warta nazwania, bo pomylenie się tu było gorsze niż brak reguły.
Na rynku z dwoma wynikami kupno „tak" i sprzedaż „nie" to ta sama transakcja,
a giełda raportuje obie. Porównywanie słów „kupił" i „sprzedał" znalazło
82 odwrócenia, które nigdy się nie wydarzyły, na 263 alerty — ta sama
transakcja widziana dwa razy. Wyrzuciłoby prawdziwe wygrywające pozycje, łącznie
z najlepszą w księdze. Kierunek wyliczamy względem trzymanego wyniku. Nigdy nie
odczytujemy go z etykiety.
4. Trzy kontrole bezpieczeństwa, zanim cokolwiek kupi
- „Czy jest tu z kim handlować?" — jeśli rynek ma mniej niż 1 000 $
płynności (
min_liquidity_usdc), agent odpuszcza. Wejść łatwo; wychodzenie z
płytkiego rynku to ta część, która boli.
- „Czy ten rynek zaraz się nie kończy?" — jeśli do rozstrzygnięcia zostało
mniej niż 1 godzina (
min_seconds_to_resolution), odpuszcza.
- „Czy cena już nie uciekła?" — odpuszcza tylko wtedy, gdy cena poszła
przeciw wejściu grupy o więcej niż 3% (
staleness_pct) i o więcej niż
dwa kroki cenowe (staleness_min_ticks). Oba warunki, nie którykolwiek.
Czemu dwie reguły na jedno pytanie? Rynki kwotują w stałych krokach — cent albo
dziesiąta centa. Trzy procent 2-centowego wyniku to mniej niż najmniejszy ruch,
jaki rynek umie zrobić. Sam procent nazywałby „nieświeżym" najdrobniejsze
drgnięcie i nic nigdy by nie przechodziło. Próg krokowy mówi to wprost: ruch,
którego rynek nie umie podzielić, to szum, nie informacja.
Kompromis jest realny. Na rynku kwotującym tylko całe centy dwa kroki to 2¢ — a
2¢ wobec 10-centowego wyniku to ruch o 20%, nie o 3%. Na takich rynkach to próg
krokowy jest regułą, która wiąże, nie procent.
Dla lustra agent mierzy każdą z tych kontroli po stronie, którą naprawdę kupuje.
Ten sam ruch to 5,4% na 24-centowym wyniku i 1,7% na jego 76-centowym
bliźniaku. Zmierz złą stronę, a wyrzucisz dokładnie te tanie wyniki, które
sprzedające grupy lubią najbardziej.
5. Ile kosztuje wynik i ile zabiera prowizja
Dwie kontrole decydują, po jakich cenach agent w ogóle zagra.
Prowizja. Giełda nalicza swoją opłatę od udziału, nie od dolara. Kup tani
wynik, a 5 $ kupuje dużo udziałów, więc te same 5 $ oddaje znacznie więcej w
prowizjach. Jako część biletu prowizja wychodzi 5% × (1 − cena). To 4,5% na
10-centowym wyniku i 0,3% na 94-centowym. Ograniczenie tego do 2%
(max_entry_fee_pct) nie jest więc regułą prowizyjną. To cena minimalna
0,60 $, zapisana w jednostkach, które się liczą.
Było warto. Na pierwszych ośmiu zamkniętych pozycjach cena poszła przeciw nam
łącznie o 0,46 $. Prowizje wyniosły 1,58 $. Prowizja była 77% wszystkiego,
co stracone, i 3,4× wkładu samego rynku. W jednej pozycji cena poszła na naszą
korzyść, a transakcja i tak straciła pieniądze.
Podnoszenie stawki nie pomaga. Prowizja i wygrana skalują się z liczbą udziałów,
więc proporcja nigdy się nie zmienia. Podwojenie biletu podwaja stratę.
Cena. Osobno: agent nie zapłaci za udział więcej niż 0,95 $
(max_entry_price). Przy 95¢ bilet za 5 $ może wygrać 26¢ i stracić 5 $ —
około 19 do 1 przeciw. Przy 99,8¢ stawia 5 $, by wygrać jednego centa, 500 do 1,
gdzie jedno złe rozstrzygnięcie wymazuje kilkaset wygranych.
Prowizja nie jest tu argumentem. Jako część dostępnego zysku zostaje z grubsza
stała przy każdej wysokiej cenie. Argumentem jest siatka cenowa samej
giełdy. Rynki kwotują w krokach po dziesiątej centa. Jeden krok to 2%
wszystkiego, co może zarobić bilet po 95¢, ale połowa wszystkiego, co może
bilet po 99,8¢. Powyżej tego najmniejszy ruch, jaki rynek umie pokazać, jest
większością nagrody.
6. Sprawdza własny portfel
„Czy mam miejsce?" — trzyma otwarte najwyżej 20 $ naraz
(exposure_cap_usdc), czyli cztery bilety po 5 $.
„Czy nie zejdę za nisko?" — nigdy nie zagra, jeśli saldo do wydania spadłoby
poniżej 5 $ (working_capital_floor_usdc). W praktyce to ten próg zatrzymuje
agenta na długo przed limitem.
7. Kupuje mało i odmawia przepłacania
Jeśli wszystko się układa, kupuje 5 $ (trade_size_usdc), wszystko albo
nic: zlecenie wypełnia się w całości albo ginie. Limit ceny to 1% ponad to,
co zapłaciła grupa (slippage_pct), ale nigdy ciaśniej niż dwa kroki cenowe
(slippage_min_ticks). 1% 34-centowego wyniku to mniej niż cent, co na rynku
całocentowym zaokrągla się do zera miejsca. A zlecenie bez miejsca to zlecenie,
które ginie. Agent przyciąga potem limit do siatki rynku, bo giełda przyjmuje
tylko ceny leżące dokładnie na niej.
Czemu 5 $, a nie 1 $? Giełda nie przyjmie zlecenia na mniej niż
5 udziałów. Dolar kupuje 5 udziałów tylko przy wyniku po 20¢ lub tańszym.
Powyżej giełda odrzucała każde zlecenie. Agent liczy dziś udziały sam przed
wysłaniem, zamiast dowiadywać się od giełdy. Odmowa z tego powodu jest
dwuznaczna, a dwuznaczna odmowa wiąże część limitu pod pozycję, która nie
istnieje.
8. Gdzie naprawdę leżą pieniądze
Od aktualizacji giełdy Polymarketu giełda nie przyjmuje już zwykłego portfela
jako strony składającej zlecenie. Gotówka leży więc w portfelu depozytowym
Polymarketu, a klucz jedynie podpisuje w imieniu tego portfela.
Muszą istnieć dwa uprawnienia on-chain: jedno do wydawania gotówki (żeby
kupować), drugie do przenoszenia tokenów wyników (żeby sprzedawać). Psują się
niezależnie. Jednego popołudnia kupowanie działało cały dzień, a każda sprzedaż
odbijała się od brakującego uprawnienia. Kontrola przedstartowa czyta dziś oba
wprost z łańcucha, zamiast ufać konfiguracji.
9. Trzyma i wychodzi przy pierwszym odwróceniu
Potem obserwuje te same portfele i wychodzi, gdy tylko pierwszy z nich się
odwróci. Nie czeka, aż zgodzą się pozostałe.
- Na zwykłej pozycji trzyma to, co oni, więc wyjściem jest ich sprzedaż.
- Na lustrze oni trzymają wynik, który sprzedali, więc wyjściem jest ich
odkup. Dosprzedawanie kolejnych to dokładanie się — znów ta sama opinia,
nie odwrócenie — więc nas nie zamyka.
Dojechanie do rozstrzygnięcia to wariant zapasowy, gdy nikt nie odwróci się
pierwszy.
Sama reguła odwrócenia jest przyspawana. Nie ma na to ustawienia — ale odkąd
wylądował następny krok, nie jest już jedynym wyjściem.
10. Sprzedaje też na własnych liczbach
Przez pierwsze miesiące ten agent miał dokładnie dwa wyjścia: grupa się odwraca
albo rynek się rozstrzyga. Jest teraz trzecie i o nic grupy nie pyta.
Mniej więcej raz na minutę wycenia pełne wyjście z każdej otwartej pozycji — ile
naprawdę zapłaciłaby najlepsza oferta kupna, minus prowizja wyjścia, wobec tego,
ile kosztował bilet razem z prowizją zapłaconą na wejściu. Ten odczyt to cała
reguła. Strata większa niż auto_close_loss_pct — sprzedaje. Zysk większy niż
auto_close_profit_pct — sprzedaje.
Czytanie tego po prowizjach, a nie z ceny, jest tu sednem. Bilet za 5 $, który
zapłacił 15 centów za wejście i zapłaci mniej więcej tyle samo za wyjście,
zaczyna życie jakieś 6% pod wodą. „Ile z tego, co włożyłem, dostałbym z
powrotem" to pytanie, które operator naprawdę ma. „O ile ruszył się środek
rynku" — nie.
Cztery szczegóły robią z tego zapadkę, a nie nerwowy spust:
- Chce tej samej odpowiedzi dwa razy. Jeden odczyt za linią ją napina;
następny odczyt z rzędu za tą samą linią ją odpala. Pojedyncze migotnięcie
kwotowania nie zamyka niczego.
- Nieczytelny arkusz to nie odczyt. Brak stojącej oferty kupna to brak ceny,
po której sprzedaż mogłaby się uczciwie odbyć — więc pomija tę pozycję na tę
minutę i zapomina przekroczenie, które trzymała. Automatyczne zamknięcie to
zlecenie, nie wiersz na ekranie.
- Sprzedaje całą pozycję, tą samą ścieżką wyjścia co wszystko inne, i
księguje powód jako stop-loss albo take-profit, żeby kanał zamknięć umiał je
rozróżnić.
- Wyłącznik jej nie blokuje. Zatrzymanie wejść nie może nigdy porzucić
otwartej pozycji, więc wyjścia zawsze płyną.
Obie liczby czytane są przy starcie, więc uzbrojenie ich to edycja pliku i
restart. Każda z nich na 0 — albo po prostu nieobecna, bo tak się parsuje —
kładzie tę stronę.
Dziś obie są nieobecne. Zapadka jest wdrożona i uzbrojona na niczym; żadna
pozycja nigdy nie zamknęła się w ten sposób. Kiedy ją uzbroimy, wartości
zostaną nieopublikowane. Żywy próg to liczba, przeciwko której ktoś mógłby grać,
dopóki pozycja jest otwarta — a dokładnie temu ma zapobiegać polityka ujawniania.
Jedna ostra krawędź, bo uzbrojenie nie jest neutralnym gestem: pozycja już za
progiem w momencie restartu usługi zamyka się w jakieś dwie minuty. Procedura
mówi: najpierw przeczytaj otwartą księgę.
11. Nieudane wyjście jest ponawiane, nie zapominane
Zlecenie wyjścia może zostać odrzucone tak samo jak wejście, a kiedyś znikało z
jedną linijką w logu. Teraz zdarzenie zostaje: trzy próby, mniej więcej co
minutę i coraz rzadziej, każda raportowana. Jeśli trzecia zawiedzie, agent mówi
to głośno, zamiast ucichnąć. Ponawianie jest bezpieczne. Jeśli pozycja zamknęła
się w międzyczasie, ponowienie nie robi nic.
12. Nic nie znika po cichu
Każde odpuszczenie i każdą odmowę zapisujemy z liczbami: limit, o który agent
prosił, cena po zaokrągleniu do siatki, najlepsza cena w księdze i ile wolumenu
siedziało na naszym limicie. Bez nich „mój limit był za ciasny" i „księga była
za płytka" wyglądają identycznie — a ich naprawy są przeciwieństwami.
13. I od nowa
Sprzedane, gotówka z powrotem, miejsce wolne, następny sygnał. Jedna pozycja na
grupę, nigdy dwie, a do grupy raz zamkniętej agent już nigdy nie wraca. Przy
pierwszym w życiu starcie zaczyna od najnowszego alertu, zamiast odtwarzać całą
historię do żywego portfela.
14. Raz w tygodniu zgarnia zysk
Liczy zaksięgowany zysk i wysyła nadwyżkę ponad próg 5 $ na adres wypłat
(profit_destination). Wypłaca tylko wtedy, gdy ten adres jest na liście
dozwolonych (destination_allowlist, bezpiecznik), tylko gdy kwota przekracza
próg kurzu 1 $ (dust_threshold_usdc) i tylko gdy zostały co najmniej
2 POL gazu (gas_reserve_pol). Bez gazu nie mógłby zamknąć pozycji, więc to
wypłata ustępuje pierwsza. Stratny tydzień nie wypłaca nic. Pierwsza w historii
wypłata wymaga człowieka, który powie „tak".
15. Wielki czerwony przycisk
W każdej chwili wyłącznik (kill_switch) zatrzymuje kupowanie czegokolwiek
nowego — a agent dalej obserwuje i zamyka to, co już otwarte. Przestaje brać
ryzyko; nie porzuca go. Tryb cienia decyduje dokładnie jak normalnie, ale każde
niedoszłe zlecenie zapisuje do pliku, zamiast je wysłać.