[{"data":1,"prerenderedAt":305},["ShallowReactive",2],{"blog-post-building-an-llm-trading-bot":3,"blog-posts-pl":238},{"original":4,"pl":129},{"id":5,"title":6,"author":7,"body":8,"date":112,"description":113,"extension":114,"lang":115,"meta":116,"navigation":117,"path":118,"readingTime":119,"seo":120,"sitemap":121,"stem":122,"tags":123,"updated":127,"__hash__":128},"blog/blog/building-an-llm-trading-bot.md","So everyone is building LLM trading bots now","Bartosz Szczepanik",{"type":9,"value":10,"toc":101},"minimark",[11,15,18,23,26,29,33,36,39,42,46,49,52,55,59,62,65,68,72,75,78,81,85,88,91,95,98],[12,13,14],"p",{},"For the last few months I keep running into the same thing. Someone at a meetup mentions the bot they have running on a small account. A friend sends me a screenshot of a chart that only goes up. My feed fills with threads about letting a language model manage a portfolio. At some point I got curious enough to stop scrolling and actually look into it, and this post is what I found, written down mostly so I stop repeating it over coffee.",[12,16,17],{},"I should say up front that I am an engineer and nowhere near a professional trader. Nothing here is financial advice, and if you take one thing away it should probably be that this is an easy place to lose money quickly.",[19,20,22],"h2",{"id":21},"what-most-of-these-bots-actually-are","What most of these bots actually are",[12,24,25],{},"Once you look past the screenshots, a surprising number of these projects are a loop. Every few minutes the script grabs some recent prices and maybe a few headlines, pastes them into a prompt, asks the model whether to buy or sell and how much, and sends whatever comes back to an exchange. It is a fun weekend project, and I understand why people build it. It also hands the one part of the system that can wipe out an account to the part that is least reliable at numbers.",[12,27,28],{},"The more I read, the more it seemed like the useful version of this idea looks quite different.",[19,30,32],{"id":31},"what-the-model-is-genuinely-good-for","What the model is genuinely good for",[12,34,35],{},"Language models read well. Company filings, earnings call transcripts, central bank statements and the endless stream of news are all text, and turning that text into something a program can use is where these models clearly beat the older rule-based tools. Asking one whether a press release changes a company's outlook, how nervous the language in a call sounds, or which of the stocks you care about a headline is really about all seem like sensible jobs for it.",[12,37,38],{},"Arithmetic, probabilities and consistency are where things get shaky. The same prompt can give different answers from one day to the next, the model has no feel for fees or slippage unless you spell them out, and it will cheerfully suggest a position size that makes no sense for the account it is looking at.",[12,40,41],{},"So the design I kept coming back to is simple to say. The model reads and describes, and anything that touches money stays in plain code that behaves the same way every time.",[19,43,45],{"id":44},"how-i-would-put-one-together","How I would put one together",[12,47,48],{},"If I were building this properly, the model would sit in the middle of the pipeline and nowhere near the edges. Market data and text sources would come in on one side. The model would turn the text into a small, fixed set of signals, something like a sentiment score, the kind of event and which tickers it affects, and every one of those outputs would be saved with the prompt and the model version that produced it. A strategy written in ordinary code would decide what it wants to hold based on those signals and the prices. A separate risk check, also ordinary code, would look at every order against limits on position size, total exposure and daily losses, and it would be allowed to say no. Only after that would anything reach the broker.",[12,50,51],{},"What I like about splitting it up like this is that each piece can be tested on its own. You can replay last week's news through the model and just look at the signals it produced. You can throw ridiculous orders at the risk check and make sure it refuses them. When something goes wrong, you can tell whether the model misread the news or the strategy made a bad call with a correct reading.",[12,53,54],{},"I would also want a single switch that stops all trading, checked before every order, and something that flips it automatically when losses or errors or response times drift outside what looks normal.",[19,56,58],{"id":57},"the-part-that-surprised-me-most","The part that surprised me most",[12,60,61],{},"This was the thing that changed how I look at every impressive chart I have been sent. When you test a normal trading strategy on data from a few years ago, the strategy has no idea what happened afterwards. When you test a language model on data from a few years ago, the model very likely read about what happened afterwards while it was being trained. It has seen the news, the commentary and in a lot of cases the prices themselves.",[12,63,64],{},"That means a backtest of an LLM strategy over a period the model was trained on can look brilliant for a reason that has nothing to do with skill. From what I could find, a lot of the published results in this area fall apart once you only test on dates after the model's training cutoff, and plenty of them end up no better than picking at random. That was a sobering thing to read.",[12,66,67],{},"The honest way around it seems to be testing only on data from after the cutoff, which for a recent model is not much history, and then running it on paper with live data for a long while before any real money goes in.",[19,69,71],{"id":70},"what-happened-when-models-traded-real-money","What happened when models traded real money",[12,73,74],{},"There was a public experiment last autumn that got a lot of attention. Six of the big models were each given ten thousand dollars to trade crypto futures for a couple of weeks. One finished roughly twenty percent up, a couple lost around forty percent, and one was up about fifty percent at one point before giving most of it back.",[12,76,77],{},"It made great headlines, and I do not think it says much about which model is the better trader. A couple of weeks of leveraged crypto mostly measures how much risk each one happened to take in a very jumpy market, and a different fortnight could have flipped the order completely. The lesson I took from it was a different one. A model that controls its own position sizes can burn through a large chunk of an account very quickly, which is exactly why I would keep it away from that decision.",[12,79,80],{},"I also came across a few more careful setups where several model instances play different roles, a couple of analysts, someone arguing the bullish case and someone arguing the bearish one, with a risk manager sitting in front of the trades. I like that shape a lot. The results people report for it are still short and run into the same training data problem, so I read them as an interesting design and not much more yet.",[19,82,84],{"id":83},"if-you-actually-run-one","If you actually run one",[12,86,87],{},"The rest is the unglamorous part. Pin the exact model version, because a quiet update on the provider's side can change your signals overnight. Keep a log of every prompt and response next to the orders they led to, since you will want to understand past decisions later. Keep an eye on API costs if you run a model over a lot of news, and accept that anything needing to react in under a second or two is out of reach.",[12,89,90],{},"And if the idea ever grows into managing someone else's money, talk to a lawyer early. In Europe that is regulated territory and it is not something you want to discover late.",[19,92,94],{"id":93},"where-i-landed","Where I landed",[12,96,97],{},"After all this digging I am more interested in the idea than when I started. A language model that reads everything and hands clean, structured signals to a strict and fairly boring system seems genuinely useful to me, and that is the version I would build if I ever try this myself.",[12,99,100],{},"If you are building something like this and want to compare notes, I would be glad to hear from you.",{"title":102,"searchDepth":103,"depth":103,"links":104},"",2,[105,106,107,108,109,110,111],{"id":21,"depth":103,"text":22},{"id":31,"depth":103,"text":32},{"id":44,"depth":103,"text":45},{"id":57,"depth":103,"text":58},{"id":70,"depth":103,"text":71},{"id":83,"depth":103,"text":84},{"id":93,"depth":103,"text":94},"2026-09-29","I kept hearing about language models that trade on their own, so I dug into how these bots work, where they fall apart and what I would build instead.","md","en",{},true,"/blog/building-an-llm-trading-bot","6 min read",{"title":6,"description":113},{"loc":118},"blog/building-an-llm-trading-bot",[124,125,126],"ai","llm","trading",null,"two6403SlZrdeT0sDvCQlcKNAyP9rxhg5pnOeoQwsGs",{"id":130,"title":131,"author":7,"body":132,"date":112,"description":231,"extension":114,"lang":232,"meta":233,"navigation":117,"path":118,"readingTime":234,"seo":235,"stem":122,"tags":236,"updated":127,"__hash__":237},"blogPl/blog/building-an-llm-trading-bot.md","Wszyscy nagle budują boty tradingowe na LLM-ach",{"type":9,"value":133,"toc":222},[134,137,140,144,147,150,154,157,160,163,167,170,173,176,180,183,186,189,193,196,199,202,206,209,212,216,219],[12,135,136],{},"Od kilku miesięcy wszędzie natykam się na to samo. Ktoś na meetupie wspomina o bocie, którego puścił na małym koncie. Znajomy podsyła mi screenshot wykresu, który idzie tylko w górę. Na moim feedzie przybywa wątków o tym, żeby oddać zarządzanie portfelem modelowi językowemu. W końcu zaciekawiło mnie to na tyle, że przestałem scrollować i przyjrzałem się temu porządnie. Ten wpis to zapis tego, czego się dowiedziałem. Spisałem to głównie po to, żeby przestać opowiadać w kółko to samo przy kawie.",[12,138,139],{},"Od razu zaznaczam: jestem inżynierem, a do zawodowego tradera bardzo mi daleko. Nic tu nie jest poradą finansową, a jeśli masz zapamiętać z tego tekstu tylko jedną rzecz, to chyba tę, że na tym bardzo łatwo szybko stracić pieniądze.",[19,141,143],{"id":142},"czym-właściwie-jest-większość-tych-botów","Czym właściwie jest większość tych botów",[12,145,146],{},"Gdy spojrzeć poza screenshoty, okazuje się, że spora część tych projektów to zwykła pętla. Co kilka minut skrypt pobiera ostatnie notowania i ewentualnie kilka nagłówków, wkleja je do promptu, pyta model, czy kupić, czy sprzedać i ile, po czym wysyła na giełdę to, co dostanie w odpowiedzi. Fajny projekt na weekend i rozumiem, czemu ludzie go budują. Tyle że jedyny element systemu, który może wyczyścić konto, oddaje się w ten sposób temu, który najgorzej radzi sobie z liczbami.",[12,148,149],{},"Im więcej czytałem, tym bardziej miałem wrażenie, że sensowna wersja tego pomysłu wygląda zupełnie inaczej.",[19,151,153],{"id":152},"do-czego-model-naprawdę-się-nadaje","Do czego model naprawdę się nadaje",[12,155,156],{},"Modele językowe dobrze czytają. Sprawozdania spółek, transkrypcje konferencji wynikowych, komunikaty banków centralnych i niekończący się strumień newsów to wszystko tekst. W przerabianiu go na coś, z czego może skorzystać program, te modele wyraźnie wygrywają ze starszymi narzędziami opartymi na regułach. Pytanie, czy dany komunikat prasowy zmienia perspektywy spółki, jak nerwowo brzmią wypowiedzi na konferencji albo której z obserwowanych przez ciebie spółek naprawdę dotyczy nagłówek, to moim zdaniem rozsądne zadania dla modelu.",[12,158,159],{},"Gorzej jest z arytmetyką, prawdopodobieństwem i powtarzalnością. Ten sam prompt potrafi z dnia na dzień dawać różne odpowiedzi, model nie ma wyczucia prowizji ani poślizgu, dopóki mu ich wprost nie rozpiszesz, i bez wahania zaproponuje wielkość pozycji, która nie ma żadnego sensu przy koncie, na które akurat patrzy.",[12,161,162],{},"Dlatego architektura, do której ciągle wracałem, daje się opisać bardzo prosto. Model czyta i opisuje, a wszystko, co dotyka pieniędzy, zostaje w zwykłym kodzie, który za każdym razem działa tak samo.",[19,164,166],{"id":165},"jak-bym-to-złożył","Jak bym to złożył",[12,168,169],{},"Gdybym budował to porządnie, model siedziałby w środku pipeline'u, z dala od jego brzegów. Z jednej strony wpływałyby dane rynkowe i źródła tekstowe. Model zamieniałby tekst na mały, stały zestaw sygnałów, na przykład ocenę sentymentu, typ zdarzenia i listę tickerów, których ono dotyczy. Każdy taki wynik zapisywałbym razem z promptem i wersją modelu, z której pochodzi. O tym, co trzymać w portfelu, decydowałaby na podstawie tych sygnałów i cen strategia napisana w zwykłym kodzie. Osobny moduł kontroli ryzyka, też zwykły kod, sprawdzałby każde zlecenie pod kątem limitów wielkości pozycji, łącznej ekspozycji i dziennej straty. Miałby też prawo powiedzieć „nie”. Dopiero potem cokolwiek trafiałoby do brokera.",[12,171,172],{},"W takim podziale podoba mi się to, że każdy element da się przetestować osobno. Możesz przepuścić przez model newsy z zeszłego tygodnia i po prostu obejrzeć sygnały, które z nich wyciągnął. Możesz zasypywać moduł ryzyka absurdalnymi zleceniami i sprawdzać, czy wszystkie odrzuca. A gdy coś pójdzie nie tak, łatwo ustalić, czy to model źle odczytał newsa, czy strategia podjęła złą decyzję mimo poprawnego odczytu.",[12,174,175],{},"Chciałbym też mieć jeden wyłącznik zatrzymujący cały handel, sprawdzany przed każdym zleceniem, oraz mechanizm, który sam go uruchamia, gdy straty, błędy albo czasy odpowiedzi zaczynają odbiegać od normy.",[19,177,179],{"id":178},"co-zaskoczyło-mnie-najbardziej","Co zaskoczyło mnie najbardziej",[12,181,182],{},"To właśnie zmieniło moje spojrzenie na każdy efektowny wykres, jaki ktoś mi podesłał. Gdy testujesz zwykłą strategię tradingową na danych sprzed kilku lat, strategia nie ma pojęcia, co działo się potem. Gdy w ten sam sposób testujesz model językowy, model najpewniej już podczas treningu czytał o tym, co działo się potem. Widział newsy, komentarze, a często nawet same ceny.",[12,184,185],{},"Backtest strategii opartej na LLM-ie na okresie, który model zna z treningu, może więc wyglądać genialnie z powodu, który nie ma nic wspólnego z umiejętnościami. Z tego, co udało mi się znaleźć, sporo opublikowanych wyników w tej dziedzinie rozsypuje się, gdy testuje się je wyłącznie na datach po training cutoffie modelu, a wiele wypada wtedy nie lepiej niż losowy wybór. Ta lektura mocno mnie otrzeźwiła.",[12,187,188],{},"Uczciwym rozwiązaniem wydaje się testowanie wyłącznie na danych z okresu po cutoffie, a w przypadku świeżego modelu to niewiele historii. Potem trzeba długo prowadzić paper trading na danych na żywo, zanim wejdą jakiekolwiek prawdziwe pieniądze.",[19,190,192],{"id":191},"co-się-stało-gdy-modele-handlowały-prawdziwymi-pieniędzmi","Co się stało, gdy modele handlowały prawdziwymi pieniędzmi",[12,194,195],{},"Zeszłej jesieni głośno było o publicznym eksperymencie. Sześć dużych modeli dostało po dziesięć tysięcy dolarów na kilka tygodni handlu kontraktami futures na kryptowaluty. Jeden skończył mniej więcej dwadzieścia procent na plusie, kilka straciło około czterdziestu procent, a jeden był w pewnym momencie jakieś pięćdziesiąt procent do przodu, po czym oddał większość zysku.",[12,197,198],{},"Nagłówki były świetne, ale nie sądzę, żeby to wiele mówiło o tym, który model jest lepszym traderem. Kilka tygodni handlu krypto z dźwignią mierzy głównie to, ile ryzyka każdy z nich akurat podjął na bardzo rozchwianym rynku, a w innych dwóch tygodniach kolejność mogłaby się całkiem odwrócić. Ja wyciągnąłem z tego inną lekcję. Model, który sam ustala wielkość swoich pozycji, potrafi bardzo szybko przepalić sporą część konta. Właśnie dlatego trzymałbym go z dala od tej decyzji.",[12,200,201],{},"Trafiłem też na parę staranniejszych setupów, w których kilka instancji modelu gra różne role: jest paru analityków, ktoś broni scenariusza wzrostowego, ktoś spadkowego, a przed transakcjami stoi risk manager. Bardzo podoba mi się taki układ. Wyniki, które ludzie dla niego podają, obejmują jednak wciąż krótkie okresy i mają ten sam problem z danymi treningowymi, więc na razie traktuję to jako ciekawą architekturę i niewiele więcej.",[19,203,205],{"id":204},"jeśli-naprawdę-chcesz-takiego-bota-uruchomić","Jeśli naprawdę chcesz takiego bota uruchomić",[12,207,208],{},"Reszta to ta mniej efektowna część. Przypnij konkretną wersję modelu, bo cicha aktualizacja po stronie dostawcy potrafi z dnia na dzień zmienić sygnały. Loguj każdy prompt i każdą odpowiedź razem ze zleceniami, do których doprowadziły, bo później będziesz chciał zrozumieć dawne decyzje. Pilnuj kosztów API, jeśli przepuszczasz przez model dużo newsów, i pogódź się z tym, że wszystko, co musi reagować szybciej niż w sekundę czy dwie, jest poza zasięgiem.",[12,210,211],{},"A jeśli pomysł kiedyś rozrośnie się do zarządzania cudzymi pieniędzmi, jak najwcześniej porozmawiaj z prawnikiem. W Europie to działalność regulowana i lepiej nie przekonywać się o tym za późno.",[19,213,215],{"id":214},"na-czym-stanąłem","Na czym stanąłem",[12,217,218],{},"Po tym całym grzebaniu pomysł interesuje mnie bardziej niż na początku. Model językowy, który czyta wszystko i przekazuje czyste, ustrukturyzowane sygnały do rygorystycznego i dość nudnego systemu, wydaje mi się naprawdę przydatny. Właśnie taką wersję zbudowałbym, gdybym kiedyś sam się za to zabrał.",[12,220,221],{},"Jeśli budujesz coś podobnego i chcesz wymienić się doświadczeniami, odezwij się, chętnie pogadam.",{"title":102,"searchDepth":103,"depth":103,"links":223},[224,225,226,227,228,229,230],{"id":142,"depth":103,"text":143},{"id":152,"depth":103,"text":153},{"id":165,"depth":103,"text":166},{"id":178,"depth":103,"text":179},{"id":191,"depth":103,"text":192},{"id":204,"depth":103,"text":205},{"id":214,"depth":103,"text":215},"Ciągle słyszałem o modelach językowych, które same handlują, więc sprawdziłem, jak działają takie boty, gdzie się sypią i co zbudowałbym na ich miejscu.","pl",{},"6 min czytania",{"title":131,"description":231},[124,125,126],"dwGpbOkPG2wLSeiP-DLEn0rQEPJLltIIALW2IOkk5v8",[239,251,262,268,278,287,289,297],{"path":240,"stem":241,"title":242,"description":243,"date":244,"tags":245,"readingTime":250,"lang":232},"/blog/what-cra-compliance-takes-for-a-small-hardware-team","blog/what-cra-compliance-takes-for-a-small-hardware-team","Czego CRA naprawdę wymaga od małej firmy sprzętowej","Przeszedłem przez Cyber Resilience Act punkt po punkcie i zebrałem obowiązki producenta w jedną checklistę. Czego wymaga od urządzenia IoT i od czego zacząć.","2026-10-04",[246,247,248,249],"cra","iot","security","compliance","8 min czytania",{"path":252,"stem":253,"title":254,"description":255,"date":256,"tags":257,"readingTime":261,"lang":232},"/blog/one-golden-certificate-for-the-whole-production-line","blog/one-golden-certificate-for-the-whole-production-line","Jeden złoty certyfikat na całą linię produkcyjną","Jak nadać każdemu urządzeniu własną tożsamość X.509 w AWS IoT Core bez wgrywania certyfikatów sztuka po sztuce: certyfikat claim i fleet provisioning.","2026-10-01",[247,258,248,259,260],"aws","provisioning","esp32","9 min czytania",{"path":263,"stem":264,"title":265,"description":266,"date":256,"tags":267,"readingTime":261,"lang":232},"/blog/the-cra-clock-is-already-running","blog/the-cra-clock-is-already-running","Zegar CRA już tyka, także dla urządzeń sprzedanych lata temu","Od 11 września 2026 CRA wymaga zgłoszeń w ciągu 24 godzin dla każdego urządzenia IoT na rynku UE, także starego. Co to znaczy dla małej firmy sprzętowej?",[246,247,248,249],{"path":269,"stem":270,"title":271,"description":272,"date":273,"tags":274,"readingTime":277,"lang":232},"/blog/updating-firmware-on-a-fleet-without-bricking-it","blog/updating-firmware-on-a-fleet-without-bricking-it","Aktualizacja 50 000 ESP32 tak, żeby żadnego nie uceglić","Aktualizacje OTA dużej floty ESP32: układ partycji i rollback, podpisane obrazy, wdrażanie etapami i ile kosztuje wysłanie megabajta na każde urządzenie.","2026-09-30",[247,260,275,276],"firmware","ota","7 min czytania",{"path":279,"stem":280,"title":281,"description":282,"date":273,"tags":283,"readingTime":277,"lang":232},"/blog/where-the-battery-goes-on-an-lte-m-sensor","blog/where-the-battery-goes-on-an-lte-m-sensor","Na co czujnik LTE-M zużywa baterię","Budżet energetyczny czujnika LTE-M na baterii: dlaczego dominuje w nim radio i które ustawienia decydują, czy bateria wytrzyma rok, czy pięć lat.",[247,284,285,286],"embedded","lte-m","low-power",{"path":118,"stem":122,"title":131,"description":231,"date":112,"tags":288,"readingTime":234,"lang":232},[124,125,126],{"path":290,"stem":291,"title":292,"description":293,"date":112,"tags":294,"readingTime":296,"lang":232},"/blog/jev-a-model-that-only-decides","blog/jev-a-model-that-only-decides","JEV: model, który tylko decyduje","JEV od TypeSafe AI zwraca typowane odpowiedzi ze skalibrowanym prawdopodobieństwem i nie pisze ani słowa. Czym jest, gdzie się sprawdzi i na co uważać.",[124,125,295],"jev","5 min czytania",{"path":298,"stem":299,"title":300,"description":301,"date":112,"tags":302,"readingTime":250,"lang":232},"/blog/storing-a-reading-a-minute-from-100k-devices","blog/storing-a-reading-a-minute-from-100k-devices","Jak przechowywać minutowe odczyty ze 100 000 urządzeń","Co naprawdę trzeba zrobić, żeby przyjąć, zdeduplikować i przez rok trzymać minutową telemetrię ze 100 000 urządzeń, i gdzie kryją się koszty.",[247,303,304],"data-engineering","timescaledb",1792141330738]