Python: формула оценки последовательности убыточных сделок

Риск системы, и ее просадка во многом зависит от последовательности нескольких убыточных сделок. Как правило MaxDD возникает как серия из нескольких убытков, а не как один большой лось.

Существует аналитическая формула, которая позволяет оценить ожидаемое количество убытков подряд, на основе количества сделок в системе и вероятности выигрыша.

LoosingStreak = LN(1 / nTradesCount)/LN(1 – WinProbability)

FYI: Логарифмы натуральные. WinProbability – проценты в долях единицы, 0.6 = 60%

Я решил эту формулу численно перепроверить и написал простенький скрипт на Python.

Скрипт показывает количество убытков подряд, и их зависимость от числа сделок, при жестко заданной вероятности.

Вот результаты моделирования при Win% = 60%

14

Названия колонок:
Trades – число сделок
Theo – количество убыточных сделок подряд, по теоретической формуле
Real – количество убыточных сделок подряд, которое показало моделирование
Error – Theo – Real

Как вы видите показатели Theo и Real практически сходятся, а Error остается постоянной. Это говорит нам о том, что теоретическая формула работает.

Код на Python:

# -*- coding: utf-8 -*-
"""
Created on Thu Jul 19 15:10:23 2012

@author: ubertrader
"""

# -*- coding: utf-8 -*-
"""
Created on Tue Jul 17 14:06:39 2012

@author: ubertrader
"""

import random 
from math import *



winperc = 0.6
MCIterations = 10000

mintr = 100
maxtr = 1000
steptr = 100

TheoStreak = []
RealStreak = []

for trcount in range(mintr, maxtr, steptr):    
    sumstreak = 0
    cnt = 0
    for mci in range(1,MCIterations):
        streak = 0
        maxstreak = 0
        
        for t in range(0, trcount):        
            if random.random() < winperc:             
                profit = 1
            else:
                profit = -1
                
            if profit > 0:            
                streak = 0
            else:            
                streak = streak + 1
                        
            maxstreak = max(streak, maxstreak)
            
        
        sumstreak = sumstreak + maxstreak
        cnt = cnt + 1
        
    #Calc streak error
    LoosingStreak = log(1/float(trcount))/log(float(1-winperc))
    avgstreak = float(sumstreak) / float(cnt)
    
    RealStreak.append(avgstreak)
    TheoStreak.append(LoosingStreak)
    

print 'Trades\tTheo\tRealAvg\tError'
idx = 0
for trcount in range(mintr, maxtr, steptr):        
    print '{0}\t{1:0.2f}\t{2:0.2f}\t{3:0.2f}'.format(trcount, TheoStreak[idx], RealStreak[idx], TheoStreak[idx] - RealStreak[idx])
    idx = idx + 1
    

    

Data Mining в трейдинге

[20:18:59] ubertrader: Что интересно про ДатаМайнинг узнать?
[20:19:53] Clawfinger: да буквально все, про что желаешь… Я в этом плане новичок полный
[20:22:30] ubertrader: Ну Data Mining – по русски – интеллектуальный анализ данных
[20:23:16] ubertrader: в целом идея такая – есть программа, в нее загружается куча сырых данных, и она в них ищет зависимости и выдает результат
[20:23:53] ubertrader: для начала можно почитать http://forex.kbpauk.ru/showflat.php?Cat … Post204747
[20:24:05] ubertrader: Чубукова И.А. – Курс лекций по Data Mining
[20:24:13] Clawfinger: вот я как краз и пишу шаблон, чтоб мне только котиры загрузить и получить результаты
[20:24:18] ubertrader: вполне понятная форма без лишней воды
[20:24:44] ubertrader: дальше, тулзы…
[20:24:49] ubertrader: тулзы – наше все
[20:25:11] ubertrader: http://www.basegroup.ru/library/methodo … ta_mining/
[20:25:30] ubertrader: Пишу про те чем пользовался
[20:25:58] ubertrader: 1. http://www.basegroup.ru/deductor/
Отдельная прога, нейросети, кластеризация, карты Кохонена
[20:26:26] ubertrader: 2. Примочка для Excel 2007
http://www.sqlserverdatamining.com/ssdm … fault.aspx

 

[20:26:48] ubertrader: 2й вариант работает только в связке с SQL Server
[20:27:30] ubertrader: мне он больше всего понравился, достаточно простой: залил данные в sql, получил отчет в экселе
[20:27:41] Clawfinger: > SQL Server
в это для чего ?
[20:27:45] ubertrader: советую ознакомиться с сайтом мелкософта
[20:27:55] Clawfinger: ок
[20:27:59] ubertrader: Clawfinger: в SQL движек анализа данных встроен
[20:28:16] Clawfinger: ага…
[20:28:18] ubertrader: при чем нужна Enterprise версия
[20:28:45] Clawfinger: > SQL Server
> Enterprise
правильно понимаю?
[20:28:51] ubertrader: да
[20:29:06] Clawfinger: ок
[20:29:18] ubertrader: дальше все не так просто как кажется на первый взгляд
[20:29:29] ubertrader: все помнят по нейросети?
[20:29:42] Clawfinger: ubertrader: да помню
[20:31:40] ubertrader: ощущение что мы вдвоем общаемся. никому не интересно?
[20:32:18] Clawfinger: ubertrader: не страшно, потом почитают… Мне очень интересно, такое впечатление, что я новый мир открываю, с твоей помощью
[20:32:44] Clawfinger: чувствую себя маленьким ребенком делающим первые шаги
[20:33:14] pupkinus: не-не
[20:33:20] pupkinus: я внимательно читаю
[20:33:26] pupkinus: так что минимум втроем
[20:33:37] Clawfinger: ubertrader: думаю, что всем черным пиджакам будет интересно, даже не только им
[20:34:26] Apprentice: ubertrader: помним
[20:35:27] ubertrader: вернемся к нейро сетям, какое у вас к ним отношение?
[20:35:39] pupkinus: положительное!
[20:35:49] ubertrader: pupkinus: обоснуй
[20:35:56] pupkinus: пока я не доработал метод “белке в глаз”
[20:36:02] Clawfinger: ubertrader: у меня абсолютно никакого… Просто, я детально в этом вопросе не разбирался, потому слушаю внимательно
[20:36:17] pupkinus: я некоторое время ими баловался
[20:36:45] ubertrader: так вот, нейросети и Data Mining близнецы братья, принципы в них заложены как правило очень похожие
[20:36:53] pupkinus: в том смысле что натравливал нейросеть на кусок графа, она обучалась на коротком промежутке
[20:37:08] pupkinus: а потом я действовал строго наоборот ее рекомендациям
[20:37:16] pupkinus: некоторое время работало на ура
[20:37:37] pupkinus: потом начало плавать “окно оптимизации”
[20:37:42] pupkinus: и я забил на это дело
[20:38:03] pupkinus: работало оно потому что максимально тупая нейросеть или генетический алгоритм
[20:38:19] pupkinus: который работает на коротком отрезке данных
[20:38:30] pupkinus: отлично симулирует метод мышления ритейла
[20:38:31] pupkinus: имхо
[20:38:41] Clawfinger: pupkinus: то есть ты использовал нейронную сеть, как модель поведения тупого лемминга, правильно я понимаю?
[20:38:44] ubertrader: я нейросети никогда не пробовал, но большинство трейдеров используют НС, как микроскоп для забивания гвоздей
[20:39:09] pupkinus: > но большинство трейдеров используют НС, как микроскоп для забивания гвоздей
QED
[20:39:14] pupkinus: Clawfinger: ага
[20:39:54] ubertrader: Data Mining – подход примерно из той же оперы, если его использовать в лоб
[20:40:06] ubertrader: т.е. механически
[20:41:12] ubertrader: давайте теперь поближе с методами ДМ познакомимся
[20:42:01] ubertrader: – Классификация – алгоритм находит в выборке кластеры данных, объединенные по некоторым характерным признакам
[20:42:32] ubertrader: как простой пример: кредитный рейтинг
[20:43:08] ubertrader: на вход подаются данные о заемщике, программа определяет к какому кластеру он относится и выдает вероятность возврата кредита
[20:44:32] ubertrader: Для трейдера искушение кластеризовать рынок: подать на вход кучу индикаторов на выходе получить классификацию булл/веар/флэт, тренд/флэт и пр
[20:45:45] ubertrader: и тут мы упираемся в первый косяк ДатаМининга
[20:46:01] Clawfinger: подобные мысли когда то тоже возникали, не реализовал, их из за неумения
[20:46:45] ubertrader: кластеризация будет использовать все входные факторы как важные свойства процесса…. а это может быть не так
[20:47:18] Apprentice: ubertrader: можно использовать более хитрую метрику
[20:47:58] ubertrader: Apprentice: можно но щас пока не об этом
[20:48:03] Apprentice: которая разным параметрам присвоит разный вес
[20:48:08] ubertrader: дальше идем
[20:48:17] ubertrader: Регрессия
[20:49:06] ubertrader: Data Mining в регрессионном анализе ищет факторы наиболее влияющие на результат
[20:50:24] ubertrader: т.е. есть определенная метрика результата – профит, мы подаем входные параметры которые хотим исследовать цену, объем, значения индикаторов и пр… ДМ выдает нам коэффициенты важности для каждого параметра
[20:51:32] ubertrader: трабла этого подхода, что ищется линейная зависимость, а на рынке как правило это не так
[20:51:35] Clawfinger:
[20:52:06] ubertrader: некст…. Деревья решений
[20:52:57] ubertrader: Тулза очень понятная человеку.

34

[20:53:35] ubertrader: Выдает практически готовую ТС, если А > N, X == False – avg profit = Y
[20:53:59] ubertrader: + еще вероятность наступления такого события
[20:57:05] ubertrader: Вопросы есть пока по тому что я рассказал?
[20:58:08] ubertrader: дальше идем
[20:58:08] ubertrader: Регрессия
[20:58:08] ubertrader: Data Mining в регрессионом анализе ищет факторы наиболее влияющие на результат
[20:58:08] ubertrader: т.е. есть определенная метрика результата – профит, мы подаем входные параметры которые хотим исследовать цену, объем, значения индикаторов и пр… ДМ выдает нам коэффициенты важности для каждого параметра
[20:58:08] ubertrader: трабла этого подхода, что ищется линейная зависимость, а на рынке как правило это не так
[20:59:16] Clawfinger: ubertrader: ок, спасибо за лекцию, пока вопросов нет. Но буду знать, кого дергать, если вдруг понадобится.
[20:59:29] ubertrader: Мораль сей басни: out the box, софт не подходить для трейдеров в полной степени
[21:00:28] ubertrader: это 1-е
[21:01:05] ubertrader: 2. Намного полезнее поразмышлять над тем как подготовить данные которые будут пихаться в Data Mining, это 80% успеха
[21:01:56] ubertrader: 3. Чтобы подготовить данные нужно поставить гипотезу
[21:02:57] ubertrader: 4. Единственная гипотеза как правило не попадает в глаз белке. Поэтому нужно ставить сразу много гипотез в одной предметной области
[21:03:50] ubertrader: 5. Чтобы ставить много гипотез нужно разбираться в предметной области и иметь широкое представление о рыночных процессах. Привет pupkinus
[21:04:35] ubertrader: 6. Если научитесь делать пункты 2-5, Data Mining вам нах не нужен

[21:05:19] ubertrader: Data Minig By ubertrader = процесс пп. 5 -> 2
[21:06:08] ubertrader: дальше просто технические вещи которые помогают глубже копать и лучше представлять данные. В этой технике ничего от академического не осталось.
[21:07:54] Clawfinger: ubertrader: спасмбо
[21:11:10]pupkinus: ubertrader: огромное спасибо!
[21:12:55]ubertrader: И в заключении: ДМ лишь инструмент, им как и микроскопом можно забивать гвозди или делать научные открытия. Первый шаг в этой эпопее понять что хочешь искать, потом уже реализация намеченного

Почему перестают работать хорошие торговые системы?

Интересная ветка на Пауке, люды дискутируют о причинах поломки хороших стратегий, позволю себе высказать несколько мыслей об этом.

На мой взгляд хорошие торговые системы перестают работать, потому что меняется структура участников рынка. Рынок это некий бульон состоящий из разных ингридиентов(участников). Структура этого супа постоянно меняется (даже внутри дня), именно его от состава зависит, то что мы увидим в дальнейшем на графике (тренд, флэт, брейкаут и пр.). Жизнь не стоит на месте, финансовая мысль создает новые подходы и стратегии, публику втягивают в новые идеологические течения, а в месте с этим меняется и сама структура рынка.

Многие коллеги,в этой ветке рассуждали о планктоне и крупняке, но жизнь оказывается богаче и разнообразнее. За последнее время появилась большая прослойка новых крупных игроков, которые могут мимикрировать под планктон. Если 10-15 лет назад спекулянты только и ждали момента входа какого-нибудь крупного фондяры чтобы отфронтранить, то сейчас тот же самый фондяра может торгануть некислый сайз без какого либо серьезного сдвига цены, и мало кто об этом догадается. Алгоритмический(не МТС) трейдинг произвел переворот в рыночной микроструктуре, теперь практически у любого крупного игрока есть VWAP, TWAP, Iceberg и кучу других приблуд, которые заставили много хороших методов перестать работать.

Другой пример, сейчас популярной стала тема арбитража и парного трейдинга в вариациях. Хедж-фонды серьезно поменяли взгляд на оценку активов, даже если невооруженным взглядом видно что какой-то фонд тарит стоку, это совершенно не значит, что на второй ноге он не шортит (хеджируется) другой актив. Даже падение цены по лонговой ноге не означает, что был получен убыток по позиции в целом. Что полностью ломает логику спекулянта который (думает что) торгует сентимент крупных фондов.

Вы говорите о ММах? Сейчас любой Вася из Мухосранска, может котировать спрэд и вести себя как ММ, за исключением обязанность брать сайз на грудь. По крайней мере в РФ эта тема стала очень популярной в 2009-2010х годах.

Еще одна негативная тенденция, что в мейнстрим активно двигается Системная Торговля. Любой теперь может написать правило и оттестить его на истории, и получить торговую систему “двумя кликами мыши”. Посмотрите на околорыночную индустрию, идет четкий тренд от непостижимого (EWA, графические построения и ТА) к оказанию всяческих услуг по обучению и написанию торговых систем. Все это приведет к тому, что неэффективности будут уничтожаться еще быстрее.

Интересно подискутировать над одним постом Атамана, 7-8 лет назад он писал, что самой организованной и большой группой на базаре являются Эллиотчики.

Цитата поста Атамана, обратите внимание какой классный слог :)

Вот тут на борде периодически возникают дискуссии про Волны Эллиотта (EW). Я их
в работе не использую, но неплохо знаю и продолжаю учиться… Учусь исходя из
очень простого соображения, раз уж этой методологией пользуются сотни тысяч
активных участников моего любимого базара, то я обязан знать (1) как они
принимают решения, (2) как они действуют и (3) как и когда они ошибаются…
Потому что, когда они понимают, что ошиблись, то их действия драйвят мои стоки
и, поверьте, очень лихо драйвят. Они ведь трейдеры, а значит, челы
дисциплинированные… то бишь дружным строем, с барабаном и песней драйвят.

Осталось ли эта мысль верной для рынка 2011??? Как вы оцениваете долю Эллиотчиков на РФР?

Поговорим об оптимизации торговых систем

Наконец-то прошли 10 дней общенационального пьянства, и нужно возвращаться к работе)) Решил размять мозх рассуждениями об оптимизации систем и не только. Пользуясь случаем также поздравляю всех с Новым Годом и Рождеством.

Тема оптимизации – это настоящий holy war для системных трейдеров, поэтому все написанное лишь скромное мнение автора, подкрепленное опять же его скромным опытом на базаре. Не факт что такого же мнения я буду придерживаться и завтра, однако сегодня хочется поговорить о состоянии вещей, каким я вижу его на данный момент.

Оптимизация – это достаточно широкое понятие, оно находится далеко за гранью подбора параметров. В общем и целом все трейдеры занимаются оптимизаций (включая тех кто заявляет обратное), оптимизация определенного алгоритма под рыночную неэффективность или под определенное состояние рынка (тренд/контр-тренд). Конечно оптимизация не лучшее определение для процесса поиска и создания систем, но по сути, трейдеры ищут оптимальные периоды рынка на которых рыночные движения не случайны(неэффективны).
Все торговые системы я делю на 2 группы: без edge, и использующие неэффективности макрострукртуры рынка (микроструктурные HFT, арбитраж и пр. брать в расчет пока не будем). Зерна от плевел отделяются как чисто технически с помощью моего Edge Test™, так и на идейном уровне.

Теперь начнем holy war))) В моем понимании трендовая (моментум) система – описывает рыночное поведение с помощью индикаторов или средних, или каналов (класс пример система konkop’а), в т.ч. системы описывающие рынок с помощью различной эконометрики. Понимаю что многие будут не согласны, но скажу, что считаю трендовые(momentum) механические торговые системы, основанные на анализе ТОЛЬКО цены, не имеют Edge’а! Это отнюдь не значит, что они не профитны, хочу лишь заметить, что прибыль трендовиков в основном зависит от сезона на рынке. Говоря экономическим языком трендовые системы имеют высокую бету и низкую альфу управления, к-т Шарпа у них тоже не высокий. Нужно сказать именно такими торговыми системами оперирует большинство системных трейдеров, все строят индикаторы, средние, каналы и пр. И оптимизируют, оптимизируют, оптимизируют… рано или поздно получают epic fail на выходе, а потом новый период оптимизации и подгонки.

Есть другой подход системная торговля рыночного сентимента, философия торговли паттернами. Тем кто не читал ветку на пауке (Поговорим о паттернах?), настоятельно рекомендую это сделать. Суть паттернов в том, что они выделяют определенное рыночное поведение (шаблон поведения людей) и имеют на его эксплуатации Edge. Паттерны могут быть без параметров (подлежащих оптимизации) вообще, например гэп – он или есть или нет.

Но вернемся к оптимизации, и продолжим holy war. На одном простом примере постараюсь показать уязвимость перед оптимизацией momentum торговых систем (тех систем которые входят в трейд по причине движения цены, это не только трендовые).
Существует целая философия оптимизации momentum систем, перечислю некоторые базовые постулаты "правильной оптимизации" системы:
– Использовать 2 набора выборок (IIS и OOS) (я не спорю, я это только поддерживаю)
– У хорошей системы должно быть мало параметров
– Оптимизация должна проводится только в разумных пределах значений параметра (не от 1 до 1000, а от 1 до 20 напр), хохма в том что часто оптимум параметров далеко вне "разумных" границ, установленных трейдером
– Параметры должны работать на разных инструментах
——
В целом правила логичны и верны, только диагноз таким системам – no edge no cash. Если в системе не заложена идея (использования неэффективности рынка), то никакая оптимизация от этого не спасет, точнее спасет но не на долго.

Что происходит когда мы оптимизируем momentum систему? Я называю это горизонтальной оптимизацией – суть явления состоит в том что когда мы изменяем параметр momentum системы – у нас плывет весь массив сделок. Дэ факто при горизонтальной оптимизации мы имеем дело с большим числом совершенно разных систем, потому-что они имеют абсолютно разные распределения сделок. Напр, классический случай, система на пересечении 2 средних, система с параметрами (fast;slow) 5;20 кардинально отличается от системы с параметрами 100;200, хотя это может проходить в рамках 1й оптимизации.

С другой стороны возьмем паттерны, им не так страшна “горизонтальная оптимизация”, хотя и она присутствует. Но как правило, паттерновые системы оптимизируются вертикально, – это означает, что базовые сигналы никуда не сдвигаются на графике, но могут быть отброшены из выборки, т.е. происходит процесс фильтрации. Например, вышеприведенный паттерн-гэп, мы можем пооптимизировать сделки на основе размера гэпа, оставив в выборке гэпы больше 2%. Однако этот шаг не изменит наше базовое распределение, а лишь отфильтрует по нужному критерию некоторые сделки, сместив матожидание в положительную область ( надеюсь:) )

Как вы, надеюсь, поняли пост был не столько об оптимизации, и нам хоть немножечко удалось поговорить о паттернах )))

Disclaimer: ИМХО))

System Development Framework II

System Development Framework

Что представляет из себя Framework – по сути это структурирование всех процессов, моего трейдингового бизнеса в рамках одной модели. Это набор регламентированных работ по поиску, тестированию и торговле стратегий. 

Зачем необходим такой подход? Процесс торговли на бирже включает в себя огромное число проблем и смежных задач, которые необходимо структурировать. Без этого избыток информации и направлений работы дестабилизирует восприятие цели и ориентацию в той огромной массе проблем которые необходимо решить. Framework же делит весь процесс на 4 понятных слоя, по каждому из которых продуман подробнейший план действий (буквально по шагам). А также такое разделение помогает более четко и логично разделить проекты и текущие задачи по категориям, так что в любой момент времени можно легко узнать что необходимо сделать для достижения той или иной цели.

Плюсы подхода
– Полная формализация практически всех процедур – начиная от тестирования, заканчивая ММ и выделением денежных лимитов системам.
– Осознанность и последовательность действий на любом этапе SysDev Framework
– Переход от тактического восприятия своей торговой деятельности к стратегическому (об этом скажу отдельно)
– Удобство планирования дальнейших направлений работы

Схематично это выглядит примерно следующим образом

На схеме присутствуют всего 3 слоя (слой идей и реализации идей объединены). В следующих постах хочу поговорить о "Слое управления системами", о том как перейти на более высокий уровень стратегического мышления и планирования.

Композитный портфель торговых систем

System Composite или матрица торговых систем (см. схему в пред посте) – в узком смысле это просто портфель торговых систем. Суть моего трейдингового подхода заключается в управлении портфелем систем, это некий сдвиг от анализа частностей (конкретной системы) к общему. 

Это новое мышление – стратегический взгляд на трейдинг – когда нацеленность на общий результат и качество управления, без чрезмерного углубления в детали каждой из систем. При этом, прошу понять меня правильно, создание торговых систем конечно является базой, но я не занимаюсь"вылизыванием" и переоптимизацией каждой из своих системок до умопомрачения. Моя задача создать из уже имеющихся систем, такой композит который бы обеспечил бы максимальный синергетический эффект.

При этом синергетический эффект от управления композитом по к-ту риск/доходность в разы лучше чем у любой части композита в отдельности. Конечная цель такого подхода – consistent trading – устойчивый трейдинг. Моя цель на данный момент обеспечить себе 90-95% профитных месяцев, и коэффициент CAR/MaxDD (Годовая дох-ть / Макс просадка) в районе 30-40, при этом речь ведется о стратегиях с инвестиционной емкостью на порядки выше чем скальперские.

Итак вопрос на миллион долларов: как создать композит систем с заявленной устойчивостью и параметрами?

1. Нужно много систем
2. Нужно много систем, независимых друг от друга
3. Нужно много систем, независимых друг от друга, торгующие на разных рынках/фреймах/инструментах
4. Нужно много систем, независимых друг от друга, торгующие на разных рынках/фреймах/инструментах, кардинально отличных в подходе

Теперь представим, перед нами задача не просто создать работающую систему, но и такую чтобы ее результаты не сильно коррелировали с уже имеющимися системами (желательно чтобы раскорреляция была фундаментально основана на другой идее системы). Задача по себе очень сложная, порой приходится отказываться от хорошей системы (но коррелируемой), в пользу более плохой но независимой, парадокс в том что параметры композита могут значительно улучшиться )) Немаловажный момент, ММ или развесовки систем в композите – архиважный я бы сказал!

А в остальном – рутина, мне порой стыдно признаться но я бывает, что не знаю как закрылся рынок, и куда вырос индекс.Смотрю на результат (дня, недели, месяца), смотрю правильно ли торгуют системы (в техническом смысле), параметры исполнения и соответствие их модели. В остальном, все по регламенту ретесты композита ежемесячно, edge test’ы и прочая лубудень))) Зато остается творческие силы на Data Mining рынка  😉

О рыночной неэффективности

Тема конечно философская, попробую развернуть…

Как мне представляется у любого финансового инструмента есть fair value, при этом в любой момент времени параллельно существует множество уровней fair value в зависимости от времени их реализации. Задача рынка в любой момент времени найти тот самый fair value для short-term, mid-term, long-term, существует теория аукциона которой касался автор метода Market Profile – Peter Steidlmayer. В ней подробно расписано и классифицировано каким образом рынок ищет уровень fair value.

Что такое неэффективность рынка, как мне кажется тут 2 варианта:
1. Когда рынок после поступления новой информации или новых денег, начинает движение к новой fair value от старой
2. Когда рынок достаточно отклонился от fair value и начинает возврат к ней, т.н. mean reversion

При чем это 2 взаимоисключающих рыночных поведения, как тренд и контр-тренд.

Система использующая рыночную неэффективность в первую очередь должна определиться какой fair value(краткосрочный, среднесрочный, долгосрочный) она ищет, это очень важно, ответ на этот вопрос дает зацепки какие методы подходят а какие нет для поиска подобных неэффективностей.

Несколько примеров стратегий зарабатывающих на неэффективностях:

  1. Арбитраж – самый простой вариант спот-фьючерс, там базис имеет некую справедливую цену, и ходит в канале. Арбитражеры продают выше, а покупают ниже "справедливой" цены базиса и имеют прибыль. Самый простой и показательный пример mean reversion edge.
  2. Скальпинг и фронтраннинг – тут отрабатывается fair value, на уровне микроструктуры рынка.  В плоть до того что fair value, для скальпера является средняя цена м/у bid и ask, они выставляют одновременно заявки на покупку и продажу – котируют спрэд и на этом имеют свой edge. Это как частный случай скальпинга.
  3. Спекулятивные направленные системы – тут имхо самый сложный случай, т.к. очень сложно определить fair value. Мне кажется мерилом эффективности системы тут должен являться тайминг, т.е. рынок должен начать движение в нужную сторону с высокой вероятностью сразу после захода в трейд. При этом важно представлять себе сколько система будет в рынке, т.е. должен быть некий дискретный time-stop, после истечения которого мы выйдем. 
  4. Инвестирование и трендовые системы – тут анализируется самый долгосрочный fair value, я считаю, что для этих подходов использование только ценовых данных OHLCV, будет неэффективным. Нужны неценовые данные и подходы, например фундаментал или межрыночный анализ, глобальный сентимент и прочее. 

Edge Test

В прошлом посте я дал определение термину edge торговой системы, сейчас пришло время определиться с методами и инструментами определения – обладает ли система edge либо это простое стечение обстоятельств.

Для начала немного истории, в далеком 2006 году ваш покорный слуга, слабал портфель системок которые  давали хорошие результаты на том рынке. Все было хорошо, до начала 2007 года, когда рынок вошел в боковик и системы начали сливать. Естественно бычий тренд с 2000 года, вселил веру в свою гениальность и прочее. Но вопрос вот в чем, можно  ли было предотвратить закономерный fail для этих несовершенных систем? Понятно, что было такое время что зарабатывали банальные средние, или популярная система NRTR (от konkop), но в дальнейшем их рынок поломал через коленку.

Для любой системы необходимо определить имеет ли она edge. Действовать нужно в 2х направлениях:

  • На этапе проектирования
     
  1. Идея – должна базироваться на использовании рыночных неэффективностей. Грубо говоря нужно понимать за счет кого система будет зарабатывать деньги, и кто будет помогать нам драйвить цену в нужную нам сторону. Для понимания сути таких вещей как сентимент, стат. преимущество (edge) можно почитать в ветке Поговорим о паттернах или поискать посты на пауке и невесте человека по имени Атаман
  2.  Данные – данные на которых обкатывается система, должны содержать все рыночные фазы. Для Российского рынка считаю представительным период 2007-2010 годы, можно захватить и 2006 при желании. Для американских стоков, важно чтобы выборка содержала delisted stocks, и не забывать о такой вещи как survivorship bias.
  • На этапе тестирования
  1. Количественные параметры системы – NetProfit, Max/DD, Sharpe, PF, Risk-Reward-Ratio, %Win, Avg. Trade и пр. метрики доступные в любом пакете для тестирования систем Ami, WL, TS и пр.
  2. Качественные параметры edge системы – именно о них хочу поговорить. Этот подход определяет обладает ли испытуемая система умением извлекать неслучайную прибыль из случайного процесса, либо это очередной бычий тренд и  никакой гениальности.

Edge Test



Механизм тут достаточно прост для понимания, в принципе его несложно будет реализовать любому программисту. Суть его основывается на моделировании методом Monte-Carlo, случайной выборки сделок и сравнения ее с результатами системы которые выдал тестер.

Алгоритм действия:

1. Необходимо определиться с периодом тестирования, например месяц/квартал/год, он зависит от того с какой частотой мы будем принимать решение об изменении композита наших систем, и в целом от частоты сделок для сверх высокочастотных систем достаточно будет месяца, для трендовых может и квартала не хватить.

2. Теперь на всем промежутке с начала тестирования и до конца (напр. с 2007 до 2010) откладываем равные отрезки времени, эквивалентные периоду тестирования который был нами выбран (напр. квартал)

3. Для каждого такого периода нам необходимо выбрать все сделки системы, например в 2 кв. 2008 года, система сделала 20 сделок, по 30 баров в каждой (если длина трейдов различается то мы должны это учитывать!)

4. Для простоты система торгует на 1 инструменте (напр. RI), теперь магия: берем тот же тайм фрейм, и тот же временной промежуток, и случайным образом откладываем на нем те самые 20 сделок (из п. 3) эквивалентной длины. Считаем промежуточный результат, и записываем на бумажку.

5. Повторяем процедуру из п. 4 от 10 000 до 100 000 раз

6. Ранжируем полученные результаты от меньшего к большему.

7. Считаем персентиль, я беру 70% лучших результатов (но тут индивидуально для каждого)

8. Если результаты системы по метрике лучше чем 70% случайных, поздравляю система прошла Edge Test на выбранном периоде.

9. Повторяем процедуру п. 3-8 для всех периодов на всей выборке.

На выходе, мой софт выплевывает следующую картиночку:

Разбивка по All/Long/Short, смотрю по ALL в основном, системка прошла средненько на грани фола 4й кв. 2007, и завалила 4й кв. 2008 года, это должно служить звоночком как минимум обратить внимание на систему как максимум принять решение о ее консервации. Тем не менее, у меня пока не было систем которые били EdgeTest 100 из 100, но я стремлюсь к этому :)

Важно:

  1. Для тестирования и сравнения необходимо использовать UnitSize, т.к. на одном периоде могут встречаться периоды низкой и дикой волатильности, соответственно результаты Monte-Carlo могут очень сильно "играть". Нужно понимать то что система заработала больше денег на высокой волатильности, совсем не говорит о том что она хорошо работает.
  2. Очень важный момент, Edge Test должен проводиться на системах без использования стопов/тейков, т.е. все входы и выходы должны быть проведены по Close или Open свечей. См. Стопы коварны

Итак еще одним секретом стало меньше, EdgeTest универсальное средство для качественной оценке систем как на этапе тестирования, так и на этапе торговли, он позволяет выявлять моменты когда система начинает ломаться и не соответствует рынку. Наличие систем с edge в моем композите систем, это фундамент для получения стабильных и уверенных результатов в будущем, именно к таким системам можно применять различные схемы портфельной оптимизации. Темы управления группой систем в композите и их оптимизации, надеюсь, тоже затронем в дальнейшем.

Edge торговой системы

В своих предыдущих постах я нередко упоминал термин edge относительно систем. Сегодня хотел бы остановиться на этом более подробно.

Для начала приведу несколько ссылок на мои посты 3х летней давности:

В поисках edge’a часть 1 (Главные вопросы)

В поисках edge’a часть 2 (Новый взгляд)

В поисках edge’a часть 3 (О рыночном времени)

В поисках edge’a часть 4 (Об эффективности)

Это скорее философские рассуждения, о том как стать не таким как все, и попасть в элиту (5%)  рынка, как представлялось 3 года назад.

Что же такое edge  – как мне представляется это устойчивое преимущество торговой стратегии над рынком.

Для примера можно взять:

  • Рулетку – казино имеет очень маленькое преимущество, около 5% по-моему, но это не мешает ему извлекать прибыль из игроков.
  • Блэк джек – существуют игроки умеющие правильно считать карты, тем самым они могут смещать преимущество в свою сторону и иметь профит уже с казино.

На рынке то же самое, не зря когда Декарт и сотоварищи придумывали тервер, они делали этого для применения в азартных играх.

Для трейдера стоит задача придумать такой метод, который будет обладать преимуществом над рынком, и будет давать возможность отбирать деньги у других участников. Система с edge извлекает неслучайную прибыль из случайного процесса.

Иметь системы с edge для моего System Development Framework очень важно, т.к. никакие оптимизационные процедуры и ММ не вытянут плохие системы, и не решат основную задачу которая стоит передо мной – стабильность результатов в long-run. Обычно системы без edge имеют "привычку" одновременно ломаться при изменении фазы рынка.

Главный и самый сложный вопрос…
Как определить что система обладает edge?

Качественно – система должна быть построена на использовании неэффективности рынка, и необходимо понимать кто будет драйвить рынок в нужную нам сторону и почему.
Количественно – тут чисто технический способ определения EdgeTest, в основе лежит сравнение результатов системы и случайной выборки сделок с рынка. Об этом способе расскажу в следующем посте…

Ставим ruin стоп-лосс

Как поставить стоп-лосс? В предыдущих постах я писал стопы нужно ставить таким образом чтобы они срабатывали только тогда когда рыночное движение выбивается из логики системы, и нам нужно срочно порезать лосей, т.к. ситуация может развиться неконтролируемым образом.

В принципе есть 2 подхода:
1. Оптимизировать уровень стопа-лосса, наиболее быстрый и простой. Но имеет недостатки (об этом далее)
2. Осознанно провести анализ сделок системы и выставить стоп-лосс.

Я за 2й метод, и вот почему: когда работает оптимизатор теряется связь (контроль) трейдера над системой, мы как бы получаем результат который принимаем на веру, хотя возможно оптимизатор выбрал например очень короткий стоп, а не длинный как мы хотели раньше. А это означает, что вся (!) система претерпела изменения. Но подходя к анализу сделок осознанно связь трейдера с системой не теряется, а даже наоборот укрепляется, т.к. трейдер извлекает дополнительную информацию о параметрах и поведении системы.

Для поиска места куда ставить стоп, достаточно визуального анализа…

Амиброкер дает возможность вывода в Excel результатов тестов (список сделок), напротив каждой сделки имеется параметр Profit и MAE/MFE, они то нам и нужны.

Нам необходимо посмотреть зависимость Profit от MAE для стоп-лоссов, и Profit от MFE для тейков. В том же excel элементарно строятся графики ScatterPlot, наподобие таких:


Выделенная область, как раз относится к тем уровням куда стоит ставить стоп, это те сделки которые практически после просадки не восстанавливаются, вот их как раз и нужно стопить. А также экстремальные сделки, на графике она одна в левом углу имеет координаты -4000 MAE -3200 Profit. От таких сделок как раз полезен ruin-stop.

Но это еще не все, подобные графики позволяют узнать более глубоко свою систему. Например, можно ясно увидеть что после определенного уровня просадки(MAE) вероятность выйти в прибыль у сделки катастрофически падает. После уровня -1400MAE у нас всего 4(!) прибыльных сделки. остальные в убыток. Или например, другой вариант, мы видим много трейдов, которые имели достаточно большой MAE и в дальнейшем выходили в плюс – это может свидетельствовать о том что у системы плохой тайминг.
Те же самые методы можно использовать для анализа Profit/MFE, только для тейк-профитов, но это другая история 😉

Можем ли мы использовать эту информацию, думаю можем? Как? – Решать каждому.

з.ы. Данные на графике – от системы из поста “Стопы коварны”, шкала соответственно в UnitSize пунктах.