A principis del 2010, les xarxes Uns 300 milions de dòlars en una línia directa de fibra òptica entre Chicago i Nova York. En aquell moment, Chicago era el principal centre de negociació de futurs, mentre que Nova York gestiona les accions. Les rutes regulars van prendre desviacions que van afegir desenes de quilòmetres, però el nou cable va reduir la latència de ~17 a ~13 mil·lisegons. Inversió Inversió Per al comerç d'alta freqüència, aquells 3-4 ms eren un avantatge massiu.Qui hagués vist les dades una mica abans podia posar les ordres primer i agafar la liquiditat.El lloguer d'accés a la línia costava milions de dòlars a l'any, però es va pagar - mil·lisegons literalment convertits en diners. Si les empreses estiguessin disposades a gastar centenars de milions només per raspallar-se 3-4 mil·lisegons, imagineu-vos l'avantatge d'un model ML que no reacciona (fins i tot instantàniament), sinó que en realitat prediu els moviments del mercat. Així que per què no veiem històries d'èxit públic de ML en finances? Pots mirar-ho de dues maneres. Un és que els resultats existeixen però no es comparteixen. De tant en tant, veuràs un paper amb bons números, però són rars i normalment triturats. L'altre és que hi ha obstacles reals. Les dades financeres són simplement més difícils de treballar que les dades en altres dominis, principalment per tres raons: Molt soroll No hi ha prou dades Mercats en constant canvi Aquesta combinació fa que les dades financeres siguin molt diferents de les dades meteorològiques, on el soroll és menor perquè el sistema segueix les lleis de la física, les dades són abundants gràcies a satèl·lits i sensors que produeixen terabytes d'observacions cada dia, i la física subjacent roman estable, de manera que fins i tot les dades antigues romanen útils. Per a cadascun d'aquests problemes en Finances, hi ha correccions conegudes. Aniré a través d'ells a continuació. El problema és que només funcionen aïllats. Com diuen, només en pots triar dos. Reducing noise with filters and aggregation Reducció de soroll amb filtres i agregació La sèrie de temps financer ve amb un senyal feble enterrat en el soroll. Els preus fluctua cada segon - notícies, rumors, moviments de grans jugadors. Fins i tot enllaços senzills com "bones notícies → preu puja" sovint es trenquen. Hi ha dues fonts principals de soroll: 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) L'IBM Heron "Quin serà el preu de les accions d'Apple d'un segon a partir d'ara?" When More Volume Means More Noise No obstant això, també hi ha un efecte invers: de vegades compta amb Comparar els dos gràfics: mostren els preus mitjans BTCUSDT en Binance, pesats per diferents volums de comerç. En el primer cas, el gràfic pesat en volum de 50 milions de dòlars es veu "menys sorollós" - això va succeir durant una caiguda ràpida del preu. En el segon cas, però, la mateixa mitjana ponderada mostra salts molt més "random". Això va ocórrer perquè, durant un període de preu més tranquil, els participants van moure més sovint les seves grans comandes més profundament en el llibre d'ordres, que al seu torn va afectar el preu mitjà pesat. més Pot semblar sorprenent: si simplement compteu el nombre de canvis per a cadascun d’aquests tres indicadors durant el període del 22 d’agost al 22 de setembre, en realitat obtindreu un augment en les dades quan “medieu” el preu. P1_1_market_hits.csv: 2.374.605 punts de dades P2_500k_market_hits.csv: 51,309,973 punts de dades P3_50m_market_hits.csv: 133.191.896 punts de dades La solució és aquesta: la mitjana de vegades pot empitjorar les coses. Smarter Targets Beat Raw Prices Una altra manera de "reduir el soroll" i "ajudar ML" és reformular l'objectiu de predicció mitjançant la mitjana del soroll al llarg del temps. Una més robusta és: Això soluciona dos problemes a la vegada: Anem a preveure el preu exacte 10 segons a partir d'ara. “Preguntem el preu mitjà ponderat en volum durant els pròxims 10 segons”. 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.\ Com a exemple: en el gràfic comparem la mitjana sobre 1 segon versus 10 segons. L'objectiu de 10 segons és molt més fàcil de predir, almenys per a una simple regressió - perquè conté molt menys soroll aleatori. Don’t Predict Price, Predict the Crowd A vegades és més intel·ligent predir no el preu en si, sinó la reacció de la multitud. patrons tècnics com "cap i espatlles" poden mancar de rigor científic - però si prou comerciants els creuen i actuen, el preu de fet es mou. En els nostres algoritmes, normalment separem aquest enfocament del general.En altres paraules, si “sensibilitzem” al model ML exactament el que busquem en les dades (per exemple, casos en què els participants en el mercat intenten completar un cert patró d’anàlisi tècnica), el model aprèn molt més eficaçment. Bootstrapping and augmenting limited data Bootstrapping i augment de dades limitades El segon gran repte és la manca de dades.Pren les accions d'Apple, per exemple.Si mostres els preus una vegada per segon, acabes amb alguna cosa com 60 vegades × 60 vegades × 8 hores de negociació × 5 dies a la setmana × ~ 50 setmanes (excloent vacances) ≈ 7.200.000 punts per any - menys de 10 milions. Per descomptat, hi ha dades HFT on alguna cosa succeeix cada mil·lisegonada, però això només porta el primer problema: tones de soroll i molt poc senyal real. En el seu nucli, l'aprenentatge automàtic és estadística, i l'estadística té trucs per treballar amb mostres petites. Bootstrapping La idea és simple: digueu que teniu 100 observacions, però us agradaria 1.000. Repeteixeu prenent subconjunts aleatoris, per exemple, 50 elements cadascun, i computeu estadístiques. El nombre de combinacions possibles de "100 triar 50" és enorme. La captura és que per a la sèrie de temps això amb prou feines funciona - no es pot simplement tallar una seqüència en trossos sense perdre la cronologia. És per això que el bootstrapping clàssic rarament s'utilitza per a la predicció de preus. Data augmentation La segona estratègia és ampliar artificialment el conjunt de dades. En imatges, això és simple: girar, distorsionar - i obtens un nou exemple. En text, també. Amb finances és més difícil, però alguns trucs encara funcionen. Un exemple senzill: si un model està format només en un mercat de bous, sempre suggerirà "comprar". Tan aviat com el mercat gira cap avall - comencen les pèrdues. Per mitigar això, podeu invertir les dades: convertir el creixement en decadència, convertir els compradors en venedors, Converteix les bones notícies en dolentes. L'algorisme aprèn d'aquests escenaris i comença a vendre en un mercat en caiguda. Synthetic trade generation is a that still has many open questions field El camp El camp L'enfocament és relativament senzill: prendre comerços reals, encaixar-los en una distribució (o un conjunt de distribucions), i després la mostra d'aquesta distribució per produir dades sintètiques addicionals. Les recents investigacions s'apliquen cada vegada més als models generatius: models de difusió, GAN, autoencoders variatius. Per exemple, l'article "Generació de sèries temporals financeres sintètiques per models de difusió" descriu un mètode en el qual les sèries de llibres d'ordre es transformen en espai ondulat, generat a través de DDPM, i després invertit en sèries temporals. Un altre exemple és TransFusion, que combina arquitectures de difusió i transformador per generar llargues sèries de temps sintètiques d'alta fidelitat. La tasca principal és conciliar dues demandes: d’una banda, preservar els fets estilitzats del mercat (cotes grasses, agrupament de volatilitat, autocorrelacions, etc.), i, d’altra banda, evitar artefactes sobre-sintètics. Time shifts També hi ha una tècnica de canvi de temps: utilitzant les mateixes dades, però amb un retard. El problema és que és fàcil “mirar cap al futur” (prejudicis de mirar cap endavant). Això és un error d’enginyeria clàssic: el conjunt de formació acaba contenint dades que el model hauria de predir. Una altra tècnica és el canvi de temps: reutilitzar les mateixes dades amb un retard. El principal problema aquí és el risc d'introduir un prejudici de mirar cap endavant - un error d'enginyeria clàssic on el conjunt d'entrenament conté accidentalment les mateixes dades que el model està destinat a predir. Una analogia útil és el temps: si ara plou, la probabilitat és alta que continuï plujant. Però predir la pluja quan tothom ja està portant paraigües afegeix poc valor. El comerç funciona de manera similar: quan només hi ha hagut un gran moviment de preus, el següent moviment també és probable que sigui gran. ** Adaptar-se als mercats canviants amb ensembles i finestres lliscants **El tercer problema: els mercats es comporten com el salvatge Oest. Tot canvia ràpidament. Es podria dir: “Aprènm-nos només a les dades fresques dels últims mesos.” Ensembles Una aproximació pràctica és ensembles. Vostè forma diversos models: 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.