Начнём с цифр, потому что в них весь аргумент. Круговая сделка по тейкеру на крупной перп-площадке обходится примерно в 0.10% от номинала комиссий. Фандинг на переполненном лонге может стоить вам 10-30% годовых. Рыночный ордер, крупный относительно глубины верха стакана, платит влияние по закону квадратного корня поверх спреда. А бэктест, который читает сегодняшнюю ревизию вчерашних данных, получает преимущество в несколько процентов годовых, которого никогда не существовало.
Удивительна здесь первая цифра. Не потому, что она большая, а из-за того, что она делает с частотой торговли. Все согласно кивают на «учитывайте комиссии», а потом тестируют стратегию, которая торгует сорок раз в день. При 0.10% за круг сорок сделок — это 4% от номинала в день издержек. Ни на одном перпе средней капитализации нет сигнала, который перекрывает такую планку. Стратегия и близко не была жизнеспособной, а бэктест без комиссий утверждал, что она блестящая.
Комиссии — это фильтр, а не скидка
Ментальная модель, с которой ходит большинство, такова: комиссии подрезают кривую — форма та же, просто чуть ниже. Это неверно. Комиссии — это фильтр по частоте. Они полностью стирают высокочастотные варианты преимущества и почти не трогают медленные. Когда наш конвейер начал применять реальные maker/taker тарифы по каждой площадке, умирали не плохие идеи — умирали хорошие идеи, торговавшие слишком часто. Лекарством обычно был более длинный таймфрейм, а не более удачный сигнал. Теперь мы отбрасываем всё, у чего средняя доходность на сделку ниже 0.15% от номинала: после двусторонних издержек там просто нечему накапливаться.
Фандинг — это налог на позицию, и у него есть память
Бессрочные фьючерсы платят фандинг каждый час или каждые восемь часов, и это не шум: он структурно скоррелирован ровно с теми сделками, которые нужны моментум-системам. Когда все в лонге, фандинг положительный — и ваша длинная моментум-позиция его платит. Бэктест без начисления фандинга систематически льстит трендследящим стратегиям на перпах. Мы усвоили это неловким способом: целое семейство funding-carry стратегий было автоматически отброшено, потому что движок не начислял тот самый фандинг, который они были созданы собирать. Сигнал был в порядке. Не хватало учёта.
Влияние растёт как квадратный корень из вашего размера
Вежливая фикция барного бэктестинга состоит в том, что вы исполняетесь по закрытию. Для мелких ордеров это примерно правда. Для чего-то существенного общепринятая модель гласит, что влияние растёт как квадратный корень из размера ордера относительно объёма, и оно уже не возвращается назад. Мы вкладываем оценку влияния по закону квадратного корня в каждое исполнение и в саму кривую капитала. Сильнее всего это проявляется именно там, где менее всего удобно: в ёмкости. Стратегия может быть по-настоящему прибыльной на $50k и структурно убыточной на $5M, и только кривая, учитывающая влияние, показывает эту границу.
Заглядывание в будущее прячется в данных, а не в коде
Никто не пишет if tomorrow_close > today_close: buy(). Заглядывание в будущее проникает через обвязку данных: сентимент новостей, помеченный временем публикации вместо времени получения; ставки фандинга, присоединённые к периоду, который они покрывают, а не к моменту, когда стали известны; «текущий» набор тикеров, применённый к истории (ошибка выжившего); пересмотренные макроэкономические публикации, заменившие ту цифру, которая на самом деле вышла на ленту. Наше правило — point-in-time везде: каждый вспомогательный ряд помечен временем, когда мы могли о нём узнать, и бэктест может прочитать только то, что существовало на эту наносекунду.
Проверка бэктеста — не в том, растёт ли кривая. Она в том, производит ли тот же код, получая те же сигналы вживую, те же самые сделки, — и узнать это можно, только сверяя ежедневно и всегда.
Последняя фраза — это реальный процесс, а не лозунг. Каждый день мы прогоняем окно каждой стратегии из бумажной торговли через бэктест-движок и сверяем сделки одну за другой. Когда бумага и повтор расходятся, одно из двух лжёт — и обычно это издержки или таймстемп. Четыре статьи расходов выше — просто те, что солгали нам первыми.
← Все статьи