Мульти-символдук валидация: стратегияңды бардык жуптарда сынап көр
"Иллюзиясыз бэктесттер" сериясынын макаласы
Сиз ETHUSDT боюнча стратегияны оптималдаштырдыңыз. 25 айлык маалымат, 12+ параметр. Бэктест PnL +55%, 500 сооda, MaxDD -0,9%, позиция убакыттын 15% ачык экенин көрсөтөт. Эквити ийри сызыгы жылмакай өсөт. Параметрлер плато анализинен өттү — оптимум кең көрүнөт. Walk-forward WFER > 0,6 берет. Монте-Карло бутстрэп оң 5-пайыздык чегин көрсөтөт.
Баары мыкты. Бир нерседен башка: сиз стратегияны бир гана инструментте сынадыңыз.
Ошол эле алгоритмди ошол эле параметрлер менен BTCUSDT'та ишке киргизесиз — PnL +8%. SOLUSDT'та — PnL -12%. DOGEUSDT'та — PnL -34%. ETH'де бардык текшерүүлөрдөн өткөн стратегия башка жуптардын көбүндө рентабелдүү эмес болуп чыгат.
Бул баг эмес. Бул — алгосоодада эң кеңири таралган жана жашыруун overfitting түрлөрүнүн бири — single-symbol тузагы.
Жалгыз инструменттин тузагы

Стратегияны бир гана символдо оптималдаштыруу негизинен аны белгилүү бир активдин баа динамикасына ыңгайлаштыруу дегенди билдирет. Walk-forward жүргүзүлгөн болсо да, бутстрэп кең ишеним интервалдарын көрсөтсө да — бул текшерүүлөрдүн баары бир гана убакыт катарынын чегинде аткарылган.
Walk-forward убакыт боюнча туруктуулукту текшерет: параметрлер ошол эле инструменттин келечектеги маалыматтарында иштейби. Монте-Карло соода тартиби боюнча туруктуулукту текшерет: стратегия башка ырааттуулукка туруштук бере алабы. Бирок бул методдордун бири да инструменттер боюнча туруктуулукту текшербейт: стратегия башка мүнөздөмөлөрү бар башка активдерде иштейби.
Эгер стратегия жалгыз ETHUSDT'та гана рентабелдүү болсо — ал рыноктук натыйжасыздыкты эмес, ETH баа катарынын так түзүлүшүн кармап калган:
- ETH'ке мүнөздүү өзгөчө свеча үлгүлөрү
- Босоголор ыңгайлаштырылган так волатилдик деңгээлдери
- Так ошол жуптун ликвиддүүлүгүнүн жана микроструктурасынын өзгөчөлүктөрү
- Белгилүү бир мезгилге мүнөздүү BTC менен корреляция
Мунун эч кайсынысы edge эмес. Бул инструмент деңгээлиндеги curve fitting.
Крипто рыногундагы символ топтору (Tiers)

Бардык криптовалюталар бирдей эмес. Мааниси бар мульти-символдук валидация үчүн инструменттер түп-тамырынан ар башка мүнөздөмөлөрү бар топторго бөлүнөрүн түшүнүү керек.
Tier 1: Blue Chips (BTC, ETH)
Жогорку ликвиддүүлүк, салыштырмалуу төмөн волатилдик, институционалдык агым. Макро (S&P 500, DXY, ФРБ ставкалары) менен корреляция. Терең order book'тор, тар спрэддер, туруктуу funding rate'тер. Адаттагы күндүк волатилдик: 2-4%.
Tier 2: Large Caps (SOL, BNB, ADA, XRP, AVAX)
Орточо ликвиддүүлүк, жогорулатылган волатилдик. Кыймылдар көбүнчө секторалдык динамика (L1 vs L2, DeFi vs infra) менен башкарылат. Funding rate'тер өзгөрмөлүүрөөк. Спрэддер кеңирээк. Адаттагы күндүк волатилдик: 4-6%.
Tier 3: Mid Caps (DOGE, SHIB, PEPE, ARB, OP)
Мем-коиндер жана нарративдик токендер. Жогорку волатилдик, фундаменталдык факторлор менен төмөн корреляция. Кыймылдар социалдык тармактар, листингдер, нарративдер менен аныкталат. Кээ бир биржаларда сейрек order book'тор. Адаттагы күндүк волатилдик: 6-10%.
Tier 4: Low Caps (жаңы листингдер)
Экстремалдуу волатилдик, сейрек order book'тор, манипуляция коркунучу. Толук бэктест үчүн көбүнчө жетишсиз тарых. Адаттагы күндүк волатилдик: 10-20%+.
Мүнөздөмөлөрдүн жыйынтык таблицасы
| Мүнөздөмө | Tier 1 | Tier 2 | Tier 3 | Tier 4 |
|---|---|---|---|---|
| Күндүк волатилдик | 2-4% | 4-6% | 6-10% | 10-20%+ |
| Орточо спрэд (perps) | 0.01-0.02% | 0.02-0.05% | 0.05-0.15% | 0.1-0.5%+ |
| Order book тереңдиги (топ 5 bps) | $5-50M | $1-10M | $100K-2M | $10K-200K |
| Funding rate (орточо абс.) | 0.005-0.01% | 0.01-0.03% | 0.02-0.08% | 0.05-0.2%+ |
| BTC менен корреляция | 0.85-0.95 | 0.6-0.85 | 0.3-0.7 | 0.1-0.5 |
| Эң аз тарых | 5+ жыл | 2-5 жыл | 6 ай - 3 жыл | < 6 ай |
Ар бир tier — өз микроструктурасы бар өзүнчө "дүйнө". Tier 1 үчүн ыңгайлаштырылган стратегия Tier 3'кө өткөндө бөтөн чөйрөгө кирет.
Мульти-символдук валидациянын методологиясы

1-кадам: Бир символдо оптималдаштыруу
Оптималдаштыруу үчүн символ тандаңыз — мисалы, ETHUSDT. Толук pipeline'ды иштетиңиз: Optuna оптималдаштыруу, плато анализи, walk-forward. Параметрлерди бекитиңиз.
2-кадам: Ошол эле tier'деги символдордо тестирлөө
Стратегияны ошол эле параметрлер менен ошол эле tier'дин 5-10 символунда иштетиңиз. Tier 1 үчүн бул чектелген (BTC + ETH), бирок Tier 2 жана Tier 3 үчүн символдор жетиштүү.
3-кадам: Башка tier'лердеги символдордо тестирлөө
Стратегияны ар бир башка tier'дин 3-5 символунда иштетиңиз. Бул — эң оор тест: эгер стратегия ETHUSDT'та (Tier 1) жана DOGEUSDT'та (Tier 3) иштесе, curve fitting ыктымалдыгы минималдуу.
4-кадам: Натыйжаларды топ боюнча талдоо
Метрикаларды tier боюнча топтоп, cross-symbol туруктуулукту баалаңыз.
Ар бир символ үчүн метрикалар
Ар бир символ үчүн белгилеп алыңыз:
- PnL — жалпы кирешелүүлүк
- MaxDD — максималдуу drawdown
- N trades — соода саны
- Win rate — рентабелдүү соодалардын үлүшү
- PnL/активдүү күн — активдүү убакыттын бирдигине кирешелүүлүк (толугураак активдүү убакыт боюнча PnL макаласында)
Өтүү критерийлери
Стратегия мульти-символдук валидациядан өтөт, эгер:
- Ошол эле tier'деги символдордун >= 60%'унда рентабелдүү болсо
- Топтогу орточо PnL оң болсо
- MaxDD курч өспөсө (оптималдаштыруу символуна карата 2-3 эседен ашык эмес)
- Стратегия ЖАЛГЫЗ оптималдаштыруу символунда гана рентабелдүү болсо — кабыл алынбайт
Мисал: үч стратегия, үч натыйжа

Конкреттүү мисалды карап көрөлү. Үч стратегия (Стратегия A, Стратегия B, Стратегия C), ETHUSDT'та оптималдаштырылган, төрт tier'дин 12 символунда сыналган.
Стратегия A (ETHUSDT'та оптималдаштырылган)
Параметрлер: PnL +55%, ~500 сооda, ~15% активдүү убакыт, MaxDD ~0,9%.
| Символ | Tier | PnL | MaxDD | N trades | Win rate | PnL/активдүү күн |
|---|---|---|---|---|---|---|
| ETHUSDT* | 1 | +55.2% | -0.9% | 491 | 52.1% | 0.48% |
| BTCUSDT | 1 | +31.4% | -1.8% | 478 | 50.8% | 0.27% |
| SOLUSDT | 2 | +22.7% | -3.1% | 512 | 49.2% | 0.18% |
| BNBUSDT | 2 | +18.3% | -2.7% | 467 | 48.9% | 0.16% |
| AVAXUSDT | 2 | +8.1% | -4.5% | 498 | 47.6% | 0.07% |
| ADAUSDT | 2 | -3.2% | -6.1% | 445 | 46.1% | -0.03% |
| DOGEUSDT | 3 | -12.8% | -9.4% | 531 | 44.3% | -0.10% |
| SHIBUSDT | 3 | -18.7% | -12.1% | 487 | 43.1% | -0.16% |
| PEPEUSDT | 3 | -24.3% | -14.8% | 556 | 42.7% | -0.18% |
| ARBUSDT | 3 | -7.4% | -7.2% | 419 | 45.8% | -0.07% |
| OPUSDT | 3 | -5.1% | -6.8% | 402 | 46.2% | -0.05% |
* — оптималдаштыруу символу
Tier боюнча натыйжалар:
| Tier | Символдор | Рентабелдүү | Орточо PnL | Орточо MaxDD |
|---|---|---|---|---|
| Tier 1 | 2 | 2 (100%) | +43.3% | -1.4% |
| Tier 2 | 4 | 3 (75%) | +11.5% | -4.1% |
| Tier 3 | 5 | 0 (0%) | -13.7% | -10.1% |
Корутунду: Стратегия A Tier 1-2'де иштейт, бирок Tier 3'тө толугу менен ишке ашпай калат. Бул төмөн волатилдик чөйрөсүнө ыңгайлаштырылган типтүү стратегия. Blue chips менен large caps портфели үчүн — кабыл алынгыдай. Универсалдуу колдонуу үчүн — жок.
Стратегия B (ETHUSDT'та оптималдаштырылган)
Параметрлер: PnL +25%, ~40 сооda, ~5% активдүү убакыт.
| Символ | Tier | PnL | MaxDD | N trades | Win rate |
|---|---|---|---|---|---|
| ETHUSDT* | 1 | +25.1% | -2.3% | 38 | 57.9% |
| BTCUSDT | 1 | +21.8% | -2.8% | 41 | 56.1% |
| SOLUSDT | 2 | +19.4% | -3.5% | 44 | 54.5% |
| BNBUSDT | 2 | +16.7% | -3.1% | 37 | 54.1% |
| AVAXUSDT | 2 | +12.3% | -4.2% | 42 | 52.4% |
| ADAUSDT | 2 | +8.9% | -4.8% | 39 | 51.3% |
| DOGEUSDT | 3 | +4.2% | -6.7% | 48 | 47.9% |
| SHIBUSDT | 3 | -1.3% | -8.4% | 45 | 46.7% |
| PEPEUSDT | 3 | -3.8% | -9.1% | 52 | 46.2% |
| ARBUSDT | 3 | +6.1% | -5.8% | 40 | 50.0% |
| OPUSDT | 3 | +3.7% | -6.2% | 38 | 50.0% |
Tier боюнча натыйжалар:
| Tier | Символдор | Рентабелдүү | Орточо PnL | Орточо MaxDD |
|---|---|---|---|---|
| Tier 1 | 2 | 2 (100%) | +23.5% | -2.6% |
| Tier 2 | 4 | 4 (100%) | +14.3% | -3.9% |
| Tier 3 | 5 | 3 (60%) | +1.8% | -7.2% |
Корутунду: Стратегия B 11 символдун 9'унда рентабелдүү (82%). Орточо PnL бардык tier'лерде оң. MaxDD tier'ге жараша алдын ала болжолдуу түрдө өсөт. Бул — чыныгы рыноктук edge'и бар туруктуу стратегия. Оптималдаштыруу символунда одоно PnL'ге карабастан (+25% каршы +55%), Стратегия B Стратегия A'га караганда алда канча ишенимдүү.
Стратегия C (ETHUSDT'та оптималдаштырылган)
Параметрлер: PnL +300%, ~400 сооda, ~45% активдүү убакыт, MaxDD ~17%.
| Символ | Tier | PnL | MaxDD | N trades | Win rate |
|---|---|---|---|---|---|
| ETHUSDT* | 1 | +301.2% | -17.1% | 418 | 53.8% |
| BTCUSDT | 1 | +42.7% | -28.4% | 395 | 48.6% |
| SOLUSDT | 2 | -18.3% | -41.2% | 456 | 44.1% |
| BNBUSDT | 2 | +12.1% | -33.7% | 387 | 46.8% |
| AVAXUSDT | 2 | -31.4% | -52.8% | 471 | 42.3% |
| ADAUSDT | 2 | -44.7% | -58.1% | 412 | 40.5% |
| DOGEUSDT | 3 | -67.2% | -74.3% | 528 | 38.1% |
| PEPEUSDT | 3 | -72.1% | -81.6% | 574 | 37.4% |
Корутунду: Стратегия C — классикалык overfitting. ETHUSDT'та +301%, бирок башка жуптардын көбүндө кыйратуучу жоготуулар. Tier 3'тө MaxDD 70%'дан ашат — бул капиталды жок кылуу. Стратегия ETH'дин өзгөчө үлгүлөрүн кармап калган, рыноктук натыйжасыздыкты эмес. Кабыл алынбайт.
Стратегиялар башка символдордо эмне үчүн бузулат

1. Волатилдик дал келбестиги
Эң кеңири таралган себеп. Стратегиянын параметрлери белгилүү бир волатилдик деңгээлине ыңгайлаштырылган. Эгер стратегия 2% кирүү босогосун колдонсо — 3% күндүк волатилдиги бар ETH үчүн бул акылга сыярлык фильтр. 8% күндүк волатилдиги бар DOGE үчүн бул босого өтө көп жолу иштеп, көптөгөн жалган сигналдарды жаратат.
Ошол эле сыяктуу, 1% stop loss ETH үчүн ылайыктуу, ал эми PEPE үчүн бул — калыптуу "ызы-чуу", жана стоп күнүнө ондогон жолу тийет.
2. Ликвиддүүлүк айырмачылыктары
Стратегия ордердин учурдагы баада дароо аткарылышын болжолдойт. 5 bps ичинде 200K тереңдиги бар ARBUSDT'та — сиздин $10K ордериңиз баанын жылышына алып келет, жана иш жүзүндөгү аткаруу 0,05-0,2%'га начарыраак болот. 500 соода ичинде бул slippage'ден жалгыз эле 25-100% жоготуу дегенди билдирет.
3. Рыноктун микроструктурасы
Ар бир инструменттин өз микроструктурасы бар:
- Funding rate'тер: BTC'де funding бука рыногунда туруктуу түрдө оң (ар 8 сааттан +0,01%). Мем-коиндерде funding -0,3%'дан +0,5%'ка секирип кетиши мүмкүн. Толугураак Funding rate'тер сиздин левериджиңизди жейт макаласында.
- Спрэд: Tier 1'де спрэд 0,01%, Tier 4'тө — 0,5%. Кичине take-profit'тери бар стратегия спрэд take өлчөмүнөн ашып кеткенде рентабелдүү боло албайт.
- Манипуляция үлгүлөрү: wick'тер, спуфинг, wash trading — ар бир tier'де ар башкача көрүнөт.
4. Режимге сезгичтик
Альткоиндер ар башка рынок фазаларында ар башкача жүрүм-турум көрсөтөт:
- Бука трендинде альткоиндер BTC'ден ашып кетет (бета > 1)
- Аюу трендинде альткоиндер BTC'ден катуураак кулайт
- Каптал рынокто альткоиндер BTC менен коррелияцияда болушу же өз нарративдери боюнча кыймылдашы мүмкүн
Бир фазада бир символдо оптималдаштырылган стратегия ошол символдун BTC'ге карата lag/lead'ине оптималдуу ыңгайлаштырылган болушу мүмкүн — жана режим өзгөргөндө бул lag/lead өзгөрөт.
Ыңгайлашуучу параметр масштабдоо

Стратегияны бардык символдордо бирдей параметрлер менен иштетүү туура эмес. Бирок ар бир символдо толук кайра оптималдаштыруу мульти-символдук валидациянын түпкү максатын жокко чыгарат (параметрлер ар бир символго "тубаса" болуп калат).
Компромисс — волатилдик боюнча параметрлерди нормалдаштыруу:
import numpy as np
def scale_params_by_volatility(
base_params: dict,
optimization_symbol_vol: float,
target_symbol_vol: float,
vol_sensitive_params: list[str],
) -> dict:
"""
Scale strategy parameters by target symbol volatility.
Args:
base_params: parameters optimized on the original symbol
optimization_symbol_vol: daily volatility of the optimization symbol
target_symbol_vol: daily volatility of the target symbol
vol_sensitive_params: list of volatility-sensitive parameters
"""
vol_ratio = target_symbol_vol / optimization_symbol_vol
adjusted = base_params.copy()
for param in vol_sensitive_params:
if param in adjusted:
adjusted[param] = adjusted[param] * vol_ratio
return adjusted
base_params = {
"entry_threshold": 0.02, # 2% — entry threshold
"stop_loss": 0.01, # 1% — stop loss
"take_profit": 0.03, # 3% — take profit
"trailing_stop": 0.008, # 0.8% — trailing stop
"atr_multiplier": 2.5, # ATR multiplier (not scaled)
"rsi_period": 14, # RSI period (not scaled)
"ma_fast": 10, # fast MA (not scaled)
"ma_slow": 50, # slow MA (not scaled)
}
vol_sensitive = ["entry_threshold", "stop_loss", "take_profit", "trailing_stop"]
eth_vol = 0.032 # 3.2%
doge_vol = 0.081 # 8.1%
doge_params = scale_params_by_volatility(
base_params, eth_vol, doge_vol, vol_sensitive
)
print("ETH params:", {k: f"{v:.4f}" for k, v in base_params.items() if k in vol_sensitive})
print("DOGE params:", {k: f"{v:.4f}" for k, v in doge_params.items() if k in vol_sensitive})
Чыгуу:
ETH params: {'entry_threshold': '0.0200', 'stop_loss': '0.0100', 'take_profit': '0.0300', 'trailing_stop': '0.0080'}
DOGE params: {'entry_threshold': '0.0506', 'stop_loss': '0.0253', 'take_profit': '0.0759', 'trailing_stop': '0.0203'}
Stop loss 1%'дан 2,53%'ка өстү — бул DOGE'дин 8,1% күндүк волатилдигине шайкеш келет. Масштабдоосуз 1% стоп "ызы-чуудан" ондогон жолу тиймек.
Маанилүү: жалгыз гана баа босогоlorun (кирүү, стоп, take) масштабдаңыз. Индикатор мезгилдери (RSI, MA) жана мультипликаторлор (ATR мультипликатору) адатта масштабдалbайт — алар индикатордун өзү аркылуу волатилдик боюнча мурунтан нормалдаштырылган.
Эки валидация режими
-
Катуу режим (масштабдоосуз): бирдей параметрлер менен иштетүү. Абсолюттук туруктуулук тести. Эгер стратегия рентабелдүү болсо — edge күчтүү.
-
Ыңгайлашуучу режим (масштабдоо менен): нормалдаштырылган параметрлер менен иштетүү. Волатилдик деңгээлдери ар башка экенин эске алуу менен стратегия логикасынын туруктуулук тести.
Биз эки тести тең жүргүзүүнү сунуштайбыз. Катуу режим — edge'дин "күчүн" баалоо үчүн. Ыңгайлашуучу режим — практикалык колдонуу үчүн.
Cross-Symbol туруктуулук көрсөткүчү

Мульти-символдук туруктуулукту сандык баалоо үчүн биз курама метрика — Cross-Symbol Robustness Score (CSRS) киргизебиз.
Формула
бул жерде:
- — рентабелдүү символдордун үлүшү:
- — нормалдаштырылган, ликвиддүүлүк менен өлчөнгөн орточо PnL:
бул жерде — символунун ликвиддүүлүгү (орточо күндүк көлөм).
- — tier'аралык дал келүү үчүн бонус:
- — символдор арасындагы жогорку PnL дисперсиясы үчүн айыппул:
Демейки салмактар
| Компонент | Салмак | Негиздеме |
|---|---|---|
| (рентабелдүү үлүш) | 0.35 | Эң маанилүүсү: стратегия көпчүлүктө иштеши керек |
| (орточо PnL) | 0.25 | Абсолюттук кирешелүүлүк |
| (cross-tier) | 0.25 | Универсалдуулук үчүн бонус |
| (дисперсия айыппулу) | 0.15 | Туруксуздук үчүн айыппул |
CSRS интерпретациясы
| CSRS | Интерпретация |
|---|---|
| > 0.7 | Мыкты туруктуулук. Стратегия көпчүлүк инструменттерде иштейт. |
| 0.5 — 0.7 | Жакшы туруктуулук. Стратегия өз tier'инде жана жарым-жартылай башкаларда иштейт. |
| 0.3 — 0.5 | Чек ара. Стратегия символдордун тар жыйындысында иштейт. |
| < 0.3 | Төмөн туруктуулук. Инструмент деңгээлиндеги curve fitting ыктымал. |
Толук ишке ашыруу: мульти-символдук валидация pipeline'ы

import numpy as np
import pandas as pd
from dataclasses import dataclass, field
from typing import Callable, Optional
@dataclass
class SymbolResult:
"""Strategy result on a single symbol."""
symbol: str
tier: int
pnl: float
max_dd: float
n_trades: int
win_rate: float
pnl_per_active_day: float
avg_daily_volume: float # liquidity
@dataclass
class TierResult:
"""Aggregated result by tier."""
tier: int
symbols: list[SymbolResult]
n_symbols: int
n_profitable: int
profit_ratio: float
avg_pnl: float
avg_max_dd: float
pnl_std: float
@dataclass
class MultiSymbolResult:
"""Full multi-symbol validation result."""
symbol_results: list[SymbolResult]
tier_results: list[TierResult]
csrs: float
passed: bool
optimization_symbol: str
report: str
SYMBOL_TIERS = {
1: ["BTCUSDT", "ETHUSDT"],
2: ["SOLUSDT", "BNBUSDT", "ADAUSDT", "XRPUSDT", "AVAXUSDT"],
3: ["DOGEUSDT", "SHIBUSDT", "PEPEUSDT", "ARBUSDT", "OPUSDT"],
}
SYMBOL_VOLATILITY = {
"BTCUSDT": 0.028, "ETHUSDT": 0.032,
"SOLUSDT": 0.052, "BNBUSDT": 0.038, "ADAUSDT": 0.048,
"XRPUSDT": 0.045, "AVAXUSDT": 0.055,
"DOGEUSDT": 0.081, "SHIBUSDT": 0.092, "PEPEUSDT": 0.105,
"ARBUSDT": 0.068, "OPUSDT": 0.063,
}
SYMBOL_VOLUME = {
"BTCUSDT": 15e9, "ETHUSDT": 8e9,
"SOLUSDT": 2e9, "BNBUSDT": 1.5e9, "ADAUSDT": 800e6,
"XRPUSDT": 1.2e9, "AVAXUSDT": 500e6,
"DOGEUSDT": 1e9, "SHIBUSDT": 400e6, "PEPEUSDT": 600e6,
"ARBUSDT": 300e6, "OPUSDT": 250e6,
}
def run_multi_symbol_validation(
strategy_fn: Callable,
base_params: dict,
optimization_symbol: str,
data_loader: Callable,
vol_sensitive_params: list[str],
adaptive: bool = True,
csrs_weights: tuple = (0.35, 0.25, 0.25, 0.15),
min_profit_ratio: float = 0.6,
) -> MultiSymbolResult:
"""
Full multi-symbol validation pipeline.
Args:
strategy_fn: strategy function (data, params) -> (pnl, max_dd, n_trades, win_rate, returns)
base_params: parameters optimized on optimization_symbol
optimization_symbol: optimization symbol
data_loader: data loading function (symbol) -> np.ndarray
vol_sensitive_params: parameters to scale by volatility
adaptive: use volatility scaling
csrs_weights: weights (w1, w2, w3, w4) for CSRS
min_profit_ratio: minimum fraction of profitable symbols in a tier
"""
w1, w2, w3, w4 = csrs_weights
opt_vol = SYMBOL_VOLATILITY.get(optimization_symbol, 0.03)
symbol_results = []
for tier, symbols in SYMBOL_TIERS.items():
for symbol in symbols:
data = data_loader(symbol)
if data is None or len(data) < 100:
continue
if adaptive and symbol != optimization_symbol:
sym_vol = SYMBOL_VOLATILITY.get(symbol, 0.05)
params = scale_params_by_volatility(
base_params, opt_vol, sym_vol, vol_sensitive_params
)
else:
params = base_params.copy()
pnl, max_dd, n_trades, win_rate, returns = strategy_fn(data, params)
active_days = max(n_trades * 0.5, 1) # rough estimate
pnl_per_day = pnl / active_days
symbol_results.append(SymbolResult(
symbol=symbol,
tier=tier,
pnl=pnl,
max_dd=max_dd,
n_trades=n_trades,
win_rate=win_rate,
pnl_per_active_day=pnl_per_day,
avg_daily_volume=SYMBOL_VOLUME.get(symbol, 1e6),
))
tier_results = []
tiers_present = sorted(set(r.tier for r in symbol_results))
for tier in tiers_present:
tier_symbols = [r for r in symbol_results if r.tier == tier]
n_profitable = sum(1 for r in tier_symbols if r.pnl > 0)
pnls = [r.pnl for r in tier_symbols]
tier_results.append(TierResult(
tier=tier,
symbols=tier_symbols,
n_symbols=len(tier_symbols),
n_profitable=n_profitable,
profit_ratio=n_profitable / len(tier_symbols) if tier_symbols else 0,
avg_pnl=np.mean(pnls),
avg_max_dd=np.mean([r.max_dd for r in tier_symbols]),
pnl_std=np.std(pnls),
))
all_pnls = [r.pnl for r in symbol_results]
all_volumes = [r.avg_daily_volume for r in symbol_results]
n_total = len(symbol_results)
n_profitable = sum(1 for r in symbol_results if r.pnl > 0)
r_profit = n_profitable / n_total if n_total > 0 else 0
total_vol = sum(all_volumes)
r_pnl_raw = sum(r.pnl * r.avg_daily_volume for r in symbol_results) / total_vol
r_pnl = 1 / (1 + np.exp(-r_pnl_raw * 5))
profitable_tiers = sum(1 for tr in tier_results if tr.avg_pnl > 0)
p_consistency = profitable_tiers / len(tier_results) if tier_results else 0
pnl_std = np.std(all_pnls) if len(all_pnls) > 1 else 0
pnl_mean = np.mean(all_pnls) if all_pnls else 0.01
p_variance = pnl_std / max(abs(pnl_mean), 0.01)
p_variance = min(p_variance, 5.0) # cap the penalty
csrs = w1 * r_profit + w2 * r_pnl + w3 * p_consistency - w4 * (p_variance / 5.0)
csrs = max(0, min(1, csrs)) # clamp to [0, 1]
opt_tier = None
for tier, symbols in SYMBOL_TIERS.items():
if optimization_symbol in symbols:
opt_tier = tier
break
same_tier_result = next((tr for tr in tier_results if tr.tier == opt_tier), None)
passed = (
csrs >= 0.5
and (same_tier_result is None or same_tier_result.profit_ratio >= min_profit_ratio)
and np.mean(all_pnls) > 0
)
report = _generate_report(
symbol_results, tier_results, csrs, passed,
optimization_symbol, adaptive
)
return MultiSymbolResult(
symbol_results=symbol_results,
tier_results=tier_results,
csrs=csrs,
passed=passed,
optimization_symbol=optimization_symbol,
report=report,
)
def _generate_report(
symbol_results, tier_results, csrs, passed,
opt_symbol, adaptive
) -> str:
"""Generate text report."""
lines = []
lines.append("=" * 60)
lines.append("MULTI-SYMBOL VALIDATION REPORT")
lines.append(f"Optimization symbol: {opt_symbol}")
lines.append(f"Mode: {'adaptive' if adaptive else 'strict'}")
lines.append(f"CSRS: {csrs:.3f}")
lines.append(f"Passed: {'YES' if passed else 'NO'}")
lines.append("=" * 60)
for tr in tier_results:
lines.append(f"\n--- Tier {tr.tier} ---")
lines.append(f" Symbols: {tr.n_symbols}, Profitable: {tr.n_profitable} "
f"({tr.profit_ratio:.0%})")
lines.append(f" Avg PnL: {tr.avg_pnl:.2%}, Avg MaxDD: {tr.avg_max_dd:.2%}")
lines.append(f" PnL StdDev: {tr.pnl_std:.2%}")
for sr in tr.symbols:
marker = "*" if sr.symbol == opt_symbol else " "
status = "+" if sr.pnl > 0 else "-"
lines.append(
f" {marker} [{status}] {sr.symbol:12s} "
f"PnL={sr.pnl:+.2%} MaxDD={sr.max_dd:.2%} "
f"Trades={sr.n_trades:4d} WR={sr.win_rate:.1%}"
)
lines.append("\n" + "=" * 60)
return "\n".join(lines)
Pipeline колдонуу мисалы
def my_strategy(data, params):
"""Your strategy. Returns (pnl, max_dd, n_trades, win_rate, returns)."""
pass
def load_ohlcv(symbol):
"""Load OHLCV data for a symbol."""
pass
base_params = {
"entry_threshold": 0.02,
"stop_loss": 0.01,
"take_profit": 0.03,
"trailing_stop": 0.008,
"atr_multiplier": 2.5,
"rsi_period": 14,
"ma_fast": 10,
"ma_slow": 50,
}
result = run_multi_symbol_validation(
strategy_fn=my_strategy,
base_params=base_params,
optimization_symbol="ETHUSDT",
data_loader=load_ohlcv,
vol_sensitive_params=["entry_threshold", "stop_loss", "take_profit", "trailing_stop"],
adaptive=True,
)
print(result.report)
print(f"\nCSRS: {result.csrs:.3f}")
print(f"Passed: {result.passed}")
Single-symbol валидация качан кабыл алынгыдай

Ар бир стратегия бир нече инструментте иштеши шарт эмес. Single-symbol кадимки ыкма болгон мыйзамдуу учурлар бар:
Так order book'то маркет-мейкинг
Маркет-мейкинг стратегиясы (мисалы, Avellaneda-Stoikov моделин колдонгон) аныктамасы боюнча так order book'кo байланыштуу. Параметрлер конкреттүү микроструктурага көз каранды: тереңдик, спрэд, кезектеги позиция, fill rate. Башка символдо тестирлөө маанисиз — бул башка order book.
Так жуптар ортосундагы арбитраж
Funding rate арбитражы же cross-exchange арбитраж аныктамасы боюнча так инструмент жуптарына байланыштуу. Бул жерде валидация ошол эле жуптар менен башка биржаларда жүргүзүлөт, башка символдордо эмес.
Активдин өзгөчө касиеттерин так колдонгон стратегиялар
Эгер стратегия активдин конкреттүү бир касиетине негизделсе (мисалы, BTC'нин хэшрейт менен корреляциясы же ETH'дин газ комиссиялары менен корреляциясы), мульти-символдук валидация колдонулбайт. Бирок мындай стратегиялар сейрек кездешет.
Бардык башка учурларда — эгер стратегия "жалпы" сигналдарга (MA crossover, RSI, momentum, mean reversion) негизделсе — мульти-символдук валидация милдеттүү. Эгер жалпы стратегия жалгыз гана бир символдо иштесе, бул edge эмес — бул overfitting.
Башка валидация методдору менен байланыш

Мульти-символдук валидация out-of-sample тестирлөөнүн үч ортогоналдык методунун бири:
| Метод | Валидация огу | Эмнени ачат |
|---|---|---|
| Walk-Forward | Убакыт | Белгилүү бир мезгилге overfitting |
| Multi-symbol | Инструмент | Белгилүү бир активге overfitting |
| Монте-Карло бутстрэп | Соода тартиби | Белгилүү бир ырааттуулукка көз карандылык |
Ар бир метод өз огу боюнча туруктуулукту текшерет. Стратегия walk-forward'дон өтүшү мүмкүн, бирок multi-symbol'до ишке ашпай калышы мүмкүн (инструментке curve fitting). Ал multi-symbol'дон өтүшү мүмкүн, бирок Монте-Карлодо ишке ашпай калышы мүмкүн (ийгиликтүү соода тартибине көз каранды болуу).
Overfitting'ден максималдуу коргоо: үч методду тең колдонуңуз.
Толук валидация pipeline'ы:
- Бир символдо параметрлерди оптималдаштыруу
- Плато анализи — оптимум туруктуулугун текшерүү
- Walk-forward — убакыт огу боюнча валидация (WFER > 0,5)
- Multi-symbol — инструмент огу боюнча валидация (CSRS > 0,5)
- Монте-Карло бутстрэп — ишеним интервалдары (5-пайыздык чек > 0)
- Funding rate'терди жана чыгым-киреше асимметриясын эске алуу
Бардык алты текшерүүдөн өткөн стратегиянын overfitting артефакты болуу ыктымалдыгы минималдуу.
Кеңейтүүлөр: символдордун корреляциясы жана каскаддык стратегиялар

Мульти-символдук валидация дагы бир аспектини ачат: символдор ортосундагы корреляциялар. Эгер стратегия BTC жана ETH'де рентабелдүү болсо, бирок бардык альткоиндерде рентабелдүү болбосо — бул edge'дин BTC-ETH жогорку корреляциясына байланыштуу экени тууралуу маалымат. Корреляция түзүлүштөрүнүн майда-чүйдөсүнө чейинки талдоо Сигнал корреляциясы жана pairs trading макаласында.
Стратегия портфелдери үчүн мульти-символдук натыйжалар стратегия кайсы инструменттерде иштетилиши керектигин аныктайт. Жогорудагы мисалдын Стратегия A — жалгыз Tier 1-2. Стратегия B — Tier 1-3. Бул каскаддык оркестрация үчүн киргизилүүчү маалымат, анда ар кандай стратегиялар алардын туруктуулук профилине жараша ар кандай инструменттерде иштетилет.
Корутунду
Мульти-символдук валидация милдеттүү эмес нерсе эмес — бул жалпыланган рыноктук edge'ди талап кылган каалаган стратегия үчүн милдеттүү кадам. Негизги тыянактар:
-
Жалгыз бир символдо гана иштеген стратегия ошол символдун өзгөчөлүктөрүнө overfit болуу ыктымалдыгы жогору. Өзгөчөлүктөр: маркет-мейкинг, арбитраж, активдин өзгөчө касиеттерине негизделген стратегиялар.
-
Tier боюнча топтоштуруу милдеттүү. Волатилдик, ликвиддүүлүк жана микроструктура айырмачылыктарын түшүнбөй туруп BTC (Tier 1) натыйжаларын PEPE (Tier 3) натыйжалары менен салыштырууга болбойт.
-
Ыңгайлашуучу параметр масштабдоо — волатилдик боюнча босогоlorду нормалдаштыруу — мульти-символдук тестирлөөнүн реалдуулугун бир топ жакшыртат.
-
CSRS > 0,5 — акылга сыярлык минималдуу чек. Стратегия ошол эле tier'деги символдордун >= 60%'унда рентабелдүү болушу керек, ал эми бардык символдор боюнча орточо PnL оң болушу керек.
-
Walk-forward + Multi-symbol + Монте-Карло — үч ортогоналдык валидация огу. Ар бир метод башкалары өткөрүп жиберген нерсени кармайт. Үчөөнү тең колдонуңуз.
PnL +25% жана CSRS 0,72 бар стратегия PnL +300% жана CSRS 0,18 бар стратегиядан ишенимдүүрөөк. Биринчиси рыноктук натыйжасыздыктан киреше табат. Экинчиси жалгыз баа катарын жаттап алуудан киреше табат.
Пайдалуу шилтемелер
- Lopez de Prado, M. — Advances in Financial Machine Learning (Wiley)
- Pardo, R. — The Evaluation and Optimization of Trading Strategies (Wiley)
- Bailey, D.H. et al. — The Probability of Backtest Overfitting
- Aronson, D.R. — Evidence-Based Technical Analysis
- Kevin Davey — Building Winning Algorithmic Trading Systems (Wiley)
- Harvey, C.R. & Liu, Y. — Backtesting (2015)
- Chan, E. — Algorithmic Trading: Winning Strategies and Their Rationale (Wiley)
- Binance Research — Cryptocurrency Correlation Analysis
- NumPy — numpy.random.choice
- Pandas — DataFrame
Цитата
@article{soloviov2026multisymbolvalidation,
author = {Soloviov, Eugen},
title = {Multi-Symbol Validation: Test Your Strategy on All Pairs},
year = {2026},
url = {https://marketmaker.cc/en/blog/post/multi-symbol-validation},
version = {0.1.0},
description = {Why a strategy optimized on ETHUSDT may fail on altcoins. How to properly test across pair groups (blue chips, large caps, shitcoins) and what cross-symbol robustness score to consider sufficient.}
}
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.