У хорошего мастера должны быть хорошие инструменты – у кузнеца – молот, у столяра – рубанок, у алготрейдера… — оптимизатор.
Выкатил новую версию.
Настоящий мужской оптимизатор конечно же должен быть консольным. Этот красавчик быстр – 10 лет 5-минуток на простой стратегии вместе с вычислением всяких там PF, RF 0,3 секунды. И это на одном потоке! (с многопоточностью, к слову, пока не смог подружить, но заложил такую возможность).
Бэктестер берет задания из csv файла и пашет. Т.е. на данный момент задания на оптимизацию задаются в момент создания файла с заданиями, решил поменять план оптимизации – меняю файл – меняется дальнейшая оптимизация. Т.е. по факту сейчас план на оптимизацию предустановленный, но легко прикрутить в дальнейшем оптимизацию с обратной связью на результаты предыдущих бэктестов. Меня всегда смущали стандартные оптимизаторы в этой части – где перебирается один параметр, или несколько строго итерационно, но я не мог задать явно другие алгоритмы перебора или в общем случае даже не перебора, а «изменения» значений. А здесь могу: т.е., могу за раз закинуть задания сразу на нужное количество гипотез, хочу посмотреть, как стратегия себя ведет между тикерам – не трогаю ничего, меняю только тикер, хочу проверить как ведет себя между тайм-фреймами – меняю только тайм-фреймы и т.д., т.е. минут за 5-10 во всемогущем экселе можно создать файл с заданиями для нужного набора гипотез. Потом когда бэктестер отработает – берешь эксельку и дата-майнишь данные.
Все-таки когда ты точно знаешь, чего хочешь, свой бэктестер это кайф! Нужна скорость, но не нужна какая-то функциональность – супер, не делаешь тормозящую функциональность, получая преимущество в скорости, интересует какая-то конкретная парадигма в оптимизации – отлично, пилишь архитектуру именно под парадигму, без оглядки на стандартные «лучшие практики», «модные мнения» и прочие «а вот я так делаю, а ты какую-то херню».
Более менее ООПшная прога получилась, так что есть надежда, что можно мяса при необходимости накрутить с контролируемым уровнем сложности и поддерживаемости.
Если вдруг кто-то собирался завидовать – не надо, вам бы не понравился мой оптимизатор. Думаю, он будет нравиться только мне! :)
Любителям Технического Анализа, посвящается
Наверное, один из самых вечных споров на фондовом рынке, является спор о «Работает Технический анализ (ТА) или нет!»
Уж сколько было сломано копий, сколько исписано бумаги, сколько различных доказательств приводилось в поддержку той и другой точки зрения. Моё личное отношение к ТА менялось несколько раз. От восторженного в самом начале своего обучения, далее — крайне негативного в середине своей инвестиционной деятельности, и к умеренному восприятию в текущих реалиях. Моя ошибка, как и ошибка многих, заключалась в том, что мне очень хотелось найти «грааль», который позволит мне прыгнуть из «грязи в князи», быстро и с минимум трудовых и денежных затрат. Молодо – зелено, как говорится. На самом же деле, как и практически во всём остальном в нашей жизни, всё дело в статистике и в упорном труде. Я не буду здесь писать очередную книгу по техническому анализу, но расскажу о том, что требуется сделать трейдеру или техническому аналитику, чтобы получить своё «статистическое преимущество» (я эту фразу применительно к фондовому рынку прочёл в книге Тимофея Мартынова «Механизм трейдинга» и почему-то подумал, что эти слова принадлежат Александру Горчакову).
Я продемонстрирую важность нахождения «статистического преимущества» на самом простом индикаторе – скользящей средней МА, называемой на биржевом слэнге — Машкой. Принцип проверки полезности индикатора очень прост – когда цена пересекает МА снизу вверх открывается длинная позиция (на покупку), когда цена пересекает МА сверху вниз, то считается открытой короткая позиция. Это неполноценная торговая система, поэтому здесь нет никаких стоп-лосс и т.п. Задача состоит в том, чтобы продемонстрировать как технический аналитик должен подготовить к работе инструментарий, прежде чем делать какие-то прогнозы или выводы.
Параметры индикаторов, которые известны всем на фондовом рынке и написаны почти во всех книгах – далеко не всегда работают. Я протестировал много различных индикаторов, и могу с уверенностью сказать – что это действительно так. Например, можно часто услышать такое мнение «цена пресекла 200 дневную скользящую среднюю, и поэтому рынок перешёл….» а дальше зависит от того, куда цена пересекла.
График 1
Если мы возьмём, например, индекс Московской биржи (история которого доступна с 2003 года), и посмотрим какое математическое ожидание нам дало использование простой 200 дневной МА, то увидим, что историческая доходность индикатора составила 4.6% годовых, ожидаемая доходность равна 7.5 % годовых, а волатильность результатов индикатора составляет 24.6 % годовых!
И всё бы ничего, если бы не два «ужаснейших» обстоятельства:
В книге «Малая энциклопедия трейдера» Эрик Нейман предлагает нам использовать Экспоненциальную скользящую среднею для дневных графиков со следующими периодами усреднения 21, 55, 89, 144, 200
Давайте ради интереса сравним результаты для всех этих вариантов.
Таблица 1
Из таблицы видно, что практической пользой может обладать только параметр в 21, потому что даёт преимущество примерно в 1% над B&H, однако если наложить налоги и транзакционные издержки, с очень большой вероятностью всё преимущество исчезнет, а скорее всего приведёт к худшему результату. К тому же профиль графика доходности индикатора тоже оставляет желать лучшего (смотрите график 3 и таблицу со значениями по годам)
График 3
Таблица 2
Что же тогда делать техническому аналитику? Как минимум, постараться найти те параметры Машки, которые бы давали наибольшую доходность.
Оказывается, для случая EMAи по отношению к Индексу Московской биржи таким будет «18», оно даст 18,8% годовых против 13.6 на B&H, однако несмотря на конечный неплохой результат индикатор давал кучу ложных сигналов в период с 2014 по 2019 год.
График 4
Этот аспект подталкивает к рассуждениям на тему, что искать лучшие показатели, только на основании расхождения конечных результатов – не есть получение рабочего устойчивого значения. Хотелось бы найти такой показатель МА, который бы приводил линии доходности индикатора к более прямой линии, уменьшал его колебания и был, конечно лучше или равен конечному результату B&H. То есть нужна уже целевая функция, по который мы бы искали наш параметр.
Написав такую функцию и присвоив каждому из её элементов одинаковый вес, мы получим следующие показатели.
Таблица 3
График 5
Получили ли мы сейчас значения, которые помогли бы нам строить надежные прогнозы? Нет, мы только начали. Хотя уже существенно продвинулись вперед. По крайней мере мы уже понимаем, что далеко недостаточно взять какой-то индикатор с его стандартными показателями и строить на нём прогнозы или искать подтверждения на нём своим выводам.
Дальше стоит провести тестирование индикатора на предмет его отработки значений с прогнозированием в будущее, посмотреть на статистическую устойчивость получаемых результатов и т.д. и т.п. Только после таких экспериментов можно будет сказать с какой долей вероятности, наш индикатор предсказывает рост/падение рынка или что-то другое.
И это только один индикатор! А представьте себе если мы решили построить торговую систему, которая будет включать в себя несколько индикаторов, элементы управления позицией, риск-менеджмент. Там вероятности могут перемножаться, вычитаться, ошибки могут плодиться с огромной скоростью, потому что они напрямую зависят от количества параметров, которые использует аналитик/трейдер.
На этом я пока, пожалуй, остановлюсь. Если меня посетить вдохновение, может я двинусь дальше в своём рассказе.
Надеюсь, Вам было интересно! Удачи на фондовом рынке и в приумножении Вашего капитала.
Возьмём 2 распространённых утверждения:
1. Рынок меняется.
2. Историческое тестирование алгоритмов возможно.
Не противоречат ли эти утверждения друг другу? Если нет, то почему?
Свою позицию тоже могу озвучить: считаю, что рынок, в целом, не меняется. Поэтому и возможно историческое тестирование торговых систем. А методы тестирования подбираются в зависимости от природы конкретных тестируемых закономерностей.
В этой статье рассмотрим простейшую маркет-нейтральную стратегию из производных инструментов на индекса страха для S&P 500 (VIX). В основу положим контанго фьючерсов на VIX. Будем опережать SPY.
Использовать будем ETF на фьючерсы разных сроков. Всё это мы приготовим в Quantopian. Поехали!
Данный алгоритм появился из стороннего примера, найденного на Quantopian. Я его оптимизировал и сопроводил обильными комментариями на русском. Это не лучшее использование воронок (Pipeline). Но зато использует произвольные факторы (CustomFactor).
Всё это появилось по просьбе автора MindSpace.ru, Оксаны Гафаити. Поехали!
В этот раз сделаем простой бэктестер. Начнём с бинарных опционов, так как у них примитивный принцип работы. Мы делаем ставку, а она на следующей свече выиграет или проиграет.
Также посмотрим на работу стратегии с Мартингейлом и опасность, которую она несёт. Часто, есть периоды, когда подобные стратегии рисуют красивый график с прибылью. Но заканчиваются чудеса молниеносно быстро, несколькими ставками в максимальный убыток.
Для проверки, проведём тесты на минутном таймфрейме за июль 2018 года на паре EUR/USD. Поможет нам в этом Jupyter и Python 3.6.
Баллада о Граале.
Чуть не выбил от радости стену
Даже руку сломать не жаль
Я придумал сегодня Систему
Не систему -а просто Грааль!
Раньше был я кретином полнейшим
И оценивал фундаментал
А теперь приобщился к мудрейшим
Я теперь Алготрейдером стал!
На экран с наслажденьем взирая,
За бэктестом бэктест провожу
За пять лет миллион получаю,
Если седня пять тысячь вложу
Да конечно, бывают просадки
Ну процентов так двадцать пять
Да и раньше все было не гладко
И нас этим не надо пугать.
Своему дружбану Сереге
Заценить я бэктест предложил
Он решил что мильен слишком много
А вот тысячь семьсот бы вложил.
Я в квике программу сварганил
На квипайле -все по уму..
Запустил и работать оставил
Но где прибыль опять не пойму?
Не растет моей эквити график
А Серега звонит, злодей
Ты похоже ошибся нафиг!!
Выключай все давай скорей!!
Я все выключил… сердце бьется.
Как же так? Я же все посчитал!
И с проскользами все удается
И комиссии верно задал
Через час позвонил Серега
И я долго ему обьяснял,
Что терпеть нам осталось немного
Алгоритм мой в просадку попал
Успокоились… больше не ноем
Все нормально -смотри и терпи
Мы за месяц с таким настроем
До просадки в пол депо дошли
Не звонит мне больше Сережка
Не купил я пежо для жены
Алгоритм я подправил немножко
Жаль, для тестинга деньги нужны
От тревожных таких занятий
Постоянно мне снится сон
Будто я зверек непонятный
С перевернутым взад лицом
И бегу я вдаль с голой жопой
А башка всегда позади
Но никак не найти дороги
Сколько задом вперед не беги
Не осилить мне эти тропы
Или хищник коварный сьест
Ведь на каждую хитрую жопу
Жизнь придумала левый бэктест)))