Een bot voor gebeurteniscontracten is een programma dat informatie over een gebeurtenis met een beheerst handelsproces verbindt. De belangrijkste ontwerpvraag is niet hoe snel het een order kan indienen. Het is hoe het programma weet wat er gebeurde, wat het mag doen en wanneer de accountregistratie betrouwbaar genoeg is om verder te gaan. Een snel systeem dat die vragen verwart, kan een bescheiden beslissing in een onbedoelde positie veranderen.
De architectuur moet een keten van bewijs naar accounttoestand bewaren. Een openbare waarneming ondersteunt een aanbeveling. Een aanbeveling kan een risicobeslissing wel of niet doorstaan. Een geautoriseerde instructie kan een orderpoging opleveren, die tot uitvoeringen kan leiden. Die uitvoeringen moeten later met de posities en saldi van het account overeenstemmen. Dit artikel beschrijft die keten met fictieve voorbeelden, zonder te veronderstellen dat ieder platform identieke ordertypen biedt of dat een werkend programma een winstgevende strategie bewijst.
Een bot voor gebeurteniscontracten heeft een contractregister nodig
Begin met een expliciet register van de contracten die de bot mag overwegen. Bewaar de platformcontext, marktidentificator, uitkomstidentificatoren, afwikkelingseenheid en regelverwijzing. Voeg het gebeurtenistijdstip, de handelssluiting en de in het contract genoemde bron toe. Het register moet een eerste publicatie van een herziene waarde onderscheiden en de koppelingsversie bewaren die voor iedere beslissing is gebruikt.
Deze registratie is preciezer dan een zoekresultaat met een markttitel. Een geautomatiseerde zoekopdracht kan een kandidaatcontract ontdekken, maar ontdekking mag niet stilzwijgend handel autoriseren. Twee markten kunnen dezelfde kop hebben en toch andere drempels of waarnemingsvensters gebruiken. Een door een mens beoordeelde koppeling of een getoetst regelvergelijkingsproces moet vaststellen dat de ontvangen gegevens de vraag beantwoorden waarop het contract afwikkelt.
Behandel een koppelingswijziging als een betekenisvolle systeemgebeurtenis. Als een eerder herkend veld onbeschikbaar wordt, mag de bot niet een gelijknamig veld kiezen enkel om het proces draaiende te houden. Verschijnt er een contractverduidelijking, bewaar dan de oude interpretatie en registreer de beoordeling van de nieuwe informatie. Die geschiedenis is nodig om te begrijpen waarom een eerdere positie werd geopend onder aannames die later kunnen veranderen.
De oudere gids over een bot-API voor voorspellingsmarkten helpt lezers het verband tussen contractidentificatoren en accounthandelingen te herkennen. Een register is niet alleen een programmeergemak. Het is de grens die voorkomt dat een signaal voor de ene gebeurtenis naar een oppervlakkig vergelijkbare maar economisch andere positie wordt gestuurd.
Houd waarneming en interpretatie gescheiden
De waarnemingslaag registreert wat een bron meldde en wanneer het systeem dat ontving. Ze mag niet iedere update onmiddellijk in een handelssignaal omzetten. Bewaar de brontijd, ontvangsttijd, identificator en de precieze relevante waarde. Markeer een herhaald bericht als dezelfde waarneming, niet als een tweede onafhankelijke bevestiging. Als berichten in de verkeerde volgorde aankomen, bewaar die volgorde-informatie dan in plaats van een nieuwere waarneming met een oudere te overschrijven.
De interpretatielaag bepaalt wat de waarneming voor het contract betekent. Een melding dat een index gelijk is aan 100,3 kan Ja ondersteunen bij een drempel boven 100,2, maar alleen als het de juiste publicatie, het juiste veld en de juiste afrondingsbehandeling betreft. Een kop dat de index de verwachtingen overtrof, is onvoldoende als het contract naar een absolute waarde vraagt. Een parser moet het contractrelevante feit uitlezen, geen algemeen positief of negatief sentiment.
Sommige invoer ondersteunt een kansschatting in plaats van een rechtstreekse feitelijke vaststelling. Het programma moet die uitvoer als voorspelling labelen en haar onzekerheid bewaren. Een betrouwbaarheidswaarde van een taalmodel of classificatiemodel is niet automatisch een gekalibreerde kans dat het contract uitbetaalt. Als de interpretatie een nieuw juridisch of feitelijk oordeel vereist, kan het systeem haar ter beoordeling doorsturen zonder het model bevoegdheid te geven blootstelling te creëren.
Een bruikbare diagnoseweergave toont de oorspronkelijke waarneming naast de afgeleide claim. Als een operator een beslissing betwijfelt, moet hij dat verband kunnen onderzoeken zonder het uit een prijsgrafiek te reconstrueren. Dit maakt bronproblemen ook eenvoudiger te isoleren: een verouderde waarneming, een foutieve extractie en een redelijke maar niet uitgekomen voorspelling zijn verschillende problemen die andere reparaties vereisen.
Definieer de beslissingsbevoegdheid van de gebeurteniscontractbot
De aanbevelingsfase stelt een handeling voor met een contract, zijde, hoeveelheid, prijsgrens en reden. De autorisatiefase bepaalt of dat voorstel binnen de actuele accountbeperkingen past. Ook in een klein programma moeten die fasen gescheiden blijven. Een strategie kan aankoop aanbevelen terwijl het account zijn gebeurtenislimiet al heeft bereikt, een andere order onopgelost blijft of de marktfeed te oud is geworden om de voorgestelde prijs te ondersteunen.
Een autorisatieregistratie moet de gecontroleerde limieten benoemen. Dat kunnen maximale verwervingskosten, maximale gebeurtenisblootstelling, een maximaal aantal open orders en de eis van een actuele contractkoppeling zijn. Het resultaat is een begrensde toestemming met een vervalmoment, geen onbeperkte instructie om te blijven proberen totdat de gewenste hoeveelheid is verkregen. Veranderen de voorwaarden vóór indiening, dan moet de uitvoerder een nieuwe beslissing vragen of de handeling weigeren.
Een fictieve strategie beveelt bijvoorbeeld 100 Ja-eenheden aan met een aankooplimiet van $0,56 en een aanvullende reserve van $2 voor kosten. De accountrisicocontrole staat voor deze gebeurtenis maximaal $60 aan verplichtingen toe. De voorgestelde maximale verplichting is $58 en past dus binnen die specifieke beperking. Ze kan nog steeds op een andere beperking afvallen, zoals een onopgeloste order in dezelfde markt of een ontbrekend tijdstempel van de officiële bron.
Dit onderscheid wordt extra belangrijk als een bot meerdere taken uitvoert. Een onderzoeksmodule kan contracten aan een volglijst toevoegen, maar mag geen handelsbevoegdheid krijgen alleen omdat zij een proces met de uitvoerder deelt. Een meldingsmodule kan iemand op een ongebruikelijke spread wijzen, maar die melding autoriseert geen nieuwe strategie. Expliciete bevoegdheden voorkomen dat nuttige waarnemingen onbedoelde accountinstructies worden.
Reserveer blootstelling voordat je iets verstuurt
Het reserveren van blootstelling door een gebeurteniscontractbot voorkomt dat meerdere gelijktijdige beslissingen dezelfde capaciteit uitgeven. Reserveer bij autorisatie van een instructie de maximaal toegestane kosten en relevante gebeurtenisblootstelling voordat je haar indient. Houd de reservering vast zolang de order openstaat of zijn uitkomst onzeker is. Geef alleen het deel vrij waarvan gezaghebbende registraties aantonen dat het niet meer kan worden uitgevoerd.
Stel dat de fictieve order van 100 eenheden begint te worden uitgevoerd. Veertig eenheden worden uitgevoerd voor $0,54 en kosten vóór vergoedingen $21,60. Zestig blijven open met een limiet van $0,56 en vertegenwoordigen maximaal $33,60 aan aanvullende aankoopkosten. Met behoud van de kostenreserve van $2 is de gezamenlijke verplichting $57,20. De lagere prijs van het uitgevoerde deel verlaagt de verplichting ten opzichte van de oorspronkelijke $58, maar het niet-uitgevoerde deel blijft een mogelijke toekomstige positie.
Als het relevante geldbudget van het account $100 is, laat deze vereenvoudigde reservering $42,80 ongebonden. Er blijft niet $78,40 vrij enkel omdat tot nu toe maar $21,60 is uitgegeven. Dat hogere bedrag zou de open order negeren en een andere strategie geld laten gebruiken dat voor een mogelijke uitvoering al nodig is. Echte implementaties moeten ook daadwerkelijke vergoedingen en platformspecifiek reserveringsgedrag afstemmen.
Gebruik één gedeeld beeld van blootstelling voor strategieën op hetzelfde account. Afzonderlijke programma's met onafhankelijke tellers kunnen elk denken dat het account ruim voldoende capaciteit heeft. De oudere bespreking van handelsautomatisering op voorspellingsmarkten biedt context om die verantwoordelijkheden te coördineren. Het reserveringssysteem moet bij onzekerheid een voorzichtige beperking toepassen wanneer het niet kan bepalen of een andere instructie nog uitvoerbaar is.
Modelleer orders als toestanden, niet als succesmeldingen
Een orderverzoek kan voorbereid, ingediend, bevestigd, rustend, gedeeltelijk uitgevoerd, voltooid, afgewezen, geannuleerd of onzeker zijn. Dit zijn conceptuele toestanden, geen bewering dat iedere API precies die namen gebruikt. Koppel de werkelijke platformantwoorden aan een gedocumenteerd lokaal model. Bewaar het oorspronkelijke antwoord bij de interpretatie, zodat een fout in de koppeling later kan worden onderzocht.
Een succesvol netwerkantwoord kan vaststellen dat een verzoek is geaccepteerd zonder vast te stellen dat de bedoelde hoeveelheid is uitgevoerd. Omgekeerd kan een netwerktime-out optreden nadat het platform een order heeft geaccepteerd. De bot moet voorkomen dat ieder succes een voltooide positie wordt en iedere time-out een afwijzing. Orderidentificatoren, uitvoeringsregistraties en accountmomentopnamen leveren verschillend bewijs over wat werkelijk gebeurde.
De actuele documentatie over Polymarkets orderlevenscyclus onderscheidt order- en transactietoestanden. Dat illustreert waarom één lokale ja/nee-waarde met de naam voltooid onvoldoende is. Een implementatie moet de toestanden van het specifieke platform en product volgen, inclusief tussenliggende uitvoerings- of afwikkelingstoestanden die na een gemelde match onopgelost blijven.
De uitvoerder moet ook de oorspronkelijke geautoriseerde instructie bewaren. Als een order tegen een betere prijs wordt uitgevoerd, moet de resulterende positie tot dezelfde toestemming herleidbaar blijven. Als de resterende hoeveelheid een hogere prijs vereist, is dat een nieuwe beslissing die volgens de strategieregels autorisatie nodig heeft. Een limiet stilzwijgend verhogen om het doel te voltooien, verandert een gecontroleerde uitvoerder in een niet-beoordeeld strategieonderdeel.
Hersteltoestanden van de gebeurteniscontractbot voorkomen dubbele blootstelling
Bekijk een indiening waarvan het antwoord de bot nooit bereikt. De lokale registratie weet dat een poging is verstuurd, maar niet of die een order werd. De juiste volgende toestand is onzeker. Bewaar de blootstellingsreservering en onderzoek het platform met de ondersteunde identificatoren en accountregistraties die de poging kunnen ophelderen. Maak geen nieuwe order aan enkel omdat het eerste antwoord ontbreekt.
Stel dat de oorspronkelijke instructie 100 eenheden vroeg. Accountregistraties tonen later 40 uitgevoerde en 60 nog openstaande eenheden. De bot vraagt annulering van het restant, maar nog eens 15 eenheden worden uitgevoerd voordat de annulering ingaat. De afgestemde positie is 55 eenheden, terwijl 45 na bevestiging van de annulering niet meer openstaan. Als de bot had aangenomen dat de oorspronkelijke poging mislukte en nog een order van 100 eenheden had ingediend, had de bedoelde blootstelling aanzienlijk kunnen worden overschreden.
Herstel moet procesherstarts overleven. Schrijf de pogingidentificator en reservering vóór of als onderdeel van het beheerste indieningsproces weg, volgens het consistentieontwerp van het systeem. Onderzoek bij herstart onopgeloste pogingen voordat nieuwe aanbevelingen voor dezelfde blootstelling worden geaccepteerd. Een schone programmastart betekent geen schoon account. Het platform kan nog orders van het vorige proces hebben.
De gids over automatisering van gebeurteniscontracten trekt dit onderscheid door naar het omliggende onderzoeks- en beoordelingsproces. Herstel is niet alleen een technisch detail voor zeldzame storingen. Het hoort bij de blootstellingsbeheersing van de strategie, omdat het account kan veranderen terwijl het lokale systeem is losgekoppeld, opnieuw start of op een antwoord wacht.
Bouw een afstemmingsproces dat onafhankelijk is van de strategie
Een afstemmingsproces vergelijkt lokale verwachtingen met gezaghebbende accountregistraties. Het moet ook draaien als er geen nieuw signaal wordt gegenereerd. Vergelijk open orders, uitgevoerde hoeveelheden, posities, vergoedingen en beschikbare saldi met consistente identificatoren en waarnemingstijden. Een verschil moet een expliciete uitzondering opleveren, in plaats van stilzwijgend te worden gecorrigeerd op een manier die de geschiedenis van het fout geraakte lokale model uitwist.
Scheid gewone timingverschillen van onverklaarde afwijkingen. Een uitvoeringsupdate kan, afhankelijk van het rapportagetraject van het platform, vóór de bijbehorende saldo-update aankomen. Het systeem kan een gedocumenteerde tijdelijke toestand toestaan terwijl het op een consistente momentopname wacht. Een verschil dat langer dan het verwachte proces aanhoudt, moet echter nieuwe blootstelling binnen de betrokken reikwijdte blokkeren totdat het is verklaard. Die reikwijdte kan één markt, één account of de volledige uitvoerder zijn.
De afstemmingsregistratie moet aangeven welke waarnemingen de actuele positie ondersteunen. Een operator moet kunnen zien dat 55 eenheden uit twee uitvoeringen van 40 en 15 komen, niet uit een afgeleid verschil tussen afgeronde saldi. Bewaar kostenaanpassingen afzonderlijk, zodat een geldverandering niet voor een verandering in contracthoeveelheid wordt aangezien. Koppel na afwikkeling de uitbetaling aan de daadwerkelijk resterende positie en de definitieve contractuitkomst.
Lezers die met een accountinterface werken, kunnen de oudere bespreking van een handelsbot voor de Kalshi-API gebruiken om de vereiste registraties te ordenen. Het principe is onafhankelijk van de programmeertaal: de strategie stelt voor wat zou moeten gebeuren, terwijl afstemming vaststelt wat gebeurde. Geen van beide functies mag ontbrekend bewijs door eigen verwachtingen vervangen.
Geef systemen met meerdere transactiedelen of prijsopgaven aanvullende grenzen
Een richtingbot kan zijn blootstelling vaak via één positie uitdrukken. Een systeem met meerdere transactiedelen moet volgen of de beoogde combinatie compleet is en wat resteert als slechts sommige orders worden uitgevoerd. Een kandidaat voor arbitrage met gebeurteniscontracten hangt af van verenigbare uitbetalingen en haalbare uitvoering. De bot moet ieder deel en de gezamenlijke mogelijke uitkomsten weergeven, in plaats van een paar als voltooid te registreren zodra de eerste order wordt geaccepteerd.
Reserveer capaciteit voor onvoltooide delen en definieer een maximale tijd of voorwaarde voor een ongepaarde positie. Als het tweede deel onbeschikbaar wordt, heeft het systeem een vooraf bepaalde reactie nodig die bij de verlieslimieten van het account past. Die reactie kan annulering van niet-uitgevoerde orders, verkleining van de eerste positie of behoud van een begrensde blootstelling voor beoordeling omvatten. Er mag niet worden aangenomen dat iedere afdekking tegen iedere prijs automatisch beter is dan een ordelijke beslissing.
Een systeem dat prijsopgaven plaatst, heeft een andere uitdaging: beide zijden kunnen actief blijven terwijl uitvoeringen de voorraad veranderen. Een marketmaker voor gebeurteniscontracten heeft daarom voorraadbewuste bevoegdheden en een betrouwbaar beeld van uitstaande prijsopgaven nodig. Een prijsupdate die een oude order vervangt, moet ieder interval meenemen waarin beide instructies actief kunnen blijven. De toegestane bruto- en nettoblootstelling van het systeem moeten die mogelijkheid weerspiegelen.
Deze uitbreidingen laten zien waarom een algemene koop-of-verkoopfunctie geen volledige botarchitectuur is. Verschillende strategieën hebben andere weergaven van onvoltooid werk nodig. De gemeenschappelijke basis bestaat uit expliciete bevoegdheid, bewaarde orderidentiteit en afstemming. De strategiespecifieke laag beschrijft welke uitvoeringscombinaties aanvaardbaar zijn en welk bewijs vóór de volgende handeling nodig is.
Volg de klokken die een beslissing bepalen
Een bot moet meerdere klokken bewaren, omdat die verschillende vragen beantwoorden. Het tijdstempel van de gebeurtenisbron beschrijft wanneer de informatie werd gepubliceerd. Het ontvangsttijdstempel beschrijft wanneer het lokale proces haar verkreeg. Het orderboektijdstip beschrijft de markttoestand die voor de aanbeveling is gebruikt. Het autorisatietijdstip beschrijft wanneer het account een handeling goedkeurde. Alles tot één tijdveld samenvoegen kan een verouderde waarneming achter een recente verwerking verbergen.
Stel dat een bronwaarneming om 9:00 is gepubliceerd, om 9:01 de verzamelaar bereikte en na een herstart om 9:10 opnieuw werd afgespeeld. Voor het herstarte proces is de herhaling nieuw, maar het onderliggende bewijs is tien minuten oud. Een actualiteitsregel die alleen op het lokale invoegtijdstip berust, zou de bot de waarneming als actueel kunnen laten behandelen. Bewaar de oorspronkelijke tijden en markeer de herhaling expliciet, zodat de regel het feit beoordeelt dat hij moest begrenzen.
Ook tijdvergelijkingen hebben beleid nodig voor ontbrekende of inconsistente waarden. Als een bron geen betrouwbare publicatietijd levert, mag het systeem die niet verzinnen. Het kan een gedocumenteerde terugvalmethode met beperktere bevoegdheid gebruiken of handelingen achterwege laten die sterker tijdbewijs vereisen. Het doel is tijdsonzekerheid zichtbaar te maken in de beslisregistratie, in plaats van een precies ogend tijdstempel kennis te laten suggereren die het systeem niet heeft.
Test met incidenten die het account veranderen
Een bruikbare testverzameling richt zich op ingrijpende overgangen. Simuleer een antwoordtime-out na acceptatie, een gedeeltelijke uitvoering tijdens annulering, een verouderde marktmomentopname en een herstart met een onopgeloste order. Controleer dat de bot de juiste reservering bewaart en handelingen weigert die zijn grenzen kunnen overschrijden. Een test die alleen bevestigt dat een functie de intern toegekende waarde teruggeeft, levert weinig bewijs over deze werkelijke foutpaden.
Gebruik een kleine verzameling opnieuw afspeelbare incidenten met bekende verwachte registraties. Bij het voorbeeld van 100 eenheden moet de test eindigen met 55 uitgevoerd en 45 geannuleerd, zonder een tweede indiening van 100 eenheden. Het geldmodel moet de daadwerkelijke uitvoeringsprijzen en vergoedingen weerspiegelen, niet de oorspronkelijke maximale raming. Een andere test kan bewust een uitvoeringsgebeurtenis weglaten en vereisen dat afstemming de ontbrekende uitvoering via een accountaanvraag terugvindt.
Test ook onschadelijke inactiviteit. Als de voorspelling onbeschikbaar is, de contractkoppeling onopgelost is of de accounttoestand inconsistent is, kan geen order de juiste uitkomst zijn. Een systeem dat alleen op geslaagde indieningen wordt beoordeeld, kan activiteit belonen en de beslissingen missen die ongewenste blootstelling voorkomen. Registreer waarom een handeling werd geweigerd, zodat operators een bewuste pauze van een onopgemerkte storing kunnen onderscheiden.
De bot is pas klaar voor breder gebruik wanneer zijn registraties gewone werking en herstel begrijpelijk maken. Een operator moet zonder gissen het actuele contract, bewijs, de toestemming, open verplichtingen en bevestigde positie kunnen herkennen. Die transparantie bewijst geen handelsvoordeel, maar maakt het programmagedrag beoordeelbaar en geeft de strategie een betrouwbare basis voor evaluatie.