Стратегии
ETH Spot: лонговая лимитная сетка со скользящим якорем, фиксацией прибыли +2% на каждый лот и жёстким стопом по нижней границе сетки (переработка FMZ «Python Simple Grid»; ETHUSDT.BINANCE_SPOT, исполнение на свечах 1H, без плеча)
Итог: Отменено
EthSpotTrailingAnchorLotGrid1H
Сводка по итогам
Стратегия переработала сетку с фиксированной лестницей FMZ в спотовую сетку ETH с привязанным к моменту времени якорем, геометрическим шагом 2% (примерно 10x от полного кругового спотового трейда 0.20%), фиксацией прибыли по каждому лоту и стопом по нижней границе, ограничивающим убытки при пробое. До конца проверки она не дошла. Во всех 3 итерациях бэктест песочницы Layer-3 превышал лимит в 300 с на окне длиной 833 дней и 1 часов. В заметках разработчика по итерации-3 указано, что стоимость обработки каждого бара уже была O(n_nodes); тайм-ауты в тот же день связывались с поиском по ParquetDataCatalog в раннере на сильно загруженном хосте. Запуск прекратили; метрик бэктеста нет, дальнейшие этапы не проводились.
Гипотеза
Итерация 3 устраняет сбой Layer-3 sandbox_timeout только за счёт производительности; торговая логика идентична v2. Работа на каждом баре уже имела сложность O(n_nodes<=10), без буферов истории, дополнительных данных и с поиском ордеров O(1). В тот же день завершились тайм-аутом и другие стратегии O(1) (LtcMomentumMeanReversionRegression_v3, ConnorsRsi2IndexEtfPullbackUseq_v3); профилирование этих запусков показало, что время уходило на поиск по ParquetDataCatalog в раннере среди примерно 126 тыс. каталогов баров. Средняя нагрузка хоста — ~33. Путь обработки каждого бара всё же сокращён: имена атрибутов вычисляются заранее, без f-строк для каждого поля, а собственный капитал счёта считывается только когда нужно активировать ожидающий узел. Согласно уроку L155(c), здесь исключена стоимость обработки каждого бара, растущая вместе с периодом. Поэтому повторный тайм-аут будет указывать на проблему песочницы или каталога, а не на дефект кода.
verification_loop: sandbox_timeout: проверка не пройдена (Layer 3 — бэктест в песочнице): дымовой тест превысил лимит в 300 с по реальному времени на окне примерно в 20000 баров (833 дней, ETHUSDT.BINANCE_SPOT-1-HOUR-LAST-EXTERNAL). Почти всегда это означает, что работа на каждом баре растёт вместе с историей — например, полностью сканируется ряд финансирования или дополнительных данных либо внутри calculate_signal()/on_bar() на каждом баре заново строится список и вызывается min()/sorted(). Заранее вычисли отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй поиск по временной метке: тогда сложность обработки каждого бара будет O(log n), а не O(n).
Реализация
Только длинная ETH спотовая геометрическая лимитная сетка на барах 1H. Опорная точка — цена закрытия в момент привязки. Она смещается вверх, только пока позиции нет, и не меняется, пока удерживаются лоты. Узлы k=1..5 размещают GTC лимитных ордеров BUY на уровнях anchor*(1-2%)^k, каждый на 18% капитала. Для каждого исполненного лота выставляется отдельный лимитный ордер SELL на уровне fill*(1+2%). Узел активируется снова после исполнения этого ордера на продажу. Если бар закрывается ниже нижней границы сетки (последний узел минус один шаг), стратегия отменяет все ордера, продаёт весь актив по рынку и приостанавливается на 24 ч перед привязкой новой опорной точки.
Результаты верификации
sandbox_timeout: проверка не пройдена (Layer 3 — бэктест в песочнице): дымовой тест превысил лимит в 300 с по реальному времени на окне примерно в 20000 баров (833 дней, ETHUSDT.BINANCE_SPOT-1-HOUR-LAST-EXTERNAL). Почти всегда это означает, что работа на каждом баре растёт вместе с историей — например, полностью сканируется ряд финансирования или дополнительных данных либо внутри calculate_signal()/on_bar() на каждом баре заново строится список и вызывается min()/sorted(). Заранее вычисли отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй поиск по временной метке: тогда сложность обработки каждого бара будет O(log n), а не O(n).
Сводка по итогам
Сокращение кода стратегии на каждом баре не устранит тайм-аут песочницы, если его вероятная причина находится вне этого кода (в заметках по итерации-3 причиной назван поиск по каталогу в раннере на перегруженном хосте). Прежде чем тратить итерации на изменения кода, следует подтвердить, что тайм-аут вызван инфраструктурой, и передать проблему на эскалацию.
После 3 итераций от стратегии отказались на этапе проверки: бэктест в песочнице Layer-3 превысил лимит реального времени в 300 с для окна длиной ~20,000 свечей (833 дней) ETHUSDT.BINANCE_SPOT 1 часов. До анализа результатов бэктеста, проверки аналитиком и оценки рисков дело не дошло.
Лонговая спотовая лимитная сетка без плеча на ETHUSDT, BINANCE_SPOT (разрешение исполнения 1H): независимые лимитные лоты на покупку фиксированного размера на геометрических шагах 2% ниже привязанного к моменту времени скользящего якоря; каждый закрывается собственной целью прибыли в +1 шага. Жёсткий стоп по нижней границе сетки ликвидирует книгу при пробое. Это переработка FMZ «Python Simple Grid» без выбранного задним числом диапазона, шага ниже комиссий и отсутствующего стопа.
Данных о доходности нет: отчёт о бэктесте пуст, отчёта об оптимизации нет, поэтому стратегия не выдала ни доходность, ни коэффициент Шарпа, ни число сделок.
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.