Category: Uncategorized

  • My First 100 Stupid Questions

    The dumbest one unlocked everything.

    I have asked artificial intelligence roughly a hundred stupid questions. Maybe more. I stopped counting somewhere around the time I stopped feeling embarrassed.

    Here is the thing nobody tells you about learning at sixty: the hardest part isn’t the technology. It’s the shame of not knowing.

    “Explain it like I’m a villager”

    My earliest questions weren’t even about code. They were: I want to do this — where do I start? How? And then, holding up a piece of code: translate this into plain folk language so I can understand the problem.

    I didn’t ask “teach me programming.” I asked a machine to speak human to me first.

    The three questions that never got old

    Over the months, three questions became my permanent toolkit — I asked them about every piece of code I touched:

    1. What does this line actually mean?
    2. Why does it have to be there?
    3. If I remove it, what breaks in the whole system?

    The AI answered all three. Every time. It never sighed, never said “we covered this yesterday.” A human teacher would have lost patience by question thirty. The machine was on question ninety-nine with the same calm as question one.

    Ask, break, ask again

    Here is a loop I lived in for months: ask the AI, follow its answer, watch it fail, ask again differently, fail again, ask a third way — and suddenly it works.

    My favorite embarrassment: I once spent days asking the AI to fix an EA dashboard that refused to appear on the chart. Back and forth, back and forth — and I even scolded the AI for not understanding me. Then one night, lying in bed with my hands behind my head, I asked myself: why is this so weird? And it hit me: every time I updated to a new EA version, I forgot to change the EA’s name in the Tester’s “Expert” field. I had been testing the OLD version over and over — of course nothing changed.

    I went straight back to the computer. And there it was: the beautiful dashboard, working since several versions ago. I slapped my forehead. How dumb can you be.

    Somewhere inside loops like that I learned the real lesson: the problem was rarely that the AI was wrong. The problem was me — my mistake, my impatience, my question not good enough yet. Learning to ask well turned out to be the actual skill. The code was just the excuse.

    The free-tier university

    I studied on the free tier. When my questions ran out, someone taught me a trick: switch to another account and keep going. My university had many doors — when one closed for the day, I knocked on the next.

    Was it elegant? No. Did it work? Completely. The limits didn’t stop the learning; they scheduled it. The 2 a.m. sessions, the rationed questions — scarcity made every single question count.

    The only stupid question

    People my age often don’t start because they’re afraid of looking foolish. I understand — I felt it too, every time I typed something a teenager would laugh at.

    But here is what a hundred stupid questions taught me: the only stupid question is the one pride won’t let you ask.

    The machine never laughed. Not once. And because it never laughed, I never stopped asking. That — more than any code I ever copied — is what built everything.


    Next: I Built the Machine — from doing tasks to building systems that do tasks.

  • I Built a Machine That Reads Crypto News So You Don’t Have To

    Four times a day, every day: the latest crypto news, distilled to what actually matters.

    Here’s a confession: I don’t have time to read crypto news. Between validating trading systems and building automation, my information diet was either doom-scrolling X at midnight or reading nothing at all. Both are bad.

    So I did what I always do — I built a machine.

    What it does

    Four times a day (04:00, 10:00, 16:00, 22:00 UTC), the system pulls the latest stories from established crypto outlets — Cointelegraph, CoinDesk, Decrypt, and a few others — and publishes a distilled brief on vetting-smart.top. Every brief follows the same honest structure:

    • Confirmed facts — what the source actually reported, nothing more.
    • Possible implications — what it might mean, clearly labeled as interpretation.
    • Source limitations — what we don’t know, and where the reporting could be thin.

    That last section is the whole point. Most crypto news aggregators give you the hype. I wanted the part everyone skips: what’s missing from this story.

    What it is not

    Let me be direct, because this brand runs on honesty:

    • It’s not original reporting. The machine curates and distills; the journalists do the reporting, and every brief links back to them.
    • It’s not real-time. Four briefs a day, on a schedule — not a firehose. If you need second-by-second news, this isn’t it.
    • It’s not financial advice. It’s an information filter, nothing more.

    Why I built it this way

    The same instinct behind the whole Vetting Smart project: most information products optimize for your attention. I wanted one that optimizes for your time. One minute per brief, four times a day, and you know what happened — plus what to be skeptical about.

    It runs on the same automation stack as everything else here: scheduled, unattended, no human in the loop. I check the output the way I check my EA — periodically, not obsessively.

    If you trade crypto, follow the space, or just want to stop doom-scrolling: the briefs are free, on the blog, four times a day.


    We vet tokens. We vet systems. We vet ourselves — including our news diet.

  • Someone open-sourced a hedge fund. 109,000 stars. I read the code — and I’m keeping my boring EA.

    A few weeks ago, tech Twitter was buzzing: a GitHub repo called TradingAgents — a “multi-agent LLM financial trading framework” — had crossed 100,000 stars. The pitch writes itself: instead of one trading bot, you get a whole AI trading firm. Four analyst agents (fundamentals, sentiment, news, technicals). Bull and bear researchers who debate the analysts’ findings. A trader agent that synthesizes the debate into a plan. A risk manager with veto power over every trade.

    It’s a genuinely beautiful architecture. Debate before decision is how good firms actually work. I mean that as a compliment — and then I’m going to explain why none of it helps my forex trading.

    Reason 1: It eats food my market doesn’t serve

    Look at what the analyst agents consume: earnings reports. SEC filings. Fundamental ratios. News sentiment about companies.

    Now look at my market: XAU/USD. Gold doesn’t file a 10-K. EUR/USD doesn’t report quarterly earnings. Strip the fundamentals analyst, the earnings-driven news analyst, and half the sentiment pipeline, and you’ve removed the load-bearing walls of the whole building. What’s left is a technical analyst and vibes — and I already have 11.75 years of evidence about what pure technical structure is worth (Part 2 of this series).

    A framework built for US equities doesn’t transfer to forex by changing the ticker symbol.

    Reason 2: It’s a research framework, not a trading system

    TradingAgents doesn’t connect to MT5. It doesn’t connect to any broker. It has no order management, no position sizing against a live account, no spread filter, no session handling. It’s a decision-research tool: you ask it “should I buy NVDA?”, it runs its debate and prints an answer.

    Between that answer and a live trade on my VPS sits everything that actually makes or breaks a system — the exact plumbing I spent a year validating. Stars don’t fill that gap. Code I write, tested against 833,000 bars, does.

    Reason 3: Every decision is a committee meeting with a catering bill

    Each “trade decision” fires a cascade of LLM calls: four analysts, two debaters, a trader, a risk manager — each one a separate model invocation, each one billed. You’re paying for a board meeting every time you want an opinion.

    And opinions are cheap. In Part 3 of this series, I built my own ML filter on 819 real signals with strict walk-forward validation. Result: AUC 0.52. A coin flip with a catering bill. There is no published walk-forward evidence that these debating agents clear that bar either — 109,000 stars is a popularity metric, not a profit factor.

    Reason 4: It’s the same trap I already escaped

    This is the uncomfortable one. My dead ML filter (Part 3) and TradingAgents share a shape: impressive machinery, zero demonstrated edge. Complexity feels like progress. A bull-versus-bear debate feels more rigorous than a breakout rule. But “feels rigorous” is not a backtest.

    My rule for anything new is the same kill rule from Part 3: define the pass criteria before looking, then honor the result. Until someone shows me a walk-forward of agent decisions with a profit factor attached, the agents stay in the “interesting to read” bucket.

    The verdict

    Read the repo. Steal the good ideas — the debate-before-decision pattern is genuinely worth thinking about, and the risk-manager-as-veto is a clean design. But don’t let 109,000 stars shake a system you validated yourself.

    Popularity is not evidence. Complexity is not edge. And the shiniest framework on GitHub still has to answer the only question that matters: show me the forward test.


    We vet tokens. We vet systems. We vet ourselves — including our urge to chase shiny things.

  • My Trading EA Went Live Today. The Hardest Rule: Don’t Touch It.

    Setup B survived 11.75 years of backtesting and killed my AI filter. Now it runs on a VPS with default inputs — and I promised not to touch it for 6 months.

    This is Part 4 of the honest validation series. In Part 1, a coding bug inflated my results. In Part 2, I published the real backtest: 819 trades, +196R, profit factor 1.37. In Part 3, I trained an AI filter — and the walk-forward test killed it. What remains is the simplest thing of all: pure rules, running on a server, with me forbidden from interfering.

    Today, Monday October 12, the EA went live.

    What exactly is running

    The EA is called FibGann_BreakoutEA_v2. It trades one setup and one setup only — Setup B, the M15 breakout, the only pattern that survived the full validation pipeline. Everything else (Setup A, the ML layer) is gone, not hidden.

    Its rules, frozen in code:

    • Stop loss: 1.5× ATR(14) on M15 — one and a half average ranges, structural, no guessing.
    • Entry: the M15 close beyond the consolidation zone, no M5 confirmation trigger (kept as a documented backup variant, not shipped).
    • TP1 at 3R: close half, move stop to breakeven. TP2 at 6R: let the rest run.
    • Fail-breakout exit: if a M15 candle closes back inside the zone, the breakout failed — exit. Time exit: 24 hours, no lingering.
    • One trade at a time, max 3 per day, 7–23 server time, spread filter at 500 points. No grid, no martingale, no averaging down.
    • Risk: 1% of equity per trade, lot size auto-computed from the stop distance, broker minimums, and a margin check.

    The v2 addition is two daily guards: stop opening new trades at +10% of the day’s starting balance, and close everything at −5%. Honest admission: with 1% risk and at most 3 trades a day, −5% is nearly unreachable (three full losers is −3%), and +10% only happens on a freak day. They are safety rails, not profit drivers. I publish them anyway, because secret settings are how honest systems die quietly.

    What I expect — written down before looking

    Expectations, set in advance, because that’s the discipline of this series:

    • ~30–70 trades per year. Roughly one a week. There is nothing to watch daily.
    • Winrate ~24%. Three out of four trades lose. The edge lives in the winners being 3–6× the losers.
    • Profit factor ~1.2–1.4, below the 1.37 backtest. Real ticks mean real spread, real slippage, real requotes. A forward test that beats its backtest is usually a red flag, not a celebration.
    • The first week is macro-heavy: US CPI Wednesday, PPI and retail sales Thursday. If the EA takes losses around those releases — spread widening, spikes, stops hit — that is the week, not the system.

    If I had to bet one number: roughly +0.1 to +0.15R per trade after costs. Modest. Boring. That’s the point.

    The promise

    Six months, untouched. No parameter changes. No manual closes. No “just this once” after a losing streak, and no victory lap after a winning month. The backtest and the forward test must speak for themselves, on the same settings.

    Why publish a promise in public? Because the hardest part of systematic trading is not the code — it’s the operator. Every EA graveyard I know was dug by someone who “improved” a live system mid-drawdown. The public promise is my insurance against myself.

    Why this is the end of the research phase

    The honest-quant posture is: every layer you add must earn its place. The AI filter didn’t. Setup A didn’t. Tweaks with names like “CONSOL=8” looked good until spread and slippage ate them. What survived is one setup, one risk model, one promise.

    I closed new-system research deliberately. From here, the only updates are the honest monthly check-ins: trades taken, R accumulated, what the macro weeks cost, and whether the forward numbers still resemble the backtest. If they stop resembling it, I will say so — that’s what Part 2’s full disclosure was for.


    This is Part 4 of 4. We vet tokens. We vet systems. We vet ourselves.

    Start from the beginning: Part 1: the bug that lied to me. The numbers: Part 2: 819 trades, every number public. The dead AI: Part 3: the autopsy.

    Not financial advice. Research and education only.

  • I Trained an AI to Predict Gold Prices. It Flipped Coins. Here’s the Autopsy.

    After 819 trades of pure rules, the tempting next step was AI. I built the full ML filter — then let walk-forward testing kill it.

    In Part 2, I published the complete backtest of Setup B: +196R over 11.75 years, profit factor 1.37, every number public. The obvious next move was to bolt on machine learning and squeeze out more. So I did it properly — 10 clean features, no leakage, walk-forward validation — and the models told me, to my face, that they had nothing.

    This is the autopsy of an honest negative result.

    The setup: built to not fool myself

    The ML filter’s job was simple: look at each Setup B signal and predict whether it would win. The design rules were strict:

    • 10 features, all known at signal time: direction, distance from EMA in ATR units, Stochastic K/D, reward-to-risk to first target, leg size in ATR units, hour and day-of-week encoded as sine/cosine. Nothing a trader couldn’t see on the chart at that moment.
    • Aggressively removed anything from the future: the outcome, the R-multiple, how long the trade lasted, the maximum favorable/adverse excursion — all banned. Also removed three features that turned out to be constants for Setup B (they’d only add noise dressed as signal).
    • Label: 1 if the trade won (195 of 819 = 23.8%), 0 otherwise.
    • Validation: 5-fold TimeSeriesSplit — train on the past, test on the future, never shuffled. 680 out-of-sample predictions pooled.

    If the features carried no real information, this design would show it. That’s the point of doing it this way.

    The result: two models, one verdict

    • Logistic Regression: walk-forward AUC 0.514 — no signal
    • HistGradientBoosting: walk-forward AUC 0.523 — no signal

    A coin flip scores 0.50. My models scored 0.51–0.52. Per fold, the AUC swung between 0.43 and 0.60 — pure noise around the coin line, not a stable edge hiding in one regime.

    The features simply could not tell winners from losers.

    The illusion I almost fell for

    Here is the dangerous part. Slice the predictions by confidence threshold and one number looks delicious: gradient boosting at threshold 0.3 gives 194 trades, profit factor 1.54 — better than the 1.37 baseline.

    I almost wrote the “AI improves my system” post. Then I checked where the threshold came from: it was picked on the evaluation set itself. Choose the cutoff after seeing the answers, and any random model can look skilled. That’s not forecasting — that’s the threshold-selection illusion.

    Discipline means deciding your pass criteria before you look.

    The kill rule — set in advance, honored in public

    Before training, I wrote down the bar a model had to clear to ship:

    • Profit factor ≥ 1.3, and beats the 1.37 baseline
    • At least 100 trades
    • Walk-forward AUC ≥ 0.55

    The models failed the AUC bar (0.523 < 0.55). So the training pipeline — built to enforce this automatically — refused to export the model. No ONNX file was created. Nothing shipped. No human override.

    That automation matters: in the moment, with a 1.54 staring at you, a human would have rationalized. The script didn’t.

    What survived the autopsy

    A negative result is still a result — and this one had real value:

    1. A reusable pipeline: when I have a longer broker feed, I re-run one command and get a fresh verdict instantly.
    2. A verified export path: Logistic Regression exported to ONNX and reproduced identical results (error ~6e-08). Gradient boosting hit a converter incompatibility — documented so I don’t step on it again.
    3. An honest saving: I now know that bolting ML onto this rule system adds complexity with zero skill. I won’t spend months operating a useless layer — or worse, trading one.

    And the likely reason for the failure is instructive: my features describe each signal in isolation. They carry no market-regime context — no sense of whether gold is trending, choppy, or sitting under a news event. If I ever retry ML, that’s where the new features have to come from, on a longer broker-native feed.

    The point

    Adding AI to a good rule-based system did not make it better. It made it more complicated and no more predictive. So Setup B stays exactly as it is — pure rules, profit factor 1.37, no AI.

    Publishing a negative result is easy to promise and hard to do. But “my AI filter failed” is exactly the kind of sentence this series exists to print.


    This is Part 3 of a 4-part series. In Part 4, the EA went live on a VPS — and I promised not to touch it for 6 months.

    Missed the numbers? Read Part 2: 819 trades, every number public. Start at the beginning: Part 1: the bug that lied to me.

  • 819 Trades, 11.75 Years: The Complete Backtest Report

    Everyone shows you the equity curve going up. Here’s mine — including the year it went down.

    In Part 1, I told you how a lookahead bug almost made me fund a fantasy. This is what survived the bug hunt: Setup B, a breakout system, tested on 11.75 years of data. Every number below is real. Including the ugly ones.

    The system in 30 seconds

    Setup B trades breakouts from 12-bar consolidations on XAU/USD M15: ATR-based stop (1.5×), minimum 3:1 reward-to-risk, take half at the first target and move the stop to breakeven, exit after 24 hours max. One position at a time, max three trades a day. No AI, no discretion — pure rules.

    The numbers

    • 819 trades (January 2015 – August 2026, Dukascopy M5 data, ~833,000 bars)
    • +196.05R total, profit factor 1.37
    • Win rate 23.8% — yes, it loses three out of four trades
    • +0.239R per trade on average
    • 414 buys / 405 sells — no directional bias
    • 11 out of 12 years positive

    Read that win rate again: 23.8%. Most “gurus” would be embarrassed to publish it. I’m not, because the math works: small losses, occasional large wins, breakeven stop doing the heavy lifting.

    The year I lost money

    2021: −2.62R. There it is, in public.

    A system that never has a losing year is either curve-fit or lying. 2021 was a choppy, directionless year for gold, and Setup B bled slowly. If you’re evaluating any system — mine or anyone’s — ask to see the worst year. If they won’t show it, walk away.

    The surprise

    Here’s what I didn’t expect: the strongest period wasn’t the gold bull market. It was 2015–2019 — when gold mostly went sideways or down. Profit factor 1.53, +123.3R.

    That kills the obvious objection (“your system just rides the bull market”). The edge doesn’t come from the trend. It comes from the structure: tight consolidations, asymmetric payoffs, ruthless exits.

    The honest caveats

    No honest report ends without these:

    1. No spread, commission, or slippage in these numbers. Real life will shave the edge — my estimate is ~0.1–0.15R per trade after costs.
    2. Dukascopy feed ≠ my broker’s feed. Volatility on Dukascopy runs higher (ATR ~$9 vs ~$5.5). The final verdict comes from live forward-testing, which started this week.
    3. The backtest stopped at August 2026; data timestamps are GMT.

    Anyone who shows you a backtest without caveats is selling you something.

    The point

    819 trades. PF 1.37. One losing year, shown proudly. This is what a real, testable edge looks like: modest, ugly, and honest.


    This is Part 2 of a 4-part series. In Part 3, I trained an AI to predict gold prices on these 819 signals. It flipped coins — AUC 0.52. Here’s the autopsy.

    New here? Start with Part 1: the bug that lied to me. For the unfiltered numbers as they happen, subscribe to the newsletter.

  • I Almost Lost Money Because of a Stupid Coding Bug

    My backtest showed 14 wins out of 15 trades. It was a lie my own code told me.

    The scanner finished running, and I stared at the screen. 14 wins out of 15 trades. +64R. On a Fibonacci pullback system for gold that I had coded myself.

    My finger hovered over the deposit button on my broker’s website.

    I didn’t click it. Not because I’m disciplined — because I’ve been burned before. In backtesting, “too good to be true” almost always means one thing: a bug.

    The system

    I was validating a trading system distilled from two classic books on Fibonacci and Gann applications in financial markets. The rules were fully deterministic: specific Fibonacci retracement zones, RSI confirmation, ATR-based stops, strict risk management. I coded everything into an MQL5 scanner and ran it over 17 months of my broker’s M5 data on XAU/USD.

    Setup A — the Fibonacci pullback setup — was the star. 15 signals. 14 winners. +64R.

    The discovery

    Here is the iron rule of backtesting: your code may only see the past. Every signal must be computed from bars that already closed. The moment your code peeks at a single future bar, your results are fiction.

    Something about 14 out of 15 bothered me enough to go back into the MQL5 code — specifically the loop that searches for swing highs and lows. In MQL5, arrays can be set “as-series,” which means index 0 is the newest bar and higher indexes are older bars. My search loop was traversing in the wrong direction: it was scanning toward the future instead of the past.

    My scanner was trading with tomorrow’s newspaper.

    The fix

    One loop direction flipped. Spec bumped to v1.2.1. I re-ran everything on the exact same data.

    Setup A: 1 trade. −1R.

    Then I ran it on 11.75 years of Dukascopy data — 833,000 M5 bars. Across 11.6 years, Setup A produced 8 signals and lost −6.09R. The “holy grail” was completely, permanently dead.

    How I verify everything now

    That bug rewired how I work:

    1. Two independent implementations. I rewrote the scanner in Python and ran it on the raw broker data. 37 of 45 signals overlapped; 35 of 37 outcomes matched. Two codebases, one verdict.
    2. Chronological discipline. No signal may use data past its own bar close. Ever. No exceptions.
    3. If it looks too good, it’s a bug. Real edges are modest and ugly. The setup that survived — Setup B, a breakout system — has a 23.8% win rate. It looks terrible, and it works: +196R over 819 trades, 11 out of 12 years positive.

    The point

    Most trading content shows you the 14 out of 15. Nobody shows you the bug hunt.

    I vet trading systems for a living — including my own. Especially my own.


    This is Part 1 of a 4-part series on honest system validation. In Part 2, I open the full 11.75-year backtest report — every number, including the losing year.

    Want the unfiltered journey with real numbers? Subscribe to the newsletter. Trade crypto? Try the Shitcoin Radar — free, built with the same paranoia.

    Vetting Smart — Scan. Filter. Discover.

  • “Honest System Validation: A 4-Part Series”

    Most trading content shows you the wins. This series shows you the bug hunt. 🔍

    Over the next 4 days, I’m publishing everything — the full, unfiltered story of how I validated a trading system from scratch:

    Part 1  is live: I Almost Lost Money Because of a Stupid Coding Bug. 👇

    https://www.vetting-smart.top/i-almost-lost-money-because-of-a-stupid-coding-bug/

    Part 2 is live — 819 trades, 11.75 years: the complete backtest report. Every number. Including the losing year.👇

    https://www.vetting-smart.top/819-trades-11-75-years-the-complete-backtest-report/

    Part 3 is live — I trained an AI to predict gold prices. It flipped coins. Here’s the autopsy.👇

    https://www.vetting-smart.top/i-trained-an-ai-to-predict-gold-prices-it-flipped-coins-heres-the-autopsy/

    Part 4 is live— The EA goes live on a VPS. I promise not to touch it for 6 months.👇

    https://www.vetting-smart.top/my-trading-ea-went-live-today-the-hardest-rule-dont-touch-it/

    No rented cars. No guru promises. Just data, code, and every mistake I made — so you don’t have to make them.

    We vet tokens. We vet systems. We vet ourselves.

    #VettingSmart #Backtesting #AlgorithmicTrading #HonestQuant