Блог им. IvanNedomolkov_3ea
В прошлый раз я рассказывал, как моя платформа забраковала все 231 стратегии, которые я в неё загнал. Там был абзац про данные, который я сам назвал самой скучной частью проекта и проскочил в пять строк.
Соврал. Это не скучная часть. Это и есть проект.
Скачать тридцать лет дневных котировок по американским акциям — вопрос одного вечера и трёх строк на Python. Бесплатно, без регистрации. Дальше начинается интересное: эти данные врут, и врут они ровно в ту сторону, в которую вам приятно.
Расскажу, где именно, — по всем ловушкам, в которые я успел свалиться.
Ловушка первая: цены, которых никогда не былоВы качаете Adj Close и радуетесь: цены уже скорректированы на сплиты и дивиденды, считать доходность удобно. Проблема в том, что скорректированная история переписывается задним числом. Прошла выплата дивиденда — и все цены до неё сдвинулись. Был сплит — сдвинулись ещё раз.
Практический смысл: цена, которую вы видите в исторической строке за 2003 год, никогда не появлялась ни на одном экране. По ней нельзя проверить, сработал бы стоп. Нельзя понять, пробила ли бумага круглый уровень. Нельзя посчитать проскальзывание — вы считаете его от числа, которого не существовало.
Пришлось держать два ряда параллельно: 16 921 596 скорректированных котировок для расчёта доходности и 15 382 482 сырых, нескорректированных — для всего, что связано с исполнением. Плюс отдельно события корпоративных действий, чтобы одно можно было получить из другого и сверить.
Ловушка вторая: в вашей выборке нет покойников«Тестирую на акциях S&P 500» звучит солидно. Вопрос: состав индекса вы взяли какой? Сегодняшний.
А в сегодняшнем нет Enron, нет Lehman, нет Bear Stearns и ещё пары сотен компаний, которые за тридцать лет обанкротились, были поглощены или тихо ушли с биржи. Ваша стратегия торгует исключительно теми, кто гарантированно дожил до 2026 года. Это не бэктест, это машина времени с читом.
Лечится только одним способом: покойников надо вернуть в выборку. Я вытащил 1 083 делистинга из формы SEC Form 25 — официального уведомления о снятии бумаги с торгов — и восстановил исторические составы индекса на каждую дату. Не «какие бумаги в индексе», а «какие бумаги были в индексе именно в тот день прошлого».
Разница на глаз не видна. На результатах видна прекрасно.
Ловушка третья: отчётность, которой ещё не былоЭта ломает пополам всё фундаментальное. Квартальная прибыль лежит в базе с датой окончания квартала — 31 марта. Ваш бэктест честно берёт её 31 марта и принимает решение.
В реальности отчёт публикуется недели через три-четыре после закрытия квартала. Всё это время рынок его не знает. А ваша стратегия — знает.
Единственное лекарство — хранить фундаменталку point-in-time: с привязкой не к отчётному периоду, а к дате, когда цифра стала публичной. У меня это 2 830 167 записей из SEC EDGAR, и каждая знает свой день рождения.
Ловушка четвёртая: доходность, которая не полнаяСравниваете эквити стратегии с графиком S&P 500 и выигрываете? Поздравляю, вы выиграли у индекса без дивидендов. Это фора примерно в полтора-два процента годовых, подаренная вам просто так.
Мелочь? На тридцати годах это разница между «обогнал рынок» и «не обогнал».
Ловушка пятая, техническая: бесплатные источники молчат, когда врутВсе четыре ловушки выше — методологические, про них хотя бы пишут. А есть пятая, про которую не пишет никто, потому что она неинтересная.
Бесплатный источник данных иногда отдаёт мусор. Не падает с ошибкой — просто отдаёт: пропущенный день, нулевой объём, цену закрытия ниже минимума дня, тикер, который сменил владельца и теперь означает другую компанию. Если вы качаете данные скриптом раз в сутки, вы этого не заметите никогда.
Пришлось строить конвейер с несколькими источниками — yfinance, Stooq, SEC EDGAR, FRED — и автопереключением между ними, когда один замолчал или начал спорить с другим. И отдельно набор проверок целостности, который ругается на физически невозможные свечи.
Как понять, что данные всё-таки не врутСамая полезная вещь, которую я построил, — не конвейер, а автотест на тождество: сырая цена плюс все дивиденды и сплиты за период обязаны сойтись с полной доходностью. Это замкнутая проверка: если хоть где-то потерялась корпоративная выплата или задвоился сплит, равенство разъезжается.
Сходится с расхождением меньше десятой доли процента годовых. Именно этот тест ловил мои ошибки чаще всего — и, в отличие от меня, он не устаёт и ничего не хочет доказать.
Во что это вылилось по объёмуОколо 39 миллионов записей в аналитических слоях: котировки в двух видах, фундаментальные показатели, размеченные паттерны, факторные оценки. Тридцать лет, 5 264 тикера, 1996–2026.
И вот теперь — главное, ради чего я это всё пишу.
Данные — это не подготовка к исследованиюМне казалось, что загрузка данных — скучный подготовительный этап перед настоящей работой: генерацией стратегий, оптимизацией, поиском грааля. По времени вышло наоборот. Конвейер данных занял в разы больше, чем всё остальное вместе взятое.
И только благодаря ему результат прошлого поста чего-то стоит. Когда я говорю «из 231 кандидата не прошёл никто» — это утверждение имеет смысл ровно настолько, насколько честны данные под ним. На кривых данных я бы нашёл граали. Много. Красивых. Они бы даже работали — на бумаге, до первого реального ордера.
Если строите своё, короткий чек-лист, который сэкономит вам полгода:
1. Храните сырые цены рядом со скорректированными. Всегда.
2. Верните в выборку тех, кто умер. Их отсутствие — самая дорогая ошибка из всех.
3. Фундаменталку привязывайте к дате публикации, а не к отчётному периоду.
4. Сравнивайтесь с полной доходностью индекса, а не с ценовым графиком.
5. Сделайте один замкнутый автотест на тождество данных — он найдёт то, что вы не догадаетесь проверить.
Это не гарантирует, что вы найдёте прибыльную стратегию. Это гарантирует другое: если не найдёте, то узнаете об этом за компьютером, а не на брокерском счёте.
—
Про кухню, если интересно: headless-база на 1С (сто с лишним объектов, ноль форм, всё через HTTP-API) + Python для расчётов + LLM-агент в Telegram, через которого я гоняю бэктесты. Ордера уходят брокеру только после подтверждения кнопкой — никакого автопилота. Разбор архитектуры с картинками: tezbase.kz/keysy/stratlab-kvant-platforma-na-1c
Дисклеймер: личный исследовательский проект, режим paper-trading. Не инвестиционная рекомендация.
Ho_Chu, и, возможно, не прогадали. Я остался скорее из инженерного упрямства: американская история просто лучше всех документирована — есть делистинги, есть исторические составы индексов, есть отчётность с датами публикации. На ней удобно отлаживать саму методику, даже если торговать в итоге будешь совсем другое.
Я не использую фундаментал и мне было проще. А сейчас совсем просто — волевым усилием отказался от идеи торговли американских акций. Пока готовлю инструмент только для QQQ. И не знаю, придет ли его время.
Сколько акций у Вас в базе, кстати.
QQQ в этом смысле сильно проще: вся возня с историческим составом индекса и корпоративными событиями отпадает, остаётся чистая механика. Единственное, дивиденды у него всё равно есть, и при сравнении с бенчмарком на длинном горизонте они заметно набегают.
Но чтобы этот состав вообще восстановить, нужны все 5 264: пока не сложишь входы, выходы и делистинги, не узнаешь, кто и когда в индексе был. Плюс широкий срез работает как контроль: если эффект жив только на узком списке, это чаще подгонка, чем находка.
beststocks.ru/stock/qqq/dividends
SergeyJu, справедливо — я бы даже усилил. Один инструмент это не просто меньше подгонки, это принципиально другое число степеней свободы: нет выбора вселенной, нет исторического состава, нет ошибки выжившего. Половина моих полугодовых мучений при таком подходе просто не возникает.
Но подгонка никуда не девается, она переезжает. С выбора бумаг — на выбор параметров и на выбор окна, в котором вы решили, что правило работает. Вопрос просто звучит иначе: не «не одни ли это выжившие», а «не подогнал ли я период под то, что уже подсмотрел».
За ссылку спасибо. Дивидендная доходность QQQ невелика, и на годовом горизонте ей легко пренебречь — но на двадцатилетнем именно она и превращает ценовой график в полную доходность. Это ровно та четвёртая ловушка: она незаметна ровно до того момента, когда начинаешь всерьёз сравниваться с бенчмарком.
Технически намного проще сделать несколько простых систем на разных активах, да, с некоторым риском переподгонки на каждой, начать торговать со скромными весами и заняться выбраковкой неудач и добавлением свежих конструкций. То есть решать портфельную задачу как в теории, так и на практике. Чем все вот это, что Вы огромным трудом создали. Если бы я был руководителем компании, в которой много денег в ДУ и много фондов, я бы Вас пригласил на работу. Но для частника, имхо, Ваш труд чрезмерен. Тем более, что каждый новый день надо отслеживать и фиксировать свежую информацию.
«У лисы 33 уловки от собак, а у кошки только одна» ©
kurd, «у кошки только одна» — забираю в копилку. Похоже, весь мой проект и был дорогим способом убедиться, что тридцать три уловки не работают, а одну кошачью я так и не нашёл. Утешаюсь тем, что выяснять это полгода за компьютером всё-таки дешевле, чем пару лет на счёте.
www.cbr.ru/hd_base/metall/metall_base_old/
www.cbr.ru/hd_base/metall/metall_base_upto/
cbr.ru/hd_base/metall/metall_base_new/
История с 25.03.1997 года
А если сочетать фьючерс с нулевым ГО в Сбербанке с резервом в маржинальном SBMM и в накопительном счёте…
Спасибо за ссылки, забрал. История с 1997 года по металлам — это как раз то, чего мне не хватает по российской части: у меня туда руки пока не доходили, а без длинного ряда там и проверять нечего.
По конструкции с фьючерсом и резервом в фондах ничего умного не скажу — не моя область, я про данные, а не про схемы исполнения. Врать не буду.
www.tadviser.ru/images/6/65/IMG_20230518_134809_939.jpg
Сегодня уже более $40 трлн, не тренд, а историческая неизбежность.
Всё остальное пена и шелуха.
лучшая Стратегия —Цена выше выборки по среднему...(АГ)
wistopus, так и есть — не гарантирует, я об этом прямым текстом в конце и написал. Гарантирует другое: что вы это выясните до того, как занесёте деньги, а не после.
Про «цену выше средней» — тут самое интересное. У меня строгий гейт валил в первую очередь сложные многофакторные конструкции, а простые правила с двумя параметрами держались дольше всех. Математика тут как раз на стороне простого: чем меньше параметров, тем меньше вариантов вы перебрали, тем ниже планка, которую нужно взять по Deflated Sharpe. Красивому монстру на десяти факторах эта планка задирается до небес — и он честно об неё убивается.
зе Cooler, вопрос по делу, и ответ у меня неудобный.
Мой набор лежит в левой части вашего графика. 231 кандидат — это несколько семейств (моментум, возврат к среднему, пробой) с перебором параметров внутри каждого. Соседние по параметру варианты идут почти в обнимку, между семействами корреляция умеренная. Эффективное число независимых попыток там не 231, а порядка числа семейств — ближе к десятку, чем к сотне.
И следствие вы называете верно: в оценку я подставлял N = 231 как есть. Значит ожидаемый максимум под нулевой гипотезой был завышен, а гейт получился строже, чем следовало. На итог «не прошёл никто», думаю, это не повлияло — до порога не дотягивали с большим запасом, а не на сотых. Но это именно «думаю»: пересчёт с эффективным N я не делал, так что как факт не подаю.
Правильный путь — тот, который вы и предлагаете: считать распределение максимума эмпирически по самому набору, с сохранением корреляционной структуры (блочный бутстрэп по времени), а не по формуле. Поставил в очередь, напишу, где реально ляжет порог и насколько далеко от него были лучшие.
А вы эффективное N как оцениваете на практике — по средней попарной корреляции или через собственные числа ковариационной матрицы?
Для оценки верхней границы, внимание нужно УЖЕ иметь рассчитанную дисперсию по выборке. Если у вас есть дисперсия, наверное вы все остальное метрики также рассчитали, включая премловутый максимум выборки. ИНЫМИ СЛОВАМИ Бейли берёт ОДНО число для дисперсии шарпов а потом строит оценки максимума последовательности с любым числом попыток 1 или 1000, не важно.
зе Cooler, спорить не буду: цепочка допущений там длинная, и «курица или яйцо» вы поймали точно — дисперсию шарпов формула требует раньше, чем объясняет, откуда её взять.
Вывод у меня из этого практический: аналитику не использовать вовсе. Распределение максимума считается эмпирически по своему же набору — перемешать доходности кандидатов, прогнать гейт на перемешанном, повторить тысячу раз и посмотреть, какой шарп там вылезает случайно. Ни Гумбеля, ни нормальности, ни вопроса о сходимости. И ваш счёт попыток встраивается туда сам: коррелированные варианты не дают тысячу независимых шансов, они дают ровно столько, сколько дают.
На мой итог это не повлияло бы — до порогов не дотягивали с большим запасом. Но формулу «сдутого шарпа» из отчётов уберу: она даёт точность, которой у неё нет.
Я вот недавно в очередной раз убедился, что СП500 с 23 года работал как минимум в 2 разных режимах и то, что было верно, скажем, до конца 80-х может быть вовсе не применимо сейчас. Для НАСДАК 100 нет такой истории, но и там как минимум 2 разных режима. А уж про акции и говорить сложно, уж больно их много и они иногда очень разные.
bonzamen, это, пожалуй, самое сильное возражение ко всей затее — и полного ответа у меня на него нет.
История говорит о рынке, которого больше не существует: другие участники, другие комиссии, другие скорости, до 2001-го вообще котировки в долях. Чистота данных тут не спасает вообще никак — данные-то как раз честные, меняется механизм, который их породил.
Единственное, что я с этим делаю: не верю результату, который держится на одном режиме рынка. В гейте есть требование показать себя минимум в 12 ячейках из 15 по сетке «режим волатильности × период». Вашу проблему это не решает, но хотя бы отсекает стратегии, которые жили ровно в одну эпоху и умерли вместе с ней.
SergeyJu, и это, судя по моим же результатам, разумнее. Строгий гейт в первую очередь выкашивал именно многофакторные конструкции: чем больше ручек, тем выше планка, которую надо взять, чтобы отличиться от везения. У двух-трёх простых индикаторов эта планка хотя бы достижима.
Забавно, что к этому выводу я пришёл не из вкуса к простоте, а от противного — перебрав кучу сложного и посмотрев, что от него остаётся после поправки на число попыток.
Ну и реплика по поводу скорректированных данных:
данные же скорректированы пропорционально, то есть стоп 10% или 2*ATR уместен как для цены $50 так и для любой другой цены, хоть даже $0,1 — убыток в деньгах будет один и тот же, если сумма позиции одинаковая. То же самое и с проскальзыванием. Только круглый уровень проблематичен.
Спасибо. Идея с двумя графиками правильная, беру — это ровно та вещь, которую надо показывать, а не объяснять словами.
Механика «задним числом» простая и оттого неприятная: исправленный ряд пересчитывается назад при каждом новом дивиденде и сплите. Компания выплатила дивиденд сегодня — вся её история за тридцать лет сдвинулась вчера вечером. Вы вчера сохранили котировку, сегодня скачали ту же дату и получили другое число, при том что ошибки нигде нет.
На валютном рынке этого нет вовсе: там нет корпоративных событий, ряд не переписывается. Зато есть своя версия той же беды — разные котировки у разных источников на одну и ту же минуту и дырки в тонкие часы. Другая болезнь, но лечится тем же: сверкой двух независимых источников, а не доверием одному.
PrAct, да фигня это всё. Абсолютная.
Если работать не на тиках, качество котировок практически ни на что не влияет. Платные, бесплатные… НИРАЗУ не пользовался платными хотя бы потому, что они ничем не могут отличаться от тех, которые даёт брокер или ДЦ на реальном аккаунте.
Разница котировок не в этом — она зависит от брокера! От настроек его торгового сервера! Но считать котировки одного источника более правильными, чем котировки другого — это бред сивой кобылы на сносях!
Если про алго, то робота надо настраивать на котировках брокера, который будет торговаться, а не на каких-то, млять, «платно-правильных».
Настроишь на платных, а торговать робот будет ...
Мама говорила:
«ЕШЬ ЧТО НА СТОЛЕ», типа соседские пирожные не для тебя.
Кстати, котировки могут быть идентичными,
НО у брокеров разные проскальзывания и другой спред...
ВОТ куда смотреть надо, если на мелких работать!
Почти, но с одной поправкой. Тождество замкнуто внутри ценовых данных: берём сырой, неисправленный ряд плюс ленту корпоративных событий (дивиденды и сплиты за период) и пересобираем из них полную доходность — она обязана сойтись с adjusted-рядом провайдера. То есть сверяются два независимых представления одного и того же. Разъехалось — значит где-то потеряна выплата или задвоен сплит. EDGAR у меня не для этого, там фундаменталка point-in-time, у неё своя задача.
По второму вопросу: нужны обе вещи, но они про разное. Правка ряда нужна, чтобы сигнал не видел ложного движения — в день отсечки сырая цена падает на размер дивиденда, и любая пробойная или моментум-логика честно читает это как обвал. Учёт в стратегии нужен для денег: дивиденд приходит на счёт, с задержкой и за вычетом налога.
Если делать только «в стратегии» — сигналы будут срабатывать на искусственных гэпах четыре раза в год по каждой бумаге. Если только правку ряда — потеряете денежный поток. У меня разведено: сигналы считаются на исправленном ряду, деньги — на сыром плюс события с реальной датой зачисления.
Робот Вася, извините за задержку — ваш вопрос уехал вверх по дереву, и я его вчера пропустил.
По первому: да, схема ровно такая. Берётся сырой ряд, отдельно — корпоративные действия из SEC/EDGAR (сплиты и дивиденды с датами), поправка накладывается на сырой ряд самостоятельно, и результат сверяется с тем adjusted-рядом, который отдаёт источник. Тест утверждает не «цифры совпали до знака», а что расхождение укладывается в допуск; всё, что вылезает, идёт в разбор поимённо — обычно это либо пропущенный сплит, либо дивиденд не с той датой.
По второму — вопрос хороший, и ответ у меня скорее «и то, и другое, но в разном месте». Учитывать дивиденды в стратегии можно и часто правильнее: тогда это отдельный денежный поток с датой экс-дивиденда, с налогом, и видно, сколько доходности приходит из тела, а сколько из выплат. Проблема не в этом, а в том, что бесплатные источники обычно отдают уже adjusted-ряд, где поправка вшита в цену задним числом и пересчитывается при КАЖДОМ новом дивиденде. То есть история меняется под вами: бэктест, прогнанный сегодня и через полгода на «тех же данных», даёт разные числа, и вы об этом не узнаете.
Поэтому у меня хранится сырой ряд плюс таблица корпоративных действий, а adjusted собирается на лету. Тогда стратегия сама решает, учитывать дивиденды или нет, а бэктест остаётся воспроизводимым — это и была вся цель возни. Плюс мелочь, на которой легко попасться при сравнении с индексом: total return и price return надо сводить в одной системе, иначе бенчмарк обыгрывается на ровном месте.
Если нет- все это нищенство. Убыточно
Пост не про доходность и не про размер счёта — в нём нет ни одной цифры прибыли, и это сознательно. Он про то, почему бэктест врёт, если под ним кривые данные.
Эта часть от капитала не зависит вообще: выжившие тикеры, дивиденды и фундаменталка из будущего одинаково рисуют красивую эквити и на двухстах тысячах, и на двадцати миллионах. Разница только в том, сколько стоит поверить нарисованному.
Wright_king, справедливо — на прямой вопрос я ответил в сторону. Исправляюсь.
Платформа торгует акции США, NYSE и NASDAQ. Портфельные факторные стратегии на дневных данных, ребаланс раз в месяц-квартал. Ни фьючерсов, ни опционов, ни интрадея — минуток в базе нет вообще, только дневные бары.
И сразу вторая часть, чтобы не выглядело скромничаньем: сейчас это paper-trading, реальных денег контур не крутит. Поэтому в посте и нет ни одной цифры доходности — их пока попросту нет.
Ваш класс задач другой. Фьючерсный робот, который набирает и сбрасывает позицию внутри дня, живёт на других данных и других рисках: там мои тридцать лет дневных баров не нужны вовсе, там нужен стакан и качество исполнения. Сравнивать нас по одной линейке смысла мало.
Почему? Комиссии адские! Нужен свой брокер на бирже.
Вы сразу видно — любитель.
Прикольное утверждение, если учесть что сейчас почти у всех амер.брокеров вообще нет комиссии, а у остальных они чисто символические :)
Ну а то что вы НИКОГДА ОБЬЕМЫ В 50-100 тыс акций никогда не выставляли в стакан и не знаете как это делается — это и так ясно из ваших же суждений
Если что, это крупнейший амер.брокер :)
Совет — если что не знаете всегда можно воспользоваться ответом ИИ. Например, заходите на Яндекс и спрашиваете у Алисы: «у каких американских брокеров нулевые комиссии на акции».
Если не умеете, сразу привожу ответ:
Хорошая новость: сейчас действительно много американских брокеров предлагают нулевую комиссию за сделки с акциями (и часто с ETF). Я подобрала несколько вариантов, но сразу оговорюсь: «ноль» обычно касается именно акций — по другим инструментам (опционы, некоторые фонды) могут быть свои сборы. Поэтому перед открытием счёта советую детально изучить тарифы. money.usnews.com +2
Вот брокеры, где такая опция есть:
И не заметили нулевой комиссии в первой же строчке?
А что означает забраковала?
1) Все стратегии оказались убыточные?
2) Все результаты оказались хуже результата индекса S&P500?
3) Были свои ожидания типа +50% годовых и они не сбылись?
4) Что-то другое?
Федор Подпольный, вариант 4.
Убыточность на истории ни при чём: на обучающем куске у стратегий всё выглядело прилично, иначе они бы до гейта не дошли. Гейт проверял другое — сохраняется ли преимущество на данных, которых стратегия не видела, и переживает ли оно поправку на множественность. Когда перебираешь 231 вариант, лучший показывает высокий шарп уже просто по теории вероятностей, и его надо дисконтировать — deflated Sharpe у Бейли ровно про это.
Ни одна не удержала результат вне обучающего окна после поправки. До сравнения с S&P500 дело поэтому не дошло: это следующий шаг, а первый никто не прошёл.
Федор Подпольный, почти — только сетку никто не обучал, нейросетей там нет вовсе. 231 кандидат это перебор параметров внутри трёх семейств: моментум, возврат к среднему, пробой. Подгонка та же самая, просто руками.
И «так и должно было быть» — согласен. Обидное в другом: на словах это понятно каждому, а на глаз, по одной красивой кривой на обучающем куске, отличить подгонку от преимущества невозможно. Ради этого гейт и строился.
Просто трейдер, ничего не продаю: ни сервиса, ни подписки, ни сигналов. Платформа своя, крутится на бумаге, доступа к ней нет ни у кого, кроме меня. Продавать там нечего — она пока ровно ноль стратегий выпустила в жизнь.
Сжато в два предложения: скачать 30 лет истории рынка — это вечер, а привести её в состояние, на котором бэктест не врёт, — полгода (сплиты, делистинг, ошибка выжившего, задним числом переписанные значения). После чистки из 231 стратегии гейт на новых данных не прошла ни одна — и это результат, а не провал: до чистки половина из них выглядела прибыльной.
примерно 15 лет назад был такой же душный и так же заморачивался в подходах к делу
убил кучу времени, наресерчил кучу знаний
а оказалось потом, что начну зарабатывать совершенно в другом )
Андрей К, добрый вечер ) Подозреваю, что иду ровно этим маршрутом: полгода чинил данные, и главный результат пока — понимание, чего делать не надо.
А в чём в итоге начали зарабатывать, если не секрет? Интересна как раз та часть, где «совершенно в другом».
поэтому это получился арбитраж
в ручной торговле — это просто горизонтальный уровень по правилу, если раз отскочило, то отскочит еще раз
Андрей К, и не поспоришь — самое простое чаще всего и самое живучее. Мой «душный» маршрут ровно туда и ведёт, только дорогой через грабли: сначала строишь сложное, потом полгода выкидываешь лишнее и остаёшься с горизонтальным уровнем ) За честный размен спасибо.
Идею про включение разных компаний в индексы — вообще не понял. Как это в принципе повлияет на какую то стратегию? Вы же не индекс торгуете, а отдельные тикеры?
Гуру Хренов, по первому вы правы, и я это в посте смазал. Сам гэп на отсечке реальный, чинить его не надо. Беда в другом: бесплатные источники отдают не сырой ряд, а adjusted. После каждого нового дивиденда они домножают всю прошлую историю на новый коэффициент. Бар за 2011 год сегодня один, а через квартал будет другой. Прогоняешь бэктест в январе и в июне на одном и том же периоде, получаешь разные числа и сидишь гадаешь, что у тебя поехало в коде.
Плюс совсем практическое: минутки у большинства поставщиков не скорректированы, а дневки от них же скорректированы. Склеиваешь в одну базу и ловишь скачок на дате отсечки на ровном месте. Поэтому цены у меня сырые, дивиденды лежат отдельной таблицей, и коэффициент считается на лету под конкретный прогон.
Про индексы вы поняли меня буквальнее, чем я написал. Речь не про торговлю индексом, а про то, откуда берётся список тикеров. Возьмёшь сегодняшний состав S&P 500 и погоняешь по нему стратегию за 20 лет — тестируешь только тех, кто дожил и попал в индекс. Вылетевшие и обанкротившиеся в выборку не попали вообще, а попавшие туда попали обычно ПОСЛЕ того, как выросли. Доходность выходит красивая и нереализуемая: в 2005 этот список знать было неоткуда. Нужен состав на каждую дату.
ну да, статистика возвратов учитывает дивиденды
а зачем вообще использовать «Бар за 2011 год », которые дают какие то источники, когда эти бары можно самому подсчитать на основе «сырых»котировок? А дивиденды на американском рынке все равно смехотворны, я бы их даже не учитывал, особенно — при краткосрочном трейдинге