Sonzoy selects a strategy using defined evaluation rules. Every rule below is written exactly as the code applies it. When nothing passes the rules, the bot stays in cash for that market.
For each asset class, 121–168 recipes (entry style × timeframe × stop/target × break-even) are replayed trade by trade on 45 days (5- and 15-minute bars) to a year (crypto) of eToro's own prices. Each trade pays eToro's spread and fees, plus overnight financing on CFDs. Entry is at the next bar's open, a bar that touches both the stop and the target counts as a stop, and a gap through a level fills at the bar's open.
Each market's history is split in half by date. A recipe must pass every one of these on the older half only:
Among those that pass: among recipes passing every older-half rule, the highest older-half return per market per month.
The chosen recipe is then checked once on the newer half, which played no part in choosing it. It must pass all of these, or the asset class is set to stay in cash:
Many recipes are tried and markets move together, so a per-trade t-statistic overstates confidence. Demo accounts trade a recipe only if it also clears a multiple-testing threshold on a day-clustered t-statistic makes money in a rolling walk-forward test where each fold is chosen without seeing its own data, and stays profitable on the newer half after an assumed market-order slippage (indices 0.01%, fx 0.005%, commodities 0.02%, stocks 0.03%, crypto 0.1% per side). Real-money accounts use these checks once the operator has reviewed them.
A t-statistic threshold is a screening rule, not proof of an edge: many recipes are tested, trades overlap in time and markets move together, so ordinary per-trade t-statistics overstate confidence.
The lab re-runs every 7 days (the admin can run it sooner). A class switches recipe only when a new run picks a different one; open trades keep their own stop, target and time stop. In the classic best-fit rule, each market re-picks among 10 classic strategies every 6 hours using the previous 600 bars, and the in-app backtest replays that walk-forward: each block of 100 bars uses only the bars before it.
| Asset class | Verdict | Best candidate | Newer half per market / month | Test dates |
|---|---|---|---|---|
| commodities | stay in cash | 15-min best-fit momentum (current) (1.5σ), stop 1.5 ATR, target 1.5 ATR closest rejected candidate (never selected, never traded)
| −6.95% | 2026-09-28 → 2026-11-02 (split 2026-10-16) |
| indices | stay in cash | 15-min fade stretched moves (2σ), stop 3 ATR, target 2 ATR closest rejected candidate (never selected, never traded)
| −1.53% | 2026-09-28 → 2026-11-02 (split 2026-10-15) |
| crypto | stay in cash | 4-hour buy dips / sell rallies in the trend (1.5σ), stop 3 ATR, target 1.5 ATR closest rejected candidate (never selected, never traded)
| −2.99% | 2025-09-08 → 2026-11-02 (split 2026-04-06) |
| stocks | stay in cash | 1-hour trend breakout (1.5σ), stop 3 ATR, target 1.5 ATR closest rejected candidate (never selected, never traded)
| −2.88% | 2026-07-06 → 2026-11-02 (split 2026-09-01) |
| fx | stay in cash | 15-min fade stretched moves (2σ), stop 3 ATR, target 1 ATR closest rejected candidate (never selected, never traded)
| +0.37% | 2026-09-28 → 2026-11-02 (split 2026-10-14) |
A rejected candidate is shown so you can see how close the best one came. It was never selected and never traded.
Trend filter: price above the 200-bar EMA and the 50-bar EMA above the 200-bar EMA (down-trend: the mirror image). Enter in the trend's direction...
Timeframes: 5-min, 15-min (CFDs) · 15-min, 1-hour (stocks) · 1-hour, 4-hour (crypto) →
Same trend filter as the breakout. In an up-trend, buy when the last 12 bars fell at least k standard deviations (k = 1.0 or 1.5); in a...
Timeframes: as above →
No trend filter. Sell after the last 12 bars rose at least k standard deviations, buy after an equal fall (k = 2.0 or 2.5): a bet that very fast...
Timeframes: as above →
Each market trades the single classic strategy (below) that made the most after costs on the previous 600 bars; it enters only when that strategy...
Timeframes: 5-min by default →
Long while the 9-bar EMA is above the 21-bar EMA, short while below.
Timeframes: any →
Long after a close above the previous 20-bar high, short after a close below the 20-bar low.
Timeframes: any →
Long when price is above its level 12 (or 48) five-minute bars ago, short when below.
Timeframes: 5-min →
Long above the Supertrend line (10-bar ATR × 3), short below.
Timeframes: any →
Long when MACD (12/26) is above its 9-bar signal and rising, short in the reverse case; holds until the opposite signal.
Timeframes: any →
Long on a 20-bar high breakout, short on a 20-bar low breakout.
Timeframes: any →
Long while price is above the SAR dots, short below.
Timeframes: any →
Long above the cloud with Tenkan above Kijun, short below the cloud with Tenkan below Kijun.
Timeframes: any →
After Bollinger Bands contract inside the Keltner Channel, trade the direction of the breakout.
Timeframes: any →