Моя модель научилась торговать бесплатно
Одна из моих ранних моделей находила сделки, которые выглядели надёжно, почти до скуки прибыльными — ровная струйка мелких прибылей, та самая стабильность, из-за которой начинаешь думать, что наконец-то нашёл что-то настоящее.
Она и правда кое-что нашла. Она нашла мир, где торговля бесплатна. В том мире модель была по-настоящему хороша. Беда в том, что мне, как и всем остальным, приходится торговать в другом — и в тот момент, когда я заставил торговлю стоить столько, сколько она стоит на самом деле, большая часть этой милой прибыли попросту испарилась.
Преимущество, которое жило в мире без издержек
Отличительной чертой стратегии было множество мелких, частых выигрышей. По отдельности каждый захват был крошечным; вместе они складывались в плавную, обнадёживающую кривую. Помню, как я был тихо горд этим. Это не выглядело как случайность. Это выглядело как дисциплина.
Чего я не учёл — так это того, что каждый из этих мелких выигрышей измерялся в условиях, где сам акт торговли был бесплатным — где можно было входить и выходить так часто, как вздумается, и никогда не платить за эту привилегию.
Допущение, которого я и не заметил, что делаю
Вот в чём тихий изъян. Когда я генерировал данные, на которых училась модель, я обращался с каждой сделкой так, будто она бесплатна. Никакой комиссии за совершение операции. Никакого слиппеджа — никакого разрыва между ценой, которую я воображал, и ценой, которую я бы реально получил. Так что сделка, ухватившая мельчайший благоприятный проблеск, записывалась как выигрыш, даже когда этот проблеск был меньше, чем в реальном мире стоило бы вообще совершить эту сделку.
Я не лгал модели намеренно. Я просто выстроил всё её понимание «хорошей сделки» поверх допущения — что торговля бесплатна, — которое, как правило, нереалистично везде, где деньги действительно переходят из рук в руки.
Издержки не уменьшают доходность; они меняют вердикт
Инстинкт — думать об издержках как о плоском налоге: проведи анализ, а потом в конце вычти некую фиксированную пошлину. Именно эта интуиция и делает эту ошибку такой лёгкой для совершения, и она неверна в важном смысле.
Издержка не просто заставляет выигрышную сделку выиграть немного меньше. Она может изменить, была ли сделка выигрышной вообще. Движение, прибыльное до издержек, после них может оказаться убытком. И если твои метки — само твоё определение того, какие сделки были хорошими, — вычислены так, будто издержек не существует, то ты не просто завышаешь результаты. Ты помечаешь часть убыточных сделок как выигрышные, а затем учишь модель искать их побольше.
Почему это хуже, чем звучит
Жестокая часть — это эффект отбора. Тестирование без трения может непропорционально благоволить стратегиям с высокой оборачиваемостью — тем, что торгуют непрерывно, собирая множество крошечных преимуществ. А это ровно тот профиль, который издержки реального мира карают сильнее всего, потому что каждая из этих многочисленных сделок платит пошлину.
Так что бесплатный бэктест завышает не все стратегии одинаково. Он склонен влюбляться сильнее всего именно в те стратегии, которым издержки навредят быстрее всего. Ты идёшь искать преимущество, а твоя чрезмерно щедрая симуляция вручает тебе нечто хрупкое к издержкам, завёрнутое в самую привлекательную на вид кривую, какую она только может произвести.
Решение: вложить издержку в само определение «хорошего»
Починка состояла в том, чтобы перестать относиться к издержке как к запоздалой мысли и перенести её в ту истину, на которой обучалась модель. Я свернул стоимость полного цикла торговли — комиссии и оценку слиппеджа, понимая при этом, что и это всё равно не охватит всех издержек реального мира, — в саму метку, так чтобы сделка считалась хорошей только в том случае, если она оставалась прибыльной после оплаты за своё существование. Движение, которое не могло преодолеть эту планку, помечалось тем, чем оно и было на самом деле: не стоящим того, чтобы его совершать.
Видимая результативность модели упала, иногда резко. Это падение не было регрессией. Это из того раннего прототипа вытекала фантазия, оставляя после себя обучающий сигнал, который был хотя бы чуть менее оторван от рынка, который берёт с тебя плату за участие.
Бэктест — это мир, который ты строишь
Урок, лежащий под этим, больше, чем комиссии. Каждый бэктест — это маленькая смоделированная вселенная, и она ровно настолько честна, насколько честны правила, которые ты решил в неё вложить. Опусти издержки — и ты построил не нейтральный тест, а мир добрее реального, и любая модель, научившаяся процветать там, научилась процветать на щедрости, которой не существует за пределами твоей симуляции.
Первый урок рынка новой стратегии почти всегда — та или иная версия одного и того же: действовать дороже, чем ты предполагал. Ты можешь либо преподать модели этот урок заранее, в безопасности симуляции, либо позволить рынку преподать его позже, на реальные деньги, по полной цене. Я предпочту заплатить за урок в классе подешевле.
Стратегия, прибыльная лишь тогда, когда торговля бесплатна, — это вовсе не стратегия. Это открытие, за совершение которого ты забыл взять с себя плату.
— Никаких сигналов, никакой доходности, не является инвестиционной рекомендацией.