суббота, 11 декабря 2010 г.

K-Ratio в топку

Поиспользовав некоторое время K-Ratio в качестве параметра оптимизации пришел к выводу о его негодности. При оптимизации по этому параметру системы стабильно дают результаты гораздо хуже, чем например, при оптимизации по RecoveryFactor.
Вообще по результативности лучше, чем RecoveryFactor параметра не нашел. Сейчас есть идея немного улучшить его, начав учитывать время до обновления максимума системой. Но это пока только идея в тестировании.
Про K-Ratio в качестве оценки рабочести системы могу сказать, что бывает я выбираю систему с меньшим K-Ratio. Т.к. там меньшие просадки и большая прибыль и просто в зависимости от типа рынка наклон доходности меняется и K-Ratio от этого падает. Но это как-бы не страшно.

Еще, основным декларируемым преимуществом K-Ratio была его универсальность, т.е. независимость от промежутка времени, на котором тестируется система. Но зачем мне это, если я сравниваю системы на одинаковом временном промежутке?

понедельник, 15 ноября 2010 г.

K-Ratio на c#

        ///
        /// K-Ratio by Lars Kestner daily
        ///

        public double KRatio
        {
           get
           {
               if (_KRatio == 0.0)
               {
                   if (PosList.Count == 0)
                       return 0.0;

                   if (Bars == null)
                       Bars = PosList[0].Bars;

                   _TradeDays = 0;
                   double sumX = 0, sumY = 0, sumXY = 0, sumXSqr = 0, dayProfit = 0;

                   // прибыль по дням
                   List DayEquity = new List();

                   DateTime dt = DateTime.MinValue;
                   for (int bar = 0; bar < this.Bars.Count; bar++)
                   {
                       if (dt == this.Bars.Date[bar].Date)
                           continue;

                       dt = this.Bars.Date[bar].Date;
                      
                       // считаем дневную прибыль
                       foreach (Position p in PosList)
                           dayProfit += p.NetProfitAsOfDay(dt);

                       _TradeDays++;
                       Log.Out("Profit: " + dayProfit + " day: " + dt, LogLevel.debug);

                       DayEquity.Add(dayProfit);
                       sumXY += _TradeDays * dayProfit;
                       sumX += _TradeDays;
                       sumY += dayProfit;
                       sumXSqr += _TradeDays * _TradeDays;
                   }
                   _KRatio_B1 = (sumXY * _TradeDays - sumX * sumY) / (sumXSqr * _TradeDays - sumX * sumX);
                   double b0 = (sumY / _TradeDays) - _KRatio_B1 * (sumX / _TradeDays);
                   double YProjected = 0, SumResidSqr = 0, StandardErrB1Denom = 0;
                   for (int i = 1; i <= _TradeDays; i++)
                   {
                       YProjected = b0 + _KRatio_B1 * i;
                       SumResidSqr += Math.Pow(DayEquity[i - 1] - YProjected, 2);
                       StandardErrB1Denom += Math.Pow((double)i - (double)(_TradeDays + 1) / 2, 2);
                   }
                   double SigmaRegress = Math.Sqrt(SumResidSqr / (_TradeDays - 2));
                   _KRatio_StdErrB1 = SigmaRegress / Math.Sqrt(StandardErrB1Denom);
                   _KRatio = _KRatio_B1 / (_KRatio_StdErrB1 * _TradeDays);
               }
               return Math.Round(_KRatio, 3);
           }
        }

воскресенье, 24 октября 2010 г.

Считаем K-Ratio

Lars N. Kestner

Вычисления.

Хотя этот процесс кажется сложным, коэффициент легко вычислить к форматной таблице (рисунок 1).

На рисунке 2 представлена 20-дневная кривая доходности. В первый день капитал равен 0 долларов, к 20-му дню он вырастает до 20 долларов. Расчет при помощи метода наименьших квадратов эквивалентен построению линии тренда через кривую доходности. В гипотетический день 0, значение линии тренда будет b0. Затем линия тренда будет расти на b1 с каждой единицей роста во времени.
Для системы 1:
Equityi = -0.75 + 0.58 x Observationi, со стандартной ошибкой b1 = 0.022

Значения К-коэффициента выпадают между -5 и +5. Преимущественно положительные значения коэффициента говорят о том, что результаты системы положительные и стабильные, тогда как исключительно негативные значения коэффициента свидетельствует о нежелательно неблагоприятной работе системы.

Значения близкие к 0 указывают на то, что система приносит только небольшую прибыль и убытки и/или что прибыль непостоянна. 


Рисунок 1. Вычисление К-коэффициента в EXCEL. Номер наблюдения (observation) помещается в колонку А, тогда как значение кривой доходности в колонку В. К-коэффициент высчитывается в ячейке В21 по формуле: К=SLOPE(B1:B20,A1:A20)*SQRT(DEVSQ(A1:A20))/STEYX(B1:B20,A1:A20)/SQRT(20)

 
Примечание: 
-----
В переводе на русский: =НАКЛОН(Y;X)*КОРЕНЬ(КВАДРОТКЛ(X))/СТОШYX(Y;X)/20

Здесь также заменено  SQRT(20) на просто 20 - в новой версии индикатора (после 2003 года ) применяется кол-во без корня, как более правильное по словам самого Ларса.
----- 

суббота, 23 октября 2010 г.

еще раз о K-Ratio

Еще раз о K-Ratio:

K-Ratio – Это соотношение создано Lars Kestner для оценки производительности системы через постоянство дохода относительно времени. Расчет дохода и риска производится с использованием VAMI (value added monthly index), который представляет из себя месячный график кривой доходности капитала, равного $1000. Поскольку постоянство дохода оценивается относительно времени, то K-ratio является хорошим средством оценки динамики кривой доходности.

Применение линейной регрессии к логарифмической кривой VAMI позволяет выяснить ряд деталей о производительности. Наклон линии регрессии характеризует доходность. Чем круче линия регрессии, тем быстрее нарастает капитал. Риск в K-ratio оценивается через величину стандартной ошибки наклона линии регрессии кривой доходности. Чем больше ошибка, тем выше волатильность доходности, которая обычно считается адекватной оценкой риска. Для нормализации отношения доход/риск к времени в делитель вводится длительность наблюдения.

K-ratio = Slope of Log VAMI Regretion Line / (Standart error of slope * number of periods in Log VAMI).

Оценка эффективности торговой системы

К оценке эффективности системы следует подходить очень серьезно, поскольку это является одним из ключевых аспектов автоматизированной торговли. В данной статье мы рассмотрим недостатки "традиционной" оценки параметров доходности и риска, и преимущества использования дополнительных показателей, особенно Коэффициента K.

Недостатки классических параметров

Чистая прибыль (NP) = общая прибыль - общие потери

Использование только лишь параметра NP, без соответствующих показателей риска и стабильности доходности, походит на покупку спортивного автомобиля без предварительного тест-драйва! Две торговые системы с одним и тем же параметром NP, но различными стандартными отклонениями (SD) быстро начнут показывать расхождения, когда используются кредитные рычаги (Lev):

1). NP = +1000, SD = 500, Lev = 1 95%, интервал = [0, +2000]
2). NP = +1000, SD = 2000, Lev = 1 95%, интервал = [3000, +5000]

Кроме того, в факторе прибыли не отражается "время в рынке", которое эквивалентно подверганию риску:

Фактор прибыли (PF) = общая прибыль (ОР)/общие потери (GL),

т.е. общая прибыль в долларах, полученная в выигрышных сделках, делится на общие потери в долларах, понесенных в проигрышных сделках. Одна из проблем с Фактором прибыли связана с тем, что он не учитывает зависимость сделки. Например, две торговые системы со следующими значениями прибыли и потерь дают тот же самый Фактор прибыли:

1). Результаты сделок: +100, -100, +100, -100, +100, -100, +100, -100, +100, -100, +100, +50, +100; PF = GP (750)/GL(500) = 1.50.
2). Результаты сделок: -500, +100, +100, +100, +100, +100, +100, +50, +100; PF = GP (750)/GL (500) = 1.50.

Отношение прибыли к спаду (P/DD) = чистая прибыль (NPJ/максимальный спад (DD),
где максимальный спад = локальный максимум - локальный минимум.

Проблема с соотношением P/DD заключается в том, что оно создает показатель прибыли к риску в то время, как доходность (т.е. прибыль) увеличивается линейным образом, в то время как риск (т.е. спад) увеличивается нелинейным образом.

Моделирование Монте-Карло показывает, что соотношение P/DD зависит от времени, и поэтому через какое-то время его значение будет возрастать даже при допущении статической вероятности.

Процент прибыльности (%Pr) = число выигрышных сделок/общее количество сделок
Максимизация Процента прибыльности может заставить вас чувствовать себя увереннее, но это не улучшит общие результаты вашей торговли. Этот показатель получил широкое распространение благодаря поведенческому уклону, который заставляет людей бояться понести потери (т.е. отвращение к потерям).

Новые параметры

Коэффициент Шарпа (SR) = средняя прибыль/стандартное отклонение прибыли с учетом фактора времени.

Учет фактора времени необходим, потому что прибыль и разброс результатов являются линейными по отношению к времени, следовательно, стандартное отклонение линейно с квадратным корнем от времени:

Фактор времени для дневного тестирования = 252^0.5 = 16
Фактор времени для месячного тестирования = 12^0.5 = 3.46

В действительности Коэффициент Шарпа также имеет недостаток. Если в прибыли существует автокорреляция, то Коэффициент Шарпа будет не надежен в качестве критерия работы системы.

Таблица 1. Результаты сделок разных систем.
 
Это можно увидеть в таблице 1. Первая система сначала демонстрировала устойчивый рост активов, а затем их резкое снижение, в то время как вторая система показала более плавное изменение активов (см. диаграмму 1). Тем не менее, обе системы имеют одинаковый Коэффициент Шарпа.

Диаграмма 1. Изменение активов по двум системам.


Коэффициент K был разработан автором "Количественных стратегий торговли" Ларсом Кестнером, и является практически идеальным критерием оценка качества работы системы. Этот показатель работы может сравниваться для разных рынков и периодов времени, и указывает на ошибкоустойчивость (или ее отсутствие) торговых система. Этот показатель нацелен на дополнение и обнаружение недостатков в Коэффициенте Шарпа. Оценка основывается на стабильности кривой активов.
Диаграмма 2. Кривая активов и ошибкоустойчивость первой системы.

На диаграмме 2 представлена торговая система с коэффициентом K равным 1.32. Зеленая линия регрессии отражает доходность системы. Расстояние (стандартная ошибка) наблюдений (синие точки) от линии активов представляют ошибкоустойчивость системы.


Диаграмма 3. Кривая активов и ошибкоустойчивость второй системы.

На диаграмме 3 представлена торговая система с коэффициентом K равным 0.40. Оранжевая линия представляет доходность системы. Расстояние (стандартная ошибка) наблюдений (розовые точки) от линии активов представляет ошибкоустойчивость системы.


Таблица 2. Показатели двух торговых систем.

Поскольку кривая активов представляет собой графическое отражение совокупной прибыли через какое-то время, то она должна увеличиваться линейно со временем. Если прибыль реинвестируется, то кривая активов должна увеличиваться по экспоненте.

K-ratio = <угол стандартного отклонения> / (<ошибка стандартного отклонения> * <количество периодов>).

Люк Ван Хоф

пятница, 13 августа 2010 г.

В последнее время уперся во время тестирования стратегии. Там у меня несколько циклов оптимизаций и затем тестирований. Схема примерно описана здесь: http://articles.mql4.com/ru/576

Время тестирования одной стратегии и подсчет ее результата занимает примерно 200мс. Не так уж и много. Но с учетом того, что таких запусков требуется уйма, тестирование одной стратегии на 3х годовой истории с временем оптимизации хотя бы 7 месяцев растягивается на 6-9 часов. Это на моем двухпроцессорном core 2 duo 1.8.

При том, что код уже донельзя заоптимизирован, варианты решения только искать более мощную машинку. Рассматривал варианты заиспользовать что-то типа  slidebar.ru, где можно арендовать сервак произвольной конфигурации. Двухпроцессорная тачка с полным ресурсом проца обойдется в 3.5к рублей в месяц. Гораздо лучше тогда уж купить сервак домой. В районе 20к можно взять 6-процессорный феном 3.2Ghz. Уже собирался прикупиться, но удачно нашелся Олег, который разрешил заюзать свой 2х4х1.9Ghz сервак. Круть! Единственно, что у него там Debian GNU Linux. А у меня робот на C# .Net. Сейчас установил себе VMWare с debian-ом и попробую запустить робота под Mono. Если получится - моя мтс станет кроссплатформенной.

Изучаю Debian, вспоминаю Linux. NOSTALGY!!!

четверг, 10 июня 2010 г.

Знаменательная дата

Доделал интеграцию МТС со SmartTrade.
И сегодня мой первый робот сделал свою первую реальную сделку с фьючерсом SBRF-9.10 на фортс.

УРА!!

четверг, 6 мая 2010 г.

МТС

Уже две недели как доделал свой фреймворк для МТС на с#. Данные подсасываются через квик в mysql базу. Система ее оттуда берет. МТС можно писать и тестить в wealth-lab  и потом копировать в мою - будет работать. Т.е. я как бы wealth-lab внутренности переписал с разницей, что данные берутся из mysql. Плюс прикрутил полезные фишки, типа своего ГА оптимизатора и тестирования системы с передвижением интервала бектестинга.

Дело осталось за малым - написать стратегии.

пятница, 9 апреля 2010 г.

скальпинг гейм овер

2 месяца позанимавшись скальпингом, понял, что это не мое. Т.е. я научился, и бывали даже недели без убытков, но прибыли не впечатляют, даже если их умножить в 10 раз, а времени и сил отнимает очень много. Не люблю я экшены. Я лучше посижу и подумаю.

Уже месяц пишу МТС. Вернее, пока только фреймворк. В связи с этим даже поменял название блога.

Подробнее напишу позже. Может быть выложу что-нибудь полезное.

воскресенье, 21 февраля 2010 г.

интересная статистика про время удержания убытков

Продолжил собирать статистику своей торговли и вывел несколько интересных фактов про время удержания прибыльных и убыточных поз. Ниже сравнение двух средненьких дней. Один день в плюс, другой в минус:

суббота, 20 февраля 2010 г.

средняя прибыль

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

Я торгую через itinvest и у них есть кнопка - вывести историю сделок через excel. Я сохраняю ее каждый день, добавляю дополнительные поля, чтобы посчитать прибыль в пунктах и рублях с каждой сделки и рисую график дневного баланса.

Excel файлик с моей историей сделок за день и графиком еквити выложил сюда.

тренд и контртренд

Это моя сегодняшняя торговля:



Видно, что рынок рос, а прибыль от коротких позиций больше, чем от длинных в два раза. Было совершено 317 сделок. Из них 135 длинных и 182 коротких.

Средняя прибыль за вычетом всех комиссий:
* 1.3р для длинных;
* 4.3р для коротких.

Т.е. трейд получается больше контртрендовый по всем параметрам.

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

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

четверг, 18 февраля 2010 г.

правила стопа не дают торговать

правила П2 и П3 не очень хороши на период, когда я не получаю стабильную прибыль. часто они не дают торговать, когда выходят хорошие новости или рынок меняется и становится более предсказуемым. поэтому я решил их поменять. Итого правил только 2:
П1 торговать 1 контрактом, пока не удвою счет
П2 при серии убытков (4 сделки с прибылью меньше 10 пунктов), или при сливе больше 150р от максимума - остановится, подумать, осмотреться. Перерыв минимум 20 минут.

среда, 10 февраля 2010 г.

трейлинг стоп

психологически сложно быть в большом плюсе, и потом на каком-нибудь неудачном периоде не только слить весь заработок, но и залезть в минус. поэтому сделаю себе еще правила:

3. трейлинг стоп по дневной прибыли - 400р на контракт. т.е. если в какой-то момент в плюсе 800р при торговле 1 контрактом, то дневную торговлю заканчиваю, если прибыль опускается ниже 400р.

4. при серии убытков (3-4 сделки с прибылью меньше 10 пунктов), оснановится, подумать, осмотреться, ПОДАВИТЬ ЖЕЛАНИЕ ОТЫГРАТЬСЯ.

четверг, 4 февраля 2010 г.

самодисциплина

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

Пора с этим завязывать!
Сколько раз я себе это обещал, гыгы. Но теперь все!!! Завтра Новый День!!!.

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

Правила для скальперского счета:
П1 при прибыли меньше 400р за день торговать можно только одним контрактом. 2>400 / 3>800 / 4>1200 ...
П2 если счет -350р за день, допускается одна последняя убыточная сделка, и не больше 50 пунктов.


Правила можно добавлять и менять, при этом записывая это в блог. Работают только опубликованные правила. Нельзя торговать по "новым", неопубликованным правилам.

5и минутки

я скальпирую 4ю неделю всего. первые 3и недели больше сливал. смотрел только на тиковые графики ммвб, нефти, дакса и сиплого. 5минутки самого фьюча ртс, который торгую. вчера добавил на второй монитор 5минутки сиплого. сразу стало легче работать, проще чувствовать рынок. видно, когда рынок флэтовый, когда тестирует поддержки, сопротивления, когда происходит настоящее движение. это сразу сказалось на результатах.

трендовый скальп vs контртрендовый

контртрендовый скальп работает лучше при низкой волатильности "ведущих" рынков. т.к. при этом влияние их минимально и растет автокорреляция рынка.