Содержание
Глава 1. Теоретические основы статистического арбитража
Чистый арбитраж и статистический арбитраж
Торговая стратегия статистического арбитража
Глава 2. Аналитическая платформа PhD-trader
Корреляционный и коинтеграционный анализ
Глава 3. Рекомендации по использованию платформы
Перечень стратегий, доступных для тестирования и оптимизации в PhD-trader
Как интерпретировать результаты бэктеста
Оптимизация методом дифференциальной эволюции
Внешний вид интерфейса PhD-trader
Глава 1. Теоретические основы статистического арбитража
Чистый арбитраж и статистический арбитраж
Арбитраж является прибыльным бизнесом в глобальной индустрии хедж-фондов. Существует два типа арбитража на финансовых рынках: чистый арбитраж и статистический арбитраж. Чистый арбитраж теоретически предполагает извлечение безрисковой прибыли. Когда два взаимозаменяемых актива торгуются по разным ценам, то может иметь место возможность чистого арбитража.
Возможности чистого арбитража появляются редко, однако статистический арбитраж представляет множество привлекательных возможностей для арбитражера, который готов к некоторому риску. Идея статистического арбитража состоит в том, что арбитражер находит два актива, цены которых имеют историческую связь, открывает противоположные позиции в этой паре, когда данная связь временно нарушается и реализует прибыль, когда связь восстанавливается.
Статистический арбитраж относится к активному портфельному менеджменту, направленному на систематическое генерирование положительной альфы (избыточной доходности сверх рыночного бенчмарка). Однако, как утверждает Гипотеза эффективного рынка, которая была господствующей финансовой теорией на протяжении порядка 50 лет, такой подход бесполезен, поскольку невозможно превзойти эффективный рынок [5].
Фундаментальной теории финансового рынка был брошен вызов в 2004 г. Эндрю Ло его инновационной теорией, которую он назвал Гипотезой адаптивных рынков (ГАР) [4]. ГАР рассматривает финансовый рынок как экосистему, где разные группы инвесторов или одиночные инвесторы конкурируют за ограниченные ресурсы, т.е. прибыли, и это происходит в динамично изменяющейся рыночной среде. Рыночная среда включает в себя такие факторы как технологии, демография, политика, рыночная траектория и т.д. Таким образом, ГАР применяет принципы эволюции – конкуренцию, адаптацию и естественный отбор к финансовым рынкам.
Эволюционный динамизм, предполагаемый ГАР, обусловливает изменчивость рыночной эффективности, т.е. рынок часто неэффективен и поведенческие нерациональности имеются в большом количестве и их можно выгодно использовать [3].
Торговая стратегия статистического арбитража
Статистический арбитраж – это, по сути, торговля спредом между двумя финансовыми инструментами, чьи цены исторически коррелированы. Когда цены имеют положительную корреляцию, они склонны двигаться более-менее в одном направлении большую часть времени. Спред – это разница между ценами двух финансовых инструментов (нога 1 и нога 2), которая может быть смоделирована разными методами. Другим критерием исторической связи между двумя финансовыми инструментами, похожим на корреляцию, является коинтеграция. Цены коинтегрированы, когда спред исторически стационарен, т.е. имеет характер поведения возврата к среднему и статистический арбитраж обычно имеет более высокую эффективность, когда он применяется на коинтегрированых парах.
Суть в том, чтобы выбрать такую пару, рассчитать спред и когда спред отклоняется от своего исторического среднего на некоторую значительную величину, продать коротко [2] дорогой инструмент и купить дешевый инструмент, а затем закрыть позиции, когда спред возвратится к среднему или уйдет в отклонение в противоположную сторону.
Здесь мы предложим пример (рисунок 1).
Рисунок 1
На рисунке 1 четыре линии. Черная линия представляет спред между ногой 1 и ногой 2. Красная линия представляет средний уровень спреда, который является скользящим средним. Синяя и зеленая линии – это верхняя и нижняя раздвижки и они служат триггером на открытие позиций, когда они пересекаются линией спреда.
Арбитражер продаст спред, т.е. продаст ногу 1 и купит ногу 2, при первой стрелке, увеличит арбитражную позицию при второй стрелке и закроет все позиции при возврате к среднему, купив спред при первой зеленой стрелке. Арбитражер войдет в длинную позицию по спреду во время второй зеленой стрелки и закроет все позиции во время последней красной стрелки. Позиции не обязательно должны закрываться при достижении среднего (красная линия), мы лишь представили здесь такую модель.
Глава 2. Аналитическая платформа PhD-trader
PhD-trader – это электронная платформа для исторического анализа и оптимизации разнообразных торговых стратегий статистического арбитража. Платформа разработана кандидатом экономических наук, который также является финансовым трейдером. Основные пользователи PhD-trader – алгоритмические трейдеры и ученые-исследователи.
PhD-trader состоит из 3 частей: Конструктор, Бэктестер и ИИ-Оптимизатор. Конструктор предназначен для конструирования стратегии на основе выбранных моделей, параметров и данных по финансовым инструментам. Бэктестер предназначен для обратного тестирования стратегии, сконструированной в Конструкторе, и получения показателей эффективности на выходе. ИИ-Оптимизатор предназначен для оптимизации параметров стратегии, сконструированной в Конструкторе на основе нелинейного многомерного оптимизационного алгоритма Дифференциальной Эволюции, который относится к генетическим алгоритмам, разделу Искусственного Интелекта.
Конструктор имеет 3 панели входных элементов (Данные, Модель индикаторов и Управление хеджем и сигналами) а также возможность отразить Корреляционный и коинтеграционный анализ пары и График индикаторов.
В панели Данные подготавливаются временные ряды цен пары финансовых инструментов для бэктеста. Пользователь может отразить Корреляционный и коинтеграционный анализ пары нажатием на соответствующую кнопку.
В Модели индикаторов пользователь может создать множество комбинаций индикаторов разного типа с разными параметрами. Пользователь может отразить График индикаторов нажатием на соответствующую кнопку.
В панели Управление хеджем и сигналами пользователь выбирает логику размера приказа по ноге 2 и некоторые аспекты логики торговых сигналов.
Готовая пара из базы данных приложения: если здесь поставлена галочка, то для бэктеста пользователь выбирает готовую арбитражную пару из базы приложения.
Источник данных ноги 1: источник временного ряда цен 1-й ноги арбитражной пары для бэктеста. Обратите внимание, что в случае валютных пар нога 1 и нога 2 должны иметь одинаковую котируемую валюту.
База данных приложения: если здесь стоит галочка, то пользователь будет выбирать временные ряды цен для ноги 1 из базы данных PhD-trader.
Yahoo Finance (дневные): если выбрана эта кнопка, то пользователь импортирует временные ряды цен для ноги 1 из Yahoo Finance, вводя тикер (символ) желаемого инструмента. Только дневные данные доступны. Берутся только данные по Adjusted Close (без Open и других колонок), так что новая позиция открывается по Adjusted Close, следующему за Adjusted Close, относящемуся к бару, при котором был выдан сигнал. См. доступные тикеры на finance.yahoo.com.
Загрузить: если выбрана эта кнопка, пользователь сам загружает временные ряды цен для ноги 1 из своего .xls, .xlsx, .csv или .txt файла.
Выберите файл ноги 1
Browse: нажмите сюда, чтобы выбрать файл из папки ПК пользователя. Пользователь должен предоставить файл с данными, в котором первая колонка – дата, а названия следующих колонок совпадают с одним из 4 форматов: OHLC (Open, High, Low, Close), OC (Open, Close), BBO (price_bi.d, price_as.k) или одномерный (одномерный временной ряд, который имеет только 2 колонки – дата и ряд цен). Временные ряды обоих ног должны быть одной временной зоны. Временная зона базы данных приложения - UTC. В базе данных приложения временная отметка 23:59 означает время закрытия временного периода 23:58-23:59. Подобная система временных отметок должна быть одинаковой для источников данных обоих ног.
Источник данных ноги 2: аналогично ноге 1.
База данных приложения
Yahoo Finance (дневные)
Загрузить
Выберите файл ноги 2
Browse
Очистить: нажмите эту кнопку, чтобы удалить загруженные файлы.
Таймфрейм: выберите один из 6 возможных таймфреймов: M1 - 1 мин, M5 - 5 минут, M15 - 15 минут, M30 - 30 минут, H1 - 1 час, D1 - 1 день
Диапазон дат: введите здесь начальную и конечную дату желаемого временного периода временных рядов цен для бэктеста.
Показать корреляции и тесты коинтеграции: нажмите эту кнопку, чтобы показать корреляционный и коинтеграционный анализ пары.
Модель спреда: выберите 1 из 3 представленных методов моделирования ценовой разницы между финансовыми инструментами.
Ценовой коэффициент: чтобы получить временной ряд ценового коэффициента, мы делим цену ноги 1 на цены ноги 2 на каждой временной точке.
где:
PRt – ценовой коэффициент на время t;
P1t – цена ноги 1 на время t;
P2t – цена ноги 2 на время t.
Коэффициент логарифмов цен: чтобы получить коэффициент логарифмов цен, мы делим натуральный логарифм цены ноги 1 на натуральный логарифм цены ноги 2 на каждую временную точку.
где:
LPRt – коэффициент логарифмов цен на время t;
P1t – цена ноги 1 на время t;
P2t – цена ноги 2 на время t.
МНК: чтобы получить временной ряд МНК-спреда мы вычитаем теоретическую (модельную) цену ноги 1 из ее фактической цены. Теоретическая цена моделируется через скользящую регрессию (обычный метод наименьших квадратов) цен ноги 1 на цены ноги 2.
МНК-спред с СС: если выбрана модель спреда МНК и здесь стоит галочка, то скользящее среднее МНК-спреда с таким же периодом будет рассматриваться как равновесный уровень вместо статического нулевого уровня.
Тип СС: выберите 1 из 2 представленных типов скользящего среднего.
SMA: простое скользящее среднее с периодом, установленным в Период СС/МНК-спреда.
где:
SMAn – SMA спреда на момент последнего наблюдения спреда в окне;
Sn – значение спреда на период n;
n – кол-во периодов в скользящем окне.
EMA: экспоненциальное скользящее среднее с периодом, установленным в Период СС/МНК-спреда.
где:
K – коэффициент;
EMAi – текущее значение EMA спреда;
n – период EMA;
EMAi-1 – предыдущее значение EMA (первое значение временного ряда EMA равно значению SMA такого же периода) спреда;
Si – текущее значение индикатора спреда.
Период СС/МНК-спреда: период для окна скользящего среднего и/или скользящей регрессии МНК-спреда, если выбрана модель спреда МНК.
Тип раздвижек: выберите 1 из 2 методов расчета линий триггера (верхней и нижней раздвижки). Сигнал на открытие позиций активен, когда спред выше или равен верхней раздвижке и, когда ниже или равен нижней раздвижке.
Стандартное откл.: скользящее стандартное отклонение генеральной совокупности спреда с тем же периодом, что и Период СС/МНК-спреда, однако, если поставлена галочка у Отдельный период для раздвижек, то период будет взят из Периода раздвижек.
Экспоненциальное откл. Апирайна: экспоненциально взвешенное скользящее среднее среднее абсолютное отклонение [7] спреда с тем же периодом, что и Период СС/МНК-спреда, однако, если поставлена галочка у Отдельный период для раздвижек, то период будет взят из Периода раздвижек.
Si – текущее значение спреда;
MAi – текущее значение скользящего среднего (SMA или EMA – в зависимости от Типа СС).
Отдельный период для раздвижек: если здесь стоит галочка, то пользователь задает период для раздвижек отдельно, так что он может отличаться от Периода СС/МНК-спреда.
Период раздвижек: период для скользящего Стандартного откл. или Экпоненциального откл. Апирайна. Эта опция появляется, если стоит галочка на Отдельный период для раздвижек.
Кол-во отклонений для раздвижек: кол-во стандартных отклонений или экспоненциальных средних абсолютных отклонений (если выбрано Экспоненциальное откл. Апирайна), которое добавляется к среднему, чтобы получить раздвижки. Может быть не целым числом.
Показать график индикаторов: нажмите эту кнопку, чтобы отразить линии индикаторов, рассчитанных на основе моделей и параметров выбранных выше.
Модель хеджа: выберите 1 из 2 представленных моделей расчета коэффициентов хеджирования для парных сделок.
Доллар-нейтральная: если эта модель выбрана, то размер приказа по ноге 2 рассчитывается на основе принципа долларовой нейтральности, так что результирующий размер позиции в деньгах по ноге 2 будет равен размеру позиции в деньгах по ноге 1.
Период беты: эта опция появляется, если выбрана МНК-бета-нейтральная модель хеджа, задайте здесь период окна для скользящей МНК-беты.
Накапливать позицию: если здесь стоит галочка, то появляется возможность для постепенного накопления позиции на протяжении времени, когда условия триггера удовлетворены.
Лимит баров при активном сигнале для накопления: новые приказы, чтобы накопить позицию будут симулироваться с каждым новым баром с активным сигналом до тех пор, пока их кол-во нарастающим итогом не достигнет данного лимита.
Переворачивать позицию на противоположной раздвижке: если здесь стоит галочка, то позиция закрывается и переворачивается одновременно (с учетом новых коэффициентов хеджирования), когда индикатор спреда достигает противоположной раздвижки. Если здесь галочки не стоит, позиция закрывается, когда индикатор спреда возвращается к среднему, то есть к скользящему среднему или нулю, в случае МНК-спреда без СС.
Триггер: пересечение верхней раздвижки сверху/нижней снизу: если здесь стоит галочка, то позиции будут открываться, когда индикатор спреда пересекает верхнюю раздвижку сверху, а не снизу, и когда индикатор спреда пересекает нижнюю раздвижку снизу, а не сверху.
Корреляционный и коинтеграционный анализ:
Нажмите кнопку Показать корреляции и тесты коинтеграции, чтобы отобразить таблицу с 4 следующими показателями.
Корреляция цен (по Пирсону): коэффициент корреляции Пирсона, который отражает корреляцию между ценами ног 1 и 2.
Корреляция доходностей (по Пирсону): Коэффициент корреляции Пирсона, который показывает корреляцию между логарифмическими доходностями рядов цен ног 1 и 2.
p-значение расширенного теста Дики-Фуллера: наболее распространенный тест на коинтеграцию пары. Если p-значение ниже 0.1 или 0.05, временные ряды считаются коинтегрированными, потому что их линейная комбинация стационарна.
p-значение теста Филлипса–Перрона: еще один тест на коинтеграцию пары. Если p-значение ниже 0.1 или 0.05, временные ряды считаются коинтегрированными, потому что их линейная комбинация стационарна.
Нажмите кнопку Показать график индикаторов, чтобы отобразить этот график.
Начальный собственный капитал: деньги, принадлежащие трейдеру и размещенные на брокерском счете перед началом торговли.
Размер приказа в деньгах по ноге 1: денежная стоимость 1 приказа на открытие/добавление позиции по ноге 1. Размер приказа в лотах подгоняется так, чтобы соответствовать этой сумме, однако он подгоняется только для первой транзакции трейда, так что размер в лотах любого нового приказа по ноге 1 в рамках накопления позиции будет такой же, как при первой транзакции.
Комиссия: ставка комиссии с торгового оборота для расчета суммы денег, уплачиваемой брокеру и бирже после каждой транзакции. Введенное число должно быть в единицах, а не в процентах. Если комиссия положительна, т.е. биржа платит Вам деньги за оборот, поставьте знак “минус” (-) перед числом ставки комиссии.
Проскальзывание: доля от цены финансового инструмента для расчета суммы денег, теряемой каждую трансакцию из-за проскальзывания. Проскальзывание – это разница между ожидаемой ценой приказа и ценой, когда приказ фактически исполняется. Целесообразно задавать проскальзывание, когда данные не в формате BBO. Вводимое число должно быть в единицах, а не в процентах. Если проскальзывание положительно, то есть Вы моделируете случаи, когда рынок предоставляет Вам лучшую цену, чем ожидали, поставьте знак “минус” (-) перед долей проскальзывания.
Ставка фондирования по лонгу ноги 1: годовая процентная ставка под которую занимаются заемные средства для фондирования длинной позиции с левериджем по ноге 1. В случае форекс-пары с положительными свопами или отрицательной ставки заимствования, поставьте «минус» (-) перед ставкой фондирования. Вводимое число каждой ставки фондирования должно быть в единицах, а не в процентах. Если Вы не хотите учитывать ставки фондирования, то задавайте значение 0, но не пустое место, чтобы не было ошибок.
Ставка фондирования по шорту ноги 1: годовая процентная ставка под которую занимаются заемные деньги/активы для фондирования короткой позиции по ноге 1. В случае форекс-пары с положительными свопами или отрицательной ставки заимствования, поставьте «минус» (-) перед ставкой фондирования.
Ставка фондирования по лонгу ноги 2: годовая процентная ставка под которую занимаются заемные средства для фондирования длинной позиции с левериджем по ноге 2. В случае форекс-пары с положительными свопами или отрицательной ставки заимствования, поставьте «минус» (-) перед ставкой фондирования.
Ставка фондирования по шорту ноги 2: годовая процентная ставка под которую занимаются заемные деньги/активы для фондирования короткой позиции по ноге 2. В случае форекс-пары с положительными свопами или отрицательной ставки заимствования, поставьте «минус» (-) перед ставкой фондирования.
Запуск!: нажмите эту кнопку, чтобы запустить бэктест с набором параметров, заданным в Конструкторе и Бэктестере.
График кумулятивной доходности: график кумулятивной доходности на основе простого процента
Кумулятивная доходность: кумулятивная доходность на основе простого процента, заработанная за период бэктеста.
где:
rc – кумулятивная доходность;
ri – доходность за период i.
Аннуализированная доходность: доходность в годовом выражении на основе простого процента.
Аннуализированный коэф. Шарпа: наиболее распространенный в индустрии алготрейдинга показатель эффективности с поправкой на риск. Он рассчитывается как отношение аннуализированной доходности к аннуализированной волатильности доходности. Стандартное отклонение служит здесь мерой риска. Чем выше коэффициент Шарпа, тем лучше.
Аннуализированный коэф. Сортино: показатель эффективности с поправкой на риск, похожий на коэффициент Шарпа, учитывающий только отрицательную волатильность. Чем выше коэффициент Сортино, тем лучше.
Коэф. Омега: этот показатель эффективности с поправкой на риск является отношением положительного потенциала распределения доходностей, взвешенного по вероятности к отрицательному потенциалу распределения доходностей, взвешенному по вероятности при заданном минимально приемлемом уровне доходности, который мы задаем равным нулю. Чем выше коэффициент Омега, тем лучше. Если коэффициент Омега равен или меньше, чем 1, то стратегия невыгодна.
Коэф. Кромад: данный показатель эффективности с поправкой на риск является отношением кумулятивной доходности к максимальной просадке (Cumulative Return Over MAximum Drawdown), которая представляет риск тестируемой стратегии. Просадки измеряются как процент от пикового собственного капитала. Чем выше Кромад, тем лучше.
w
где:
rc – кумулятивная доходность;
maxDD – максимальная просадка.
Чистая прибыль: прибыль от сделок за вычетом комиссий, проскальзывания и затрат на фондирование.
Валовая прибыль: чистая прибыль плюс транзакционные издержки.
комиссия: сумма комиссий, заплаченных брокеру и бирже.
проскальзывание: сумма денег, потерянных из-за проскальзывания.
Затраты на фондирование: сумма денег, заплаченных, чтобы фондировать короткие позиции и длинные позиции с левериджем.
Кол-во транзакций: кол-во парных транзакций за период бэктеста.
Кол-во трейдов: кол-во парных трейдов, т.е. количество раз, когда открытая позиция по арбитражной паре была закрыта.
Зафиксировать период для раздвижек: данная опция появляется только когда поставлена галочка у параметра Отдельный период для раздвижек. Если здесь стоит галочка, период для раздвижек не будет оптимизироваться и останется равным значению из Конструктора во всех итерациях.
Зафиксировать период беты: данная опция появляется только, когда выбрана МНК-бета-нейтральная модель хеджа в Конструкторе. Если здесь стоит галочка, то период беты не будет оптимизироваться и останется равным значению, установленному в Конструкторе, во всех итерациях.
Зафиксировать лимит баров при активном сигнале для накопления: данная опция появляется только, когда когда стоит галочка у параметра Накапливать позицию в Конструкторе. Если выбрана данная опция, то лимит баров при активном сигнале для накопления не будет оптимизироваться о останется равным значению, установленному в Конструкторе, во всех итерациях.
Диапазон периода СС/МНК-спреда: данный и каждый из следующих 4 пунктов в ИИ-Оптимизаторе представляют допустимый диапазон значений определенного параметра, которые будут выбираться во время оптимизационных итераций. Все значения для этого диапазона округляются до целого числа.
Диапазон периода раздвижек: все значения для этого диапазона округляются до целого числа.
Диапазон кол-ва отклонений для раздвижек: все значения для этого диапазона округляются до 2 знаков после запятой.
Диапазон периода беты: все значения для этого диапазона округляются до целого числа.
Диапазон лимита баров при активном сигнале для накопления: все значения для этого диапазона округляются до целого числа.
Оптимизационный критерий
Коэффициент Шарпа
Коэффициент Омега
Коэффициент Сортино
Коэффициент Кромад
Коэффициент Шарпа X Коэффициент Кромад: данные критерий и следующие 2 ниже – это комбинированные оптимизационные критерии, которые учитывают меры доходности и риска более 1 показателя эффективности с поправкой на риск. Данный критерий – это продукт перемножения коэффициента Шарпа на коэффициент Кромад.
Коэффициент Омега X Коэффициент Кромад
Коэффициент Сортино X Коэффициент Кромад
Чистая прибыль
Остановить оптимизацию, если ИИ-алгоритм не может достичь лучшего критерия после N ИИ-итераций: если здесь стоит галочка, то оптимизация будет завершена, если ИИ-алгоритм не может достичь лучшего оптимизационного критерия после N ИИ-итераций
N: данная опция отображается, только если поставлена галочка в предыдущем параметре. Введите сюда число итераций N.
Максимальное кол-во ИИ-итераций: Введите сюда максимальное число ИИ-итераций, при достижении которого оптимизация будет завершена. 1 ИИ-итерация включает много итераций для многих комбинаций параметров, поскольку она основана на ИИ-алгоритме Дифференциальной Эволюции.
Оптимизировать!: нажмите эту кнопку, чтобы запустить оптимизацию на основе входных данных и параметров Конструктора, Бэктестера и Оптимизатора. Внимание: не изменяйте входные данные и параметры до конца оптимизации, чтобы вы могли точно знать, стратегия какого типа была оптимизирована и какие условия предполагались. Результат оптимизации иногда может прийтись ждать несколько часов.
Здесь пример результата оптимизации:
Iteration: 1 bestvalit: -5.779579 bestmemit: 47.000000 73.000000 2.970000 75.000000 3.000000
Iteration: 2 bestvalit: -5.779579 bestmemit: 47.000000 73.000000 2.970000 75.000000 3.000000
Iteration: 3 bestvalit: -5.805074 bestmemit: 47.000000 73.000000 2.970000 80.000000 3.000000
Iteration: 4 bestvalit: -5.805074 bestmemit: 47.000000 73.000000 2.970000 80.000000 3.000000
Iteration: 5 bestvalit: -5.805074 bestmemit: 47.000000 75.000000 2.970000 80.000000 3.000000
Iteration: 6 bestvalit: -5.805074 bestmemit: 47.000000 75.000000 2.970000 80.000000 3.000000
Iteration: 7 bestvalit: -6.176733 bestmemit: 44.000000 71.000000 2.940000 75.000000 3.000000
par1 par2 par3 par4 par5 #оптимизированные параметры
44.00 71.00 2.94 75.00 3.00
[1] 6.176733 #лучший достигнутый оптимизационный критерий
Глава 3. Рекомендации по использованию платформы
Платформа PhD-trader – это продукт многих лет научной и практической работы. Наш опыт может помочь алготрейдерам и исследователям структурировать их усилия лучшим образом. В первую очередь мы советуем создать план исследования. Далее мы предложим пример такого плана.
В PhD-trader смоделировать 512 торговых стратегий статистического арбитража с разными комбинациями индикаторов, хеджами и логикой сигналов. Ниже мы подготовили перечень всех 512 стратегий.
Перечень стратегий, доступных для тестирования и оптимизации в PhD-trader
Цель исследования: найти наиболее успешную торговую стратегию статистического арбитража, исходя из исторических данных пары.
Другие возможные цели: найти несколько наиболее успешных стратегий, исходя из исторических данных пары, для добавления их в портфель стратегий; найти наиболее успешные пары для стратегии, исходя из исторических данных.
Шаг 1. Выбрать 10 стратегий из перечня 512 стратегий.
Выбранные стратегии: 1, 99, 114, 148, 200, 205, 349, 400, 412, 444.
Шаг 2. Найти 1 пару с p-значением расширенного теста Дики-Фуллера равным 0.05 или меньше.
Шаг 3. Провести форвардный анализ для каждый стратегии на выбранной паре.
Форвардный анализ (ФА) – это метод верификации эффективности торговой стратегии на основе оптимизации и тестирования. Схема работы данного метода представлена на рисунке 2.
Рисунок 2: График форвардного анализа с 01.07.2015 по 31.12.2018 с 1-летними периодами внутри выборки с полугодовыми периодами вне выборки. Источник: [1]
Есть 2 типа периода данных в ФА: внутри выборки (In-sample) и вне выборки (Out-sample). Период данных внутри выборки используется для оптимизации параметров, поэтому тестирование на данных внутри выбори подвержено предвзятости (look ahead bias). Чтобы избежать данного недостатка данных внутри выборки, исследователь должен отделить часть данных после периода внутри выборки, которые не были использованы для оптимизации параметров. Данная вторая часть данных называется “вне выборки”.
Процесс ФА в PhD-trader выглядит следующим образом. Мы возьмем пример из рисунка 2. Исследователь располагает историческими данными с 30.06.2015 по 31.12.2018. Период с 30.06.2015 по 30.06.2016 – это первый период внутри выборки, на котором определяются наиболее эффективные параметры.
Исследователь выбрал индикаторы и логику стратегии в Конструкторе и коэффициент Шарпа, как оптимизационный критерий в ИИ-Оптимизаторе. Затем он делает несколько бэктестов нажатием кнопку Запуск! в Бэктестере, что обрести понимание какие диапазоны для оптимизируемых параметров задать, чтобы избежать комбинаций параметров с отсутствием трейдов (иначе ИИ-Оптимизатор выдаст ошибку во время такой итерации) или слишком маленьким количеством трейдов.
Исследователь ввел в диапазоне даты первого периода внутри выборки, задал транзакционные расходы и другие необходимые параметры в Бэктестере, задал диапазоны параметров для оптимизации и остальные параметры в ИИ-Оптимизаторе и нажал кнопку Оптимизировать!
Когда оптимизация закончена, исследователь берет лучшую комбинацию параметров из результата оптимизации, вводит их в в Конструкторе и нажимает кнопку Запуск! в Бэктестере, чтобы получить результаты для первого периода внутри выборки. Исследователь копирует их в Ворд-файл для протоколов результатов Бэктеста.
Затем исследователь задает новый диапазон дат, который отражает первый период вне выборки и тестирует ту же стратегию с теми же параметрами. Результаты бэктеста также копируются в Вордовский протокол.
Второй период внутри выборки будет с 31.12.2015 по 31.12.2016. Окно внутри выборки сдвигается каждый раз на одинковый отрезок, так что последний период вне выборки становится частью следующего периода внутри выборки. Цикл повторяется до тех пор, пока последний период вне выборки не покроет последнюю дату данных пары. В конце данного примера должно получиться 5 протоколов внутри выборки и 5 протоколов вне выборки.
Как интерпретировать результаты бэктеста
Мы рекомендуем стратегии, которые имеют:
Аннуализированную доходность > 30% (0.3)
Аннуализированный коэф. Шарпа > 1
Аннуализированный коэф. Сортино > 1
Коэф. Омега > 1
Коэф. Кромад > 2
Оптимизация методом дифференциальной эволюции
«Дифференциальная эволюция — это метод оптимизации, вдохновленный биологическим явлением эволюции. Рассматриваемый метод машинного обучения основан на подходе взятия случайной выборки (популяции) из пространства решений (Ψ), возмущения параметров (мутация характеристик популяции) и создания новой выборки из наиболее прибыльных стратегий (воспроизведение). Шаги повторяются – создается новая популяция с нарушенными характеристиками, аналогичными лучшим стартегиям из предыдущего шага» [6].
Если Вы нажимаете пусковые кнопки (Показать график индикаторов, Показать корреляции и тесты коинтеграции в Конструкторе, Запуск! в Бэктестере, Оптимизировать! в ИИ-Оптимизаторе) с очень маленьким временным интервалом после загрузки данных в панели Данные, то даты воспринимаемые определенной функцией могут не соответствовать диапазону дат в панели Данные, потому что даты в диапазоне дат не успели самонастроиться во время. Если Вы заметили это в Графике индикаторов, нажмите Показать график индикаторов снова. Если даты в Диапазоне дат и отображаемые даты в Графике индикаторов соответствуют друг другу, Вы можете быть уверены, что Бэктестер и ИИ-Оптимизатор будут получать корректные данные.
Когда BTC или ETH берутся из базы данных приложения как одна из ног, в то время как другая нога берется из Yahoo, это выливается в отсутствие наблюдений с общей датой. Причина в специфике временного компонента даты, который отличается от системы Yahoo. Избегайте такой комбинации источников данных.
Если Вы получаете такую ошибку во время оптимизации: “one node produced an error: 'names' attribute [6] must be the same length as the vector [2]”, это означает, что одна из комбинаций параметров не произвела трейдов. Сузьте некоторые диапазоны параметров и посмотрите какие графики индикаторов произвели максимальные значения диапазонов, когда они заносятся в параметры Конструктора. Подкорректируйте параметры так, чтобы линии триггера пересекались и чтобы также наблюдались условия для выхода из позиций после триггеров на открытие позиций.
Если Вы получаете ошибку: “Error: time frame of an input data cannot be bigger than a selected time frame” это означает, что выбранный таймфрейм меньше таймфрейма входных данных, в то время как невозможно трансформировать временные ряды из меньшей частоты в более высокую частоту. Выберите другой таймфрейм или измените выходные данные. Обратите внимание: все данные с Yahoo дневного таймфрейма.
Если появляется ошибка “Error: need finite 'ylim' values”, это значит, что Вы не заполнили ставки фондирования. Поставьте 0 значение, если Вы не хотите их учитывать.
Измерение эффективности стратегий:
Practical Risk-Adjusted Performance Measurement, C. Bacon, Wiley Finance, 2013
Расширенный тест Дики-Фуллера:
https://repositorio.ucp.pt/bitstream/10400.14/36905/1/202894487.pdf Pairs Trading Cointegration-based methods Applied to the Cryptocurrency Market, pp 18-19.
Тест Филлипса–Перрона:
Phillips, P. C. B.; Perron, P. (1988). Testing for a Unit Root in Time Series Regression. Biometrika, 75 (2): 335-346.
Корреляция:
https://www.investopedia.com/terms/c/correlationcoefficient.asp
Дифференциальная Эволюция, Искуственный Интелект:
https://indiaai.gov.in/article/exploring-differential-evolution-in-ai
Lo A.W., Reconciling Efficient Markets with Behavioral Finance: The Adaptive Markets Hypothesis // Journal of Investment Consulting, 2005, V. 7, № 2, p. 21-44.
Lo A.W., The Adaptive Markets Hypothesis: Market Efficiency from an Evolutionary Perspective // Journal of Portfolio Management, 2004, V.30, № 5, p. 15-29.
Malkiel B.G., Fama E. Efficient Capital Markets: A Review of Theory and Empirical Work // The Journal of Finance, 1970, V. 25, № 2, p. 383-417.
P. Ryś, R. Ślepaczuk, Machine Learning Methods in Algorithmic Trading Strategy Optimization – Design and Time Efficiency // Central European Economic Journal, CEEJ 5 • 2018 • 206−229 • ISSN 2543-6821 •https://doi.org/ 10.1515/ceej-2018-0021
Stocks & Commodities V. 37:07 (8–14): Exponential Deviation Bands by Vitali Apirine
Внешний вид интерфейса PhD-trader
В случае, если форматом входных данных временных рядов цен является OHLC (Open, High, Low, Close) или OC (Open, Close), то приказ исполняется по цене Open бара, следующего за сигнальным баром.
В случае, если форматом входных данных временных рядов цен является BBO (price_bi.d, price_as.k), то приказ на покупку исполняется по цене price_as.k бара, следующего за сигнальным баром, а приказ на продажу исполняется по цене price_bi.d бара, следующего за сигнальным баром.
В случае, если форматом входных данных временных рядов цен является одномерный ряд (одномерный временной ряд, который имеет только 2 колонки – дата и ряд цен), то приказ исполняется по цене бара, следующего за сигнальным баром.
Размер приказа в деньгах по ноге 1 задается пользователем в бэктестере. Это денежная стоимость 1 приказа на открытие/добавление позиции по ноге 1. Размер приказа в лотах подгоняется так, чтобы соответствовать этой сумме, однако он подгоняется только для первой транзакции трейда, так что размер в лотах любого нового приказа по ноге 1 в рамках накопления позиции будет такой же, как при первой транзакции.
Размер приказа в лотах по ноге 2 в PhD-trader может быть рассчитан 2 моделями: МНК-бета-нейтральная и Доллар-нейтральная.
МНК-бета-нейтральная: если выбрана эта модель, то размер приказа по ноге 2 рассчитывается на основе принципа бета-нейтральности, так что результирующий размер позиции в лотах по ноге 2 будет равен размеру позиции в лотах по ноге 1, умноженному на текущий коэффициент регрессии (см. формулы в разделе Управление хеджем и сигналами).
Доллар-нейтральная: если эта модель выбрана, то размер приказа по ноге 2 рассчитывается на основе принципа долларовой нейтральности, так что результирующий размер позиции в деньгах по ноге 2 будет равен размеру позиции в деньгах по ноге 1.