Избранное трейдера Сергей Сергаев
Индексу РТС недавно исполнилось 25 лет. И это совсем немного.
Но, имея уже определенную историю, мы разберем, казалось бы, извечный вопрос инвестиционной привлекательности российского фондового рынка, утверждение о неработающей здесь стратегии «купил и забыл» или «купи и держи», но для начала придется рассмотреть частности.
Стоит вспомнить, что по факту до 2008 года ни у кого не возникало таких вопросов, почти никто не говорил в серьез про американские акции на фоне российских. «Какая к черту Америка? У нас перспективный развивающийся рынок, который прет и прет в гору» — сказали бы Вам в двухтысячные.
Сейчас индекс РТС находится на уровне 2007 года, а для инвестировавших в 2008 году картина, можно сказать, выглядит пугающе: продержать акции более 10 лет, да при этом остаться в минусе. Речь, конечно, идет про доходность в долларах, когда это обсуждают. Но и в рублях часто любят приводить в пример такие известные истории потери стоимости как ВТБ, Газпром и даже Магнит с 2013 года.
Что такое горизонтальные объемы
Горизонтальные объемы или профиль объема – это вспомогательный трейдерский инструмент, с помощью которого можно определить значимые уровни, которые учитывают в своей торговле крупные рыночные игроки.
Ценность этого инструмента в том, что его можно комбинировать практически с любой торговой стратегией. Проведя анализ рынка с помощью горизонтальных объемов — вы получаете более достоверный сигнал, которым можно подтвердит или опровергнуть полученную точку входа.
Торговля на рынке привязана ко времени, цене и объему. Опираясь на эти показатели был создан индикатор рыночного профиля. Согласно его алгоритму, 70% всех сделок совершаются по равновесной цене. На графике эта область обведена в белый прямоугольник. Кривая профиля есть не что иное, как нормальное статистическое распределение, а объемы, заключенные в прямоугольник, находятся в пределах стандартного отклонения. Белой горизонтальной линией отмечена цена с наибольшими горизонтальными объемами.
Я не питал никаких иллюзий. Я прекрасно понимал, что я увижу. Сразу начну с результата: 9 из 10 сайтов, которые я открыл — это очень сомнительные проекты (возможно даже мошеннические, но я решил не проверять на своем опыте). Ссылок никаких не будет, мало ли. Выводы будут в конце.
Я пользуюсь браузерной версией Яндекс-почты, там зарегистрирована наша корпоративная почта. И часто всплывают баннеры, которые не удалить блокировщиками рекламы. Однажды я кликнул на такой баннер: «Инвестируй в проекты Газпрома!». Вот что там было:
Довольно хитро обойден 38-ФЗ, запрещающий давать гарантии доходности, здесь «гарантируют» какие-то выплаты. При этом выглядит так, будто бы нам гарантируют доходность то ли 44% в год, то ли 44% в месяц… Я был удивлён, оказывается Яндекс может рекламировать подобную дичь! И я решил провести эксперимент: я открыл 10 баннеров об инвестициях подряд, и вот что я там увидел:
Приветствую.
Не станем углубляться в философию оптимизации своего алгоритма, и для чего нужен бектест. Могу сказать свое мнение — оптимизировать можно, но только делайте это правильно. В своей практике, бектестинг для меня играет крайне малую роль при создании алгоритма. Но все же некие аспекты и зависимости можно выделить.
Для начала хотелось бы показать как вообще это выглядет все в рамках TSLab.
Два примера — на первом рисунке дефолтно созданный алгоритм под простые индикаторы, RSI 20 поверх SMA20. Купили когда индикатор близок к 100, продали когда близок к нулю. Никаких фильтров и усложнений (так нужно для данного поста). Так же для примера показана таблица результатов под 400проходов. От 5 до 100 с шагом 5 для каждого индикатора. (тоже лишь для примера). В ней можно усмотреть что количество отрицательных результатов — довольно маленькое. (удачный пример, не более)
Простите за банальность, работа с данными начинается с их получения из внешнего источника. Мы будем получать их из CSV-файла архива котировок, скачанного с сайта Финам. Для работы с другими источниками вам надо будет немного изменить программу.
Я уже давно не работаю непосредственно с CSV, и храню все данные в БД SQLite. Поначалу я хотел написать программу чтения CSV с нуля, но выяснилось, что я уже подзабыл как это делается, однако нашелся рояль в кустах — моя старая библиотека читающая данные из CSV-файла непосредственно в программу. Ее мы и будем использовать.
Собственно, Python и ориентирован на работу с библиотеками, и не нужно знать что там внутри, важно только уметь с ними работать, а сами программы с использованием библиотек станут очень простыми.
Для начала качаем с Финам историю в формате CSV-файла следующего вида:
<TICKER>,<PER>,<DATE>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL> SPFB.Si-12.20,1,04/05/20,10:00:00,76900.0000000,76990.0000000,76900.0000000,76990.0000000,3 SPFB.Si-12.20,1,04/05/20,10:06:00,77695.0000000,77695.0000000,77400.0000000,77400.0000000,8 SPFB.Si-12.20,1,04/05/20,10:08:00,77781.0000000,77781.0000000,77700.0000000,77750.0000000,30 SPFB.Si-12.20,1,04/05/20,10:13:00,78088.0000000,78098.0000000,78088.0000000,78098.0000000,6 SPFB.Si-12.20,1,04/05/20,10:14:00,78100.0000000,78100.0000000,78100.0000000,78100.0000000,1