2010. gada sākumā tika izveidoti jauni tīkli aptuveni 300 miljoni ASV dolāru tiešā optisko šķiedru līnijā starp Čikāgu un Ņujorku.Tajā laikā Čikāga bija galvenais termināļu tirdzniecības centrs, bet Ņujorka apstrādāja akcijas.Regulāri maršruti pieņēma novirzes, kas pievienoja desmitiem kilometru, bet jaunais kabelis samazināja latenci no ~17 līdz ~13 milisekundēm. Ieguldīts Ieguldīts Augstas frekvences tirdzniecībai šīs 3-4 ms bija milzīga priekšrocība. Ikviens, kurš datus redzēja nedaudz agrāk, varēja vispirms izvietot pasūtījumus un iegūt likviditāti. Ja uzņēmumi būtu gatavi tērēt simtiem miljonu tikai 3-4 milisekundēm, iedomājieties ML modeļa priekšrocības, kas nereaģē (pat ja uzreiz), bet faktiski paredz tirgus kustības. Tātad, kāpēc mēs neredzam sabiedrības panākumu stāstus par ML finanšu jomā? Jūs varat to aplūkot divos veidos. Viens ir tas, ka rezultāti pastāv, bet netiek kopīgi. Dažreiz jūs redzēsiet papīru ar labiem skaitļiem, bet tie ir reti un parasti ķiršu izvēlēti. Otrs ir tas, ka pastāv reāli šķēršļi. Finanšu dati ir tikai grūtāk strādāt ar datiem nekā dati citās jomās, galvenokārt trīs iemeslu dēļ: Pārāk daudz trokšņa Nav pietiekami daudz datu Pastāvīgi mainās tirgi Šī kombinācija padara finanšu datus ļoti atšķirīgus no laika apstākļu datiem, kur troksnis ir zemāks, jo sistēma seko fizikas likumiem, dati ir bagāti, pateicoties satelītiem un sensoriem, kas katru dienu ražo terabaitus novērojumu, un pamatā esošā fizika paliek stabila, tāpēc pat vecie dati joprojām ir noderīgi. Katrai no šīm finanšu problēmām ir zināmi labojumi. Es tos pārbaudīšu zemāk. Problēma ir tā, ka tie darbojas tikai izolēti. Neviens nav izdevies tos visus apvienot vienā tirdzniecības mašīnā. Kā viņi saka, jūs varat izvēlēties tikai divus. Reducing noise with filters and aggregation Trokšņa samazināšana ar filtriem un agregāciju Finanšu laika sērijas nāk ar vāju signālu, kas apglabāts trokšņos. Cenas svārstās katru sekundi - ziņas, baumas, lielo spēlētāju kustības. Ir divi galvenie trokšņa avoti: The first source of noise is a The core issue is not the magnitude of the noise itself, but the weakness of the signal: meaningful price movements are usually fractions of a percent, while random swings can easily reach several percent. As a result, the share of informative changes within the overall data stream is extremely small. weak signal-to-noise ratio. According to the Efficient Market Hypothesis, prices already reflect all available information from news — which is exactly what we typically aim to predict. However, markets also include whose actions generate additional noise. uninformed participants Noise filtering Noise filtering via FFT remains a staple tool. The approach decomposes a time series into frequency components: low frequencies capture the underlying trend, while high frequencies represent noise. By discarding the high-frequency parts and reconstructing only the low-frequency component, we obtain a smoothed signal that’s much easier to model. (The high-frequency remainder can still serve for volatility estimation if needed.) was able to augment classical computing workflows to better unravel hidden pricing signals in noisy market data than standard, classical-only approaches in use by HSBC, resulting in strong improvements in the bond trading process. IBM Heron Heuristics and reframing the problem Noise from market participants is handled differently. One useful trick is to reframe the question itself. Instead of asking you can ask: “What will Apple’s stock price be one second from now?” “What will it cost to buy 1 share?” “What will it cost to buy 100k shares?” In the second case we predict the average price for a large volume, and that is much more stable and better reflects market movement. def avg_price(order_book, volume): taken, cost = 0, 0 for price, avail in order_book: take = min(avail, volume - taken) cost += take * price taken += take if taken >= volume: break return cost / taken Example: the averaged price for 100k shares y = avg_price(order_book, 100_000) IBM Heron lietošana “Kāda būs Apple akciju cena vienu sekundi no šī brīža?” When More Volume Means More Noise Tomēr ir arī pretējs efekts: dažreiz Salīdziniet abas diagrammas: tās parāda vidējās BTCUSDT cenas Binance, kas svērtas pēc dažādiem tirdzniecības apjomiem. Pirmajā gadījumā $ 50M apjoma svērtā diagramma izskatās “mazāk trokšņaina” – tas notika straujā cenu krituma laikā. Otrajā gadījumā, tomēr, tas pats svērtais vidējais rādītājs parāda daudz vairāk “nomierinošu” lēcienu. Tas notika tāpēc, ka klusāka cenu perioda laikā dalībnieki biežāk pārvietoja savus lielos pasūtījumus dziļāk pasūtījumu grāmatā, kas savukārt ietekmēja svērto vidējo cenu. Vairāk Tas var šķist pārsteidzoši: ja jūs vienkārši aprēķināt izmaiņu skaitu katram no šiem trim rādītājiem laika posmā no 22. augusta līdz 22. septembrim, jūs faktiski saņemsiet datu pieaugumu, “vidēji” cenu. P1_1_market_hits.csv: 2 374 605 datu punkti P2_500k_market_hits.csv: 51,309,973 datu punkti P3_50m_market_hits.csv: 133,191,896 datu punkti Ieguvums ir šāds: vidēji dažreiz var padarīt lietas sliktākas. Smarter Targets Beat Raw Prices Vēl viens veids, kā “samazināt troksni” un “palīdzēt ML”, ir pārveidot pašu prognozēšanas mērķi, laika gaitā vidēji vidēji skaņas. Viena no spēcīgākajām ir: Tas vienlaikus atrisina divas problēmas: “Mēs prognozēsim precīzu cenu 10 sekundes no šī brīža.” “Prognozēsim apjoma svērto vidējo cenu nākamo 10 sekunžu laikā.” If a price jump occurs within those 10 seconds, the exact moment doesn’t matter as much — averaging smooths it out. The algorithm therefore has fewer ways to fail. Secondly (and here we get a bit more mathematical), averaging the target also reduces the average penalty the model receives during training for “wrong predictions.” In the simplest case of a regression model, the loss is proportional to (y^* - y)^2, where y^* is the “true answer” and y is the model output. The larger the error, the quadratically higher the penalty. Now, suppose that over the next 10 seconds the price trend is generally upward, but at some random moment there is a brief downward spike. The model would have to predict that spike, otherwise it gets penalized. But in reality, we don’t care much about that random blip — what we want the model to capture is the overall upward movement.\ Piemēram: diagrammā mēs salīdzinām vidējo vērtību 1 sekundē pret 10 sekundēm. 10 sekunžu mērķi ir daudz vieglāk paredzēt, vismaz vienkāršai regresijai, jo tajā ir daudz mazāk nejauša trokšņa. Don’t Predict Price, Predict the Crowd Dažreiz ir gudrāk paredzēt nevis cenu, bet pūļa reakciju.Tehniskie modeļi, piemēram, “galva un pleci”, var trūkst zinātniskās stingrības – tomēr, ja pietiekami daudz tirgotāju tiem tic un rīkojas, cena faktiski pārvietojas.Mūsu algoritms izmanto šos uzvedības signālus: tas nemēģina modelēt “tirgus fiziku”, bet uzzina dalībnieku reakcijas. Citiem vārdiem sakot, ja jūs ML modelim “piedodiet”, ko tieši mēs meklējam datos (piemēram, gadījumos, kad tirgus dalībnieki cenšas pabeigt noteiktu tehniskās analīzes modeli), modelis mācās daudz efektīvāk. Bootstrapping and augmenting limited data Bootstrapping un ierobežotu datu palielināšana Ja jūs izlasīt cenas reizi sekundē, jūs galu galā ar kaut ko tādu kā 60 reizes × 60 reizes × 8 tirdzniecības stundas × 5 dienas nedēļā × ~ 50 nedēļas (izņemot brīvdienas) ≈ 7 200 000 punkti gadā - zem 10 miljoniem. Protams, ir HFT dati, kur kaut kas notiek ik pēc milisekundēm, bet tas tikai atgriež pirmo problēmu: tonnu trokšņu un ļoti maz faktisko signālu. Mašīnu mācīšanās pamatā ir statistika, un statistikai ir triki, lai strādātu ar maziem paraugiem. Bootstrapping Ideja ir vienkārša: teiksim, ka jums ir 100 novērojumi, bet jūs vēlētos 1000. Jūs atkārtoti lietojat nejaušus apakšsistēmas — piemēram, 50 vienumus katrs — un aprēķināt statistiku. iespējamo kombināciju skaits “100 izvēlēties 50” ir milzīgs. Pievilcība ir tāda, ka laika sērijā tas gandrīz nedarbojas - jūs nevarat vienkārši sagriezt secību gabalos, nezaudējot hronoloģiju.Tāpēc klasisko bootstrapping reti izmanto cenu prognozēšanai.Bet tādos uzdevumos kā 100 tirdzniecības darījumu analīze, to var piemērot: jūs varat vidēji pārsniegt sākotnējo simtu, vai izveidot vairākus nejaušus apakšsistēmas 50 un vidēji šos rezultātus. Data augmentation Otrā stratēģija ir mākslīgi paplašināt datu kopu. Attēlos tas ir vienkārši: rotēt, izkropļot – un jūs saņemsiet jaunu piemēru. Tekstā arī. Ar finansēm tas ir grūtāk, bet daži triki joprojām darbojas. Vienkāršs piemērs: ja modelis ir apmācīts tikai bull tirgū, tas vienmēr ierosinās “pērk”. Tiklīdz tirgus pagriežas uz leju – sākas zaudējumi. pārvērst izaugsmi kritumā, pārvērst pirkumus pārdošanā, Labās ziņas pārvērš sliktās. Algoritms mācās no šādiem scenārijiem un sāk pārdot krītošā tirgū. Synthetic trade generation is a that still has many open questions field laukums laukums Pieeja ir salīdzinoši vienkārša: veiciet reālas tirdzniecības, pielāgojiet tās sadalījumam (vai sadalījumu kopumam), un pēc tam paraugu no šī sadalījuma, lai ražotu papildu sintētiskos datus. Pēdējie pētījumi arvien vairāk balstās uz ģeneratīviem modeļiem: difūzijas modeļiem, GAN, variācijas autoencoderiem. Piemēram, dokuments “Sintētisko finanšu laika sēriju ģenerācija ar difūzijas modeļiem” apraksta metodi, kurā pasūtījumu grāmatu sērijas tiek pārveidotas par wavelet telpu, kas ģenerēta, izmantojot DDPM, un pēc tam atgriežas atpakaļ uz laika sēriju. Vēl viens piemērs ir TransFusion, kas apvieno difūzijas un transformatoru arhitektūras, lai radītu garas, augstas ticamības sintētiskās laika sērijas. Galvenais uzdevums ir saskaņot divas prasības: no vienas puses, saglabāt tirgus stilizētos faktus (tauku astes, volatilitātes klasterēšana, autocorrelācijas utt.), un, no otras puses, izvairīties no pārmērīgi sintētiskiem artefaktiem. Time shifts Ir arī laika maiņas tehnika: izmantojot tos pašus datus, bet ar aizkavēšanos.Problēma ir tāda, ka ir viegli nejauši “pievērsties nākotnei” (skatu priekšā).Tas ir klasiska inženiertehnisko kļūdu: apmācību komplekts beidzas ar datiem, ko modelim vajadzētu prognozēt. Vēl viena tehnika ir laika maiņas: atkārtota to pašu datu izmantošana ar aizkavēšanos.Galvenā problēma šeit ir risks ieviest skatīšanās priekšā aizspriedumu - klasisku inženiertehnisko kļūdu, kurā apmācības komplekts nejauši satur tieši tos datus, kurus modelim ir paredzēts prognozēt. Noderīga analogija ir laika apstākļi: ja tagad lietus, ir liela varbūtība, ka tas turpināsies lietus. Bet lietus prognozēšana, kad visi jau nēsā lietussargus, pievieno maz vērtības. Tirdzniecība darbojas līdzīgā veidā: kad tikko ir bijusi liela cenu kustība, nākamā kustība, iespējams, būs arī liela. ** Pielāgošanās mainīgajiem tirgiem ar kompleksiem un slīdējiem logiem ** Trešā problēma – tirgi uzvedas kā savvaļas rietumi. Viss mainās ātri. Jūs varētu teikt: “Mēs apmācīsimies tikai ar jaunajiem datiem no pēdējiem mēnešiem.” Ensembles Viena praktiska pieeja ir ansambļi. Jūs apmācāt vairākus modeļus: one on the most recent days or weeks, another on the entire history, a third on some mid-range horizon. and a fourth that focuses on special cases — for example, detecting noise patterns or technical-analysis formations, as discussed earlier. Then you aggregate their predictions (e.g., by averaging, or taking the min/max). This is a standard trick for dealing with heteroscedastic data — where the distribution is non-stationary and constantly shifting. Markets are exactly that kind of case. pred1 = model_recent.predict(x) pred2 = model_history.predict(x) pred3 = model_midterm.predict(x) final = np.mean([pred1, pred2, pred3]/ # final = np.max([pred1, pred2, pred3]) The idea is that the market may change tomorrow, but some of the old information is still useful. Averaging helps smooth out these distortions. Sliding windows Another technique is training on sliding windows. Take the last 7 days, predict the next one. Then shift the window: add new data, drop the old. The model keeps updating, allowing it to adapt to new market regimes. window = 7 for t in range(window, len(data)): model.fit(data[t-window:t]) pred = model.predict(data[t]) So why is there no universal ML for trading? So, each of the three problems can be solved on its own, but together they don’t add up to a universal solution. One reason is the lack of quality feedback for training models. In finance, you don’t have the usual ML metrics like accuracy or F1-score. The only metric is money made. Imagine two hedge funds. One shows average returns, the other twice as high. If someone consistently outperforms the rest, everyone immediately assumes it’s a scam. Why? First, because nothing like that shows up in the market — other participants don’t feel like someone is “skimming” them on every trade. Second, there’s the survivor bias. Classic example: take a thousand people, half go long on oil, half go short. The next day, half of them are right. From the remaining 500, split again, and repeat for several rounds. After ten days, you’ll have one “genius” who made the right call ten times in a row. But in reality, he was just lucky — the illusion comes from starting with a thousand players. This is the core problem of verification. There isn’t much data to train on, and there’s even less to validate results. Even if we could see trades from a fund that outperforms the market twofold, over a relatively short horizon we still wouldn’t be able to tell luck from real skill. A good example is the many “one-day wonders” — funds or companies that show great returns when the overall market is going up (say, during an S&P 500 rally). But as soon as conditions turn south, their performance collapses. Over the long run, there are indeed legendary cases like the Medallion Fund. They consistently beat the market, delivering returns above so-called risk-free bonds. But the edge isn’t by orders of magnitude — it’s a few percentage points. To do better than them means being ahead by fractions of a percent, sustained over a very long horizon. The reality is that few funds survive long enough to prove such stability. Over six months, almost anyone can “look like a genius” if they get lucky — that’s the classic survivor bias. And not surprisingly, it’s exactly this illusion that a lot of flashy marketing campaigns for “successful” funds are built on. The philosophical takeaway is a harsh one: an algorithm can’t be called successful until it’s been tested by time. Even if it’s profitable on average, in real life it can get wiped out in a single day with a million-dollar drawdown — simply because you don’t have an extra million lying around to survive that day.