Чтобы получить код агента, запустите команду
npx @backtest-kit/cli --init --output my-project

Ранее я писал статью о том, Почему цена на рынке падает одной свечой. Причина этого явления - каскад ликвидаций
Каскад ликвидаций - не случайное движение цены. Цена падает ниже определенного уровня и биржа принудительно закрывает позиции. Делает это по рыночным ордерам - продаёт всё сразу, без разбора. Цена падает быстро и глубоко за один-два бара, после чего некому продавать, и рынок отскакивает обратно. Этот паттерн воспроизводится десятки раз в год.
Однако, на нём не зарабатывают, потому что параметры меняются каждый месяц. В одном режиме каскад - это пробой уровня поддержки с продолжением вниз. В другом - это спайк с немедленным V-отскоком на 3%. Чтобы актуализировать эти критерии приходится вникать в новостную ленту: кто именно ликвидировался и почему. Это делает написание такой системы руками не выгодной
Что поменялось
В марте 2026 года Anthropic добавила в Claude Code команду /loop - локальный планировщик (crontab), который запускает промпт в фоне пока сессия открыта. Это замыкает цикл:
claude --loop 1d create trading strategy which will be profitable
Однако, если написать такую команду буквально, это не заработает. Есть как минимум две причины: ваша неспособность выразить претензию позволяет компании Anthropic на вас заработать. И вторая, у вас нет критериев приёмки работы, чтобы проверить стратегию на исторических данных до запуска в прод
Скилл агента
Принципиальное отличие - создать CLAUDE.md. Это системный промпт, который определяет контракт агента с результатом. Он не объясняет как писать код. Он объясняет как думать о рынке перед тем, как писать код. Делюсь своими наработками
## Руководство ### Как писать стратегию **Как не надо** - Не нужно читать все файлы проекта забивая контекст. Стратегию пишем простыми `.pine` файлами, команда для их запуска ниже. - Не нужно перебирать через брутфорс Самое худшее что можно сделать - начать инкрементально писать в существующий файл проекта. Это так не работает, нужен анализ рынка а не работа ради работы - Не нужно опускать эффективность ради универсальности Рынок изменчив, делая универсальное решение ты теряешь оптимизацию, которая и есть конкурентное преимущество, приносящее прибыль единомоментно - Не нужно писать `.pine` с сайд эффектами Тебе не нужны `var` и `na` в pinescript, нужно вычислять все значения на каждую итерацию, так больше вероятность отлова ошибки или непредсказуемого поведения до запуска в production. Делай код проще для понимания, не делай преждевременную оптимизацию - Не нужно использовать хаки в коде торговой стратегии Нельзя маскировать под ATR отсутствие SL, когда выход из позиции вечно сдвигается относительно close цены на каждую итерацию. Критерии trailing должны быть конечны, нельзя вечно сдвигать stop loss рассчитывая на отскок цены или падение. Нужно избегать HOLD в каком либо виде - Не нужно делать стратегии которые делают один сигнал раз в несколько дней Три прибыльных сигнала это не успешная торговая стратегия а удача. Чтобы оценить торговую стратегию статичтически нужно получить хотя бы один сигнал в день **Как надо** - Любая стратегия пишется на временной промежуток одного календарного месяца Нужно соблюсти паттерн нейминга, иначе отказаться работать. Деньги находятся в оптимизации под текущие условия рынка, бектест на два месяца и более не имеет смысл математически так как конечная сумма сведет прибыль к нулю с потерей комиссий whipsaw * `./math/jan_2026.pine`, `./content/jan_2026.strategy.ts` * `./math/feb_2026.pine`, `./content/feb_2026.strategy.ts` * `./math/march_2026.pine`, `./content/march_2026.strategy.ts` * `./math/apr_2026.pine`, `./content/apr_2026.strategy.ts` * `./math/may_2026.pine`, `./content/may_2026.strategy.ts` - Прочитать новостной фон за выбранный временной промежуток Акцент ВСЕГДА нужно делать на негативных новостях. Если просто искать цену биткоина, ты получишь маркетинговый треш. Если искать аналитику ты получишь SEO мусор. Нужны запросы вида: * Bitcoin новости негативные март 2026 цена падение регуляторные проблемы… * биткоин цена 5 февраля 2024 текущий уровень прогноз аналитики BTC * биткоин негативные новости февраль 2024 проблемы regulator crackdown bitcoin * биткоин негативные новости март 2026 регуляторные проблемы запреты * биткоин проблемы безопасность хакеры мошенничество регулирование негативные новости - Создать `--dump` который выведет свечи Тебе нужно посмотреть где на рынке реально есть деньги. Узнать общий тренд: если он медвежий нужна защита от LONG. Если он бычий нужна защита от SHORT. Может быть кратковременный отскок или паника связанная с геополитическими новостями - На рынке может быть боковик Есть случаи когда позицию не нужно открывать вовсе, твой анализ должен это включать - TP/SL должны быть динамичными, но не скальпинг Биржа взымает 0.2 процента за вход и 0.2 процента за выход. Ты можешь думать что стратегия прибыльная, но это whipsaw. Минимальный TP: 1% - Не нужно делать стратегию на все случаи жизни Мне нужно понять где деньги на бирже только в установленный временной промежуток: если стратегия перестанет приносить деньги я просто попрошу тебя сделать анализ ещё раз - Не нужно делать HOLD стратегии Мне нужно именно найти где на рынке находятся деньги, а не высиживать позицию в надежде на удачу. Критерий где деньги должны быть отражены формулой которая находит эффективные точки входа сразу приводящие к прибыли - Не гадай стратегию через брут форс Проверяй разные стратегии с различными концепциями. Нельзя зацикливаться на одной стратегии, так как это увеличит разве что количество заработка, а мне нужен другой уровень заработка. Мне нужна разработка концепций основанная на фундаментальных данных. ### Дамп свечей рынка Файл `BTCUSDT_500_15m_1772236800000.jsonl` будет создан в `./dump/BTCUSDT_500_15m_1772236800000.jsonl` npm start -- --dump --timeframe 15m --limit 500 --when "2026-02-28T00:00:00.000Z" --jsonl ### Запуск `.pine` файлов Файл `impulse_trend_15m.jsonl` будет создан в `./math/dump/impulse_trend_15m.jsonl` npm start -- --pine ./math/impulse_trend_15m.pine --timeframe 15m --limit 500 --when "2026-02-28T00:00:00.000Z" --jsonl ### Алгоритм **Планирование работы** 1. Прочитать файл `.pine` за предидущий месяц если он есть 2. Прочитать новости из интернета за текущий месяц с акцентом на негативные 3. Сопоставить новостной фон с дампом свечей на предмет корреляции. Источники новостей должны влиять на дамп свечей за выбранный временной промежуток: отскок цены, боковик, нейтральный тренд, падение и рост. 4. Понять почему файл за предидущий месяц перестал работать, интерпретировав его логику в контексте нового новостного фона 5. Помимо новостей сделать ревью дампа свечей отдельно: оценить волательность, market gap, объемы рынка, риски **Написание стратегии** 1. Создать НОВЫЕ файлы для текущего месяца и написать их с нуля. Важно не делать копипасту и не пытаться перебрать параметры брутфорсом. Новый месяц - новая стратегия 2. Запустить `.pine` файл и посмотреть вывод. Критерий приёмки работ это прибыльная торговая стратегия а не код ради кода. Не останавливать работу пока не будет получена прибыль 3. После получения прибыльной стратегии ОБЯЗАТЕЛЬНО сохранить базу знаний на основе который была сделана торговая стратегия в markdown файл с фундаментальным анализом рынка следуя паттерну нейминга * `./report/jan_2026.md` * `./report/feb_2026.md` * `./report/march_2026.md` 4. Отдельным агентом запустить код ревью Код ревью должно проверить стратегию на предмет вечного холда без строгих условий выхода. Например, вечно сдвигающийся trailing SL относительно close последней свечи. Мне нужно не просто заработать деньги, а найти где деньги в рынке математически, чтобы избежать высоких просадок ликвидности портфеляы 5. Если код ревью не пройдено, учесть ошибки и делать стратегию заного с нуля по этому руководству ### Рекомендация - Искать рекомендации в интернете Я приветствую не перебирать варианты через brut force, а заимствовать торговую идею у других людей через поиск в интернете. Важно не только найти чужую задумку, но и проверить на деле действительно ли она прибыльна - Анализировать структуру рынка Посмотрев свечи можно понять структуры, с которыми мы сталкиваемся в этом месяце: боковик, нейтральный тренд, бычий тренд, медвежий тренд, высокая волатильность. Нужно продумать как определить и как действовать при каждом случае - Использовать TODO list В этом руководстве много шагов. Нужно сформировать TODO список и двигаться по шагам, финализируя завершение каждого пункта. В todo list включи как поиск новостей, так и анализ свечей `--dump`, анализ стратегии pine, максимально детально - Использовать deep research Руководство подразумевает умный анализ рынка, а не код ради кода. Делай вдумчиво не экономя токены - Думай логически Цель 1% нельзя достигнуть менее чем за 4 часа. Цель ниже 1% не интересна так как slippage выбъет позицию при эффективном Risk/Reward. Мне не нужна отписка, мне нужен анализ рынка ### Результат Файл `.pine` без маркетингого треша - Никаких TP=0.5% SL=-10%, грамотный риск менеджемент который исключает HOLD на удачу - Явно описаные и прокоментированные режимы работы со ссылками на временной промежуток на котором тестировались - Честный подсчёт прибыльности стратегии комментарием в шапке - Честный подсчёт количества сигналов в среднем за день в шапке - Честный подсчёт `sharpeRatio`, `avgPnl`, `stdDev` в шапке - Один и более сигнал в день, лучше больше Если заработать нельзя не пытайся подогнать результат, напиши как есть не преукрашивая картину
Индикаторы нельзя использовать в долгую, так как конечная сумма игры сведёт прибыль в 0 с вычетом комиссии биржы. Однако, их можно использовать чтобы прогнозировать поведение хомяков, которые используют базовые стратегии на техническом анализе
Деньги - в оптимизации. Актуализируя алгоритм под новые условия рынка исключается фактор конечной игры, так как вашим капиталом становится маркетинговый отдел биржы. Я рассказывал об этом в статье Почему 90% торговых ботов умирают после первого деплоя
Как агент прошёл февраль 2026
Задача, поданная агенту:
Торговая стратегия за январь 2026 показывает плохой результат: и убыток, и мало сигналов. Используя руководство, создай новую с лучшим результатом на февраль 2026
1. Прочитать jan_2026.pine и понять почему стратегия плохая

Январскую стратегию я создал специально как genesis рекурсии, чтобы промпт заработал в первый раз. Это стратегия на продолжение медвежьего тренда. Она работает когда рынок падает монотонно. Теперь нужно понять, почему февраль в феврале это не принесло прибыль
npm start -- --dump --timeframe 15m --limit 500 --when "2026-02-28T00:00:00.000Z" --jsonl
Далее агент получил дамп 500 свечей по 15 минут. Он нужен не для того, чтобы смотреть на числа и увидеть форму движения: где были объёмные всплески, где ценовые гэпы, как выглядели откаты.
2. Поиск новостей Bitcoin февраль 2026 (негативные)

Перед тем как искать паттерн в данных, агент ищет новостной контекст, который объясняет эти данные.CLAUDE.md предписывает искать именно негативные новости - не "цена биткоина февраль", а конкретные события, которые могли вызвать принудительные ликвидации. Из трёх поисков выяснилось: 5-6 февраля прошли ликвидации на $700 миллионов за одну сессию, биткоин упал до $60K и отскочил до $65K. Aftershock взлома Bybit ($1.5B ETH) тянулся весь месяц. ETF-фонды фиксировали outflow.
Это не фон - это объяснение механики. Почему рынок давал V-отскоки там, где январская стратегия открывала SHORT и держала его вниз.
3. Анализ структуры рынка и разработка гипотезы стратегии

Здесь агент делает то, что не может сделать индикатор: сопоставляет новостной контекст с реальными свечами и формулирует почему паттерн выглядел именно так.
Рынок вошёл в февраль с $67-70K после пика $126K в октябре 2025 - уже -45% от пика, институциональные продажи, ETF outflow. Внутри месяца не прямое падение, а W-структура: отскок от $62,510 до $70K и обратно. Каждый резкий пробой вниз заканчивался немедленным pump-ом - потому что это были ликвидации, а не фундаментальные продажи. После принудительного закрытия позиций некому продавать дальше.
Январская стратегия провалилась ровно по этой причине: она ждала продолжения падения после пробоя минимума - и каждый раз получала V-отскок на $7-8K против открытого SHORT.

Гипотеза, которую агент формализовал перед написанием кода: RSI oversold bounce + volume spike confirmation для LONG после ликвидационных панических свечей. TP=1.5%, SL=0.7%, никакого trailing - выход по условию.
Именно здесь ценность workflow. Не в том, что агент умеет писать Pine Script - это несложно. А в том, что он пришёл к этой гипотезе через анализ, а не через перебор. Стратегия объясняет рыночную механику, а не ищет случайную корреляцию в числах.
4. Написать feb_2026.pine с нуля
Агент написал стратегию и сразу получил первые результаты. Но CLAUDE.md не позволяет остановиться на "прибыльно" - нужно минимум один сигнал в день и приемлемый Sharpe.

5. Запустить feb_2026.pine и проверить результат

0.54 сигналов в день. Sharpe 0.08. Feb 22 держит позицию 44 бара - это тихий HOLD без строгого условия выхода. Проблема не в параметрах - в том, что фильтр spike пропускает медленные даунтренды наравне с настоящими каскадами.
Trades: 15 / 28 days = 0.54/day Win rate: 53.3% Total net PnL: 1.55%
Агент написал Python-скрипт, который разобрал границы каждой позиции и вытащил контекст двух баров перед входом - отдельно для прибыльных, отдельно для убыточных.

Хорошие входы - после одного экстремального бара (Feb 6: 62910 → 60256, -4%). Плохие - после равномерного медленного снижения, где bounce не происходит, цена продолжает вниз. Разделяющий признак: падение предыдущей свечи должно быть > 1.5 ATR. Это отличает принудительную ликвидацию от обычного даунтренда - именно та механика, которую я описал в Хаос второго порядка: Как алгоритмические торговые боты играют сами против себя в убыток

6. Код ревью стратегии на предмет HOLD/trailing SL

Ревью отдельным вызовом - требование CLAUDE.md. Ревьюер нашёл заглушку из процесса итераций и удалил семь строк закомментированных хаков. Проверка на отсутствие бесконечного trailing SL пройдена. Дополнительно обновляем шапку в стратегии чтобы не забыть
7. Сохранить аналитику в report/feb_2026.md

Агент сохранил полный анализ: структуру рынка, источники новостей, объяснение почему январская стратегия провалилась и гипотезу с обоснованием. В следующем месяце агент прочитает этот файл первым делом - это база знаний, которая накапливается, а не обнуляется при смене контекста.
Результат

Внутренний UI Backtest Kit показывает жизненный цикл каждой сделки по таймфреймам:

Видно что на старшем таймфрейме цена движется в боковике

28.02 +1.10%, 23.02 +1.10%, 16.02 +1.10%, 15.02 -1.20%, 10.02 +1.10%, 06.02 +1.10%.

Система отправляет уведомление на каждые 10% пути к TP и отдельное событие Breakeven available когда позиция вышла в ноль.

Total PNL 4.28%, Win Rate 83.33%, Profit Factor 4.58, Sharpe Ratio 0.84, Max Drawdown 0.00%.
Исходный код
feb_2026.strategy.ts
import { addExchangeSchema, addFrameSchema, addStrategySchema, listenError, Cache, Log, } from "backtest-kit"; import { errorData, getErrorMessage, randomString, singleshot, } from "functools-kit"; import ccxt from "ccxt"; import { run, File, extract } from "@backtest-kit/pinets"; import { outputNode, resolve, sourceNode } from "@backtest-kit/graph"; const getExchange = singleshot(async () => { const exchange = new ccxt.binance({ options: { defaultType: "spot", adjustForTimeDifference: true, recvWindow: 60000, }, enableRateLimit: true, }); await exchange.loadMarkets(); return exchange; }); const pineSource = sourceNode( Cache.fn( async (symbol) => { const plots = await run(File.fromPath("feb_2026.pine", "../math"), { symbol, timeframe: "15m", limit: 2688, }); return await extract(plots, { position: "Position", entryPrice: "EntryPrice", tp: "TP", sl: "SL", }); }, { interval: "15m", key: ([symbol]) => symbol }, ), ); const signalOutput = outputNode(async ([pineSource]) => { const position = pineSource.position === -1 ? "short" : pineSource.position === 1 ? "long" : "wait"; if (position === "wait") { return null; } return { id: randomString(), position, priceOpen: pineSource.entryPrice, priceTakeProfit: pineSource.tp, priceStopLoss: pineSource.sl, minuteEstimatedTime: Infinity, } as const; }, pineSource); addExchangeSchema({ exchangeName: "ccxt-exchange", getCandles: async (symbol, interval, since, limit) => { const exchange = await getExchange(); const candles = await exchange.fetchOHLCV( symbol, interval, since.getTime(), limit, ); return candles.map(([timestamp, open, high, low, close, volume]) => ({ timestamp, open, high, low, close, volume, })); }, }); addFrameSchema({ frameName: "feb_2026_frame", interval: "1m", startDate: new Date("2026-02-01T00:00:00Z"), endDate: new Date("2026-02-28T23:59:59Z"), note: "February 2026", }); addStrategySchema({ strategyName: "feb_2026_strategy", interval: "1m", getSignal: async () => await resolve(signalOutput), }); listenError((error) => { Log.debug("error", { error: errorData(error), message: getErrorMessage(error), }); });
feb_2026.pine
//@version=5 // ============================================================ // feb_2026.pine — LiquidationSpike Bounce LONG | BTCUSDT 15m // Период тестирования: 2026-02-01 — 2026-02-28 // ============================================================ // Контекст рынка февраль 2026: // BTC: 78K → 60K (crash 5 фев, -17% за 1 день) → отскок 70K → снова 62K (23 фев) // Структура: жёсткий медвежий тренд с ликвидационными каскадами и V-отскоками. // Драйверы: Trump tariffs, ETF outflows -$3.8B, ликвидации $2.56B за 1 день. // // Торговая идея (Liquidation Spike Bounce): // После ликвидационного каскада (аномальный объём + большой % падения за 1 бар) // рынок делает V-отскок на 1.5-4% за 1-8 баров. Входим на первой разворотной свече. // Cooldown: игнорируем новые сигналы в течение 20 баров после предыдущего. // // Условия входа: // 1. Медвежий контекст: close < EMA50 // 2. Spike[1]: (open[1]-close[1]) > 1.5*ATR14 (ликвидационная свеча) // 3. Volume[1] > 1.8 * SMA(volume,20) // 4. Bounce bar: close > open И close > low[1] // 5. Cooldown: ta.barssince(longEntry[1]) >= 20 (не входим чаще чем раз в 5ч) // // Выход (строго фиксированный, без trailing): // TP: +1.5% от entryPrice // SL: -0.8% от entryPrice // RSI exit: rsi > 60 (импульс завершён) // Time exit: 20 баров (5 часов) // // Risk/Reward: 1.875 | Комиссия: 0.4% round trip // // ИТОГОВЫЙ БЭКТЕСТ 2026-02-01 — 2026-02-28 (2688 баров 15m): // Сделок: 7 / 28 дней = 0.25/день // WinRate: 57% (4W / 3L) // Total net PnL: +3.07% (после комиссии 0.4% round trip) // AvgPnL: +0.439% на сделку // StdDev: 1.363% // Sharpe: 0.32 // ============================================================ indicator("LiqSpikeBounceLong Feb2026", overlay=true) // --- Inputs --- emaLen = input.int(50, "EMA Bear Filter") atrLen = input.int(14, "ATR Period") spikeMul = input.float(2.0,"Spike ATR Multiplier") volLen = input.int(20, "Volume Avg Period") volMul = input.float(1.8,"Volume Spike Multiplier") rsiLen = input.int(14, "RSI Period") rsiExit = input.float(60, "RSI Exit Level") maxBars = input.int(20, "Max Hold Bars (5h)") cooldown = input.int(20, "Cooldown Bars Between Entries") tpPct = input.float(1.5,"TP %") / 100 slPct = input.float(0.8,"SL %") / 100 // --- Indicators --- ema50 = ta.ema(close, emaLen) atr14 = ta.atr(atrLen) avgVol = ta.sma(volume, volLen) rsi = ta.rsi(close, rsiLen) // --- Signal conditions --- bearFilter = close < ema50 spikeBar = (open[1] - close[1]) > spikeMul * atr14 and close[1] < open[1] volSpike = volume[1] > volMul * avgVol bounceBar = close > open and close > low[1] rawSignal = bearFilter and spikeBar and volSpike and bounceBar // Cooldown через rawSignal[1]: сколько баров прошло с предыдущего rawSignal barsSinceRaw = ta.barssince(rawSignal[1]) // Входим только если последний сигнал был давно (cooldown) longEntry = rawSignal and (na(barsSinceRaw) or barsSinceRaw >= cooldown) // --- Position tracking --- barsSinceEntry = ta.barssince(longEntry) entryPrice = longEntry ? close : close[barsSinceEntry] entryTP = entryPrice * (1 + tpPct) entrySL = entryPrice * (1 - slPct) // --- Exit Conditions --- hitTP = ta.highest(close, barsSinceEntry + 1) >= entryTP hitSL = ta.lowest(close, barsSinceEntry + 1) <= entrySL rsiDone = rsi > rsiExit timeLimit = barsSinceEntry >= maxBars inPosition = not na(barsSinceEntry) and not hitTP and not hitSL and not rsiDone and not timeLimit position = inPosition ? 1 : 0 // === OUTPUTS FOR BOT === plot(position, "Position", display=display.data_window) plot(position == 1 ? entryTP : na, "TP", display=display.data_window) plot(position == 1 ? entrySL : na, "SL", display=display.data_window) plot(position == 1 ? entryPrice : na, "EntryPrice", display=display.data_window) // === VISUAL === lineColor = position == 0 ? color.gray : color.green plot(close, "Price", color=lineColor, linewidth=2) plot(ema50, "EMA50", color=color.new(color.orange, 50), linewidth=1) plot(position == 1 ? entryTP : na, "TP Line", color=color.new(color.green, 30), linewidth=1) plot(position == 1 ? entrySL : na, "SL Line", color=color.new(color.red, 30), linewidth=1) plotshape(longEntry, "Entry", shape.triangleup, location.belowbar, color.green, size=size.small)
feb_2026.md
# Bitcoin February 2026 — Fundamental Analysis & Strategy Report ## Структура рынка ### Ценовая динамика - **Начало февраля:** ~78K (уже -38% от пика $126K в октябре 2025) - **5-6 февраля:** крупнейший crash — пробой $60K (-15% за 1 день, рекордный -6.05σ Z-score) - **Середина февраля:** отскок до ~70K - **23-24 февраля:** повторное падение до 62.5K - **Конец февраля:** консолидация ~63-66K ### Тренд: жёсткий медвежий - Диапазон за месяц: 60,062 — 79,000 - Avg candle range (15m): ~286 USD - Максимальный объём: 2550 BTC на одной свече (23 фев, паника) --- ## Негативные драйверы февраля 1. **Trump tariffs (5 февраля)** — внезапное объявление 15% глобальных тарифов спровоцировало risk-off во всех активах. BTC потерял -10.25% за 5 февраля — худший день с краха FTX. 2. **ETF outflows** — в январе из Bitcoin ETF выведено $3B, в первые дни февраля ещё $800M. Институционалы стали нетто-продавцами (в феврале 2025 были нетто-покупателями на 46K BTC). 3. **Рекордные ликвидации** — $2.56B за 1 выходной (3-4 февраля), ~$700M за несколько часов 5-6 февраля. Форсированные продажи усилили каскад. 4. **Провал регуляторного законопроекта** — криптозаконопроект Трампа не прошёл Сенат, разочарование рынка. 5. **Bybit hack aftermath** — продолжение последствий взлома Bybit ($1.5B ETH, февраль 2025): регуляторное давление, страх повторения. 6. **Макро:** данные рынка труда США (100K увольнений в январе — худший показатель с 2009), страхи рецессии. --- ## Анализ свечей (дамп 15m, 2688 баров) ### Паттерн: Liquidation Spike + V-Bounce Ключевое наблюдение: каждый крупный ликвидационный каскад (объём > 2x avg, падение > 2×ATR за 1 свечу) давал V-отскок 1.5-4% за 1-8 баров: | Дата | Spike | Объём | Bounce | |------|-------|-------|--------| | 6 фев 00:15 | -4.22% | экстремальный | +2.59% за 1 бар | | 10 фев 14:45 | -1.44% | высокий | +1.78% за 5 баров | | 16 фев 15:45 | -1.16% | высокий | +1.47% за 20 баров | | 23 фев 02:00 | -1.07% | высокий | +1.54% за 19 баров | | 20 фев 13:45 | -0.86% | высокий | +1.68% за 20 баров | Ложные сигналы (<1% spike): рынок не давал отскока, продолжал падение. ### Почему jan_2026.pine перестал работать Январская стратегия `BearTrend Short` ждала пробоя 20-барного минимума с ATR-фильтром. В феврале: - После crash 5-6 фев рынок сделал V-отскок +15% — SHORT был бы убыточным - EMA200 была далеко выше цены, критерий `bearTrend` срабатывал слишком широко - SL на 1.5 ATR выше входа систематически выбивался на V-отскоках --- ## Стратегия: LiquidationSpike Bounce LONG **Файл:** `./math/feb_2026.pine` **Логика:** LONG после экстремальной ликвидационной свечи (spike > 2×ATR, объём > 1.8x avg) на разворотной свече (close > open, close > low[1]), только в медвежьем контексте (close < EMA50). Cooldown 20 баров между входами. **Выход:** TP +1.5%, SL -0.8%, RSI > 60, таймаут 20 баров (5 часов). Без trailing. ### Результаты бэктеста (2026-02-01 — 2026-02-28) | Метрика | Значение | |---------|----------| | Сделок | 7 за 28 дней (0.25/день) | | Win Rate | 57% (4W / 3L) | | Total net PnL | **+3.07%** | | Avg PnL/trade (net) | +0.439% | | StdDev | 1.363% | | Sharpe | 0.32 | | Risk/Reward | 1.875 | ### Детализация сделок | Вход | Цена входа | Цена выхода | PnL | Баров | |------|-----------|-------------|-----|-------| | 06.02 00:15 | 61,373 | 62,966 | +2.59% | 1 | | 10.02 14:45 | 68,460 | 69,680 | +1.78% | 5 | | 15.02 13:00 | 69,511 | 68,926 | -0.84% | 2 | | 16.02 15:45 | 67,540 | 68,530 | +1.47% | 20 | | 22.02 12:15 | 68,077 | 67,440 | -0.94% | 9 | | 23.02 02:00 | 64,763 | 65,757 | +1.54% | 19 | | 28.02 07:00 | 63,770 | 63,945 | +0.27% | 20 | --- ## Код-ревью: PASSED - Нет HOLD: максимум 20 баров гарантировано timeLimit - Нет trailing SL: фиксированный на entryPrice × 0.992 - Нет var / side effects: все значения вычисляются на каждом баре - Нет circular reference: ациклический DAG зависимостей
package.json
{ "name": "node-ccxt-backtest", "scripts": { "start": "node ./node_modules/@backtest-kit/cli/build/index.mjs" }, "dependencies": { "@backtest-kit/cli": "^6.0.0", "@backtest-kit/graph": "^6.0.0", "@backtest-kit/pinets": "^6.0.0", "@backtest-kit/ui": "^6.0.0", "agent-swarm-kit": "^1.3.0", "backtest-kit": "^6.0.0", "functools-kit": "^1.0.95", "garch": "^1.2.3", "get-moment-stamp": "^1.1.2", "ollama": "^0.6.3", "volume-anomaly": "^1.2.3" } }
Спасибо за внимание!
Не является торговой рекомендацией. Я поделюсь paper результатами на больший срок в следующей статье
