вторник, 3 января 2012 г.

Итоги 2011

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

Графиков доходности пока не строю, но выглядело это примерно так:
Июнь - запуск проекта.
Июнь и июль - небольшой слив.
Потом август, сентябрь и октябрь - очень удачные месяцы.
В ноябре у меня не было возможности следить на торговлей, поэтому робот не запускался.
В декабре слив.  Хотя мог бы быть плюс.

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

В результате за вычетом налогов 59% прибыли. При таком рынке могло быть и лучше, но тем не менее это хороший результат и самое главное, НАЧАЛО ПОЛОЖЕНО!


Ближайшие основные задачи:

1. сделать демона отдельной программой, следящего за торговлей робота и посылающего нотификации  в случае ошибок;
2. расширять набор стратегий и торгуемых бумаг.

вторник, 6 декабря 2011 г.

воскресенье, 7 августа 2011 г.

Переезжал, оставил сервак с роботом в старой квартире. Ночью там отключили инет, и робот вечером не закрылся. Это было с 4го на 5е августа. Ну и естессно огромный гэп в мою сторону и цена "косяка" +15% к счету. Приятно блин )))

четверг, 14 апреля 2011 г.

перебираюсь на квик

Сейчас мой робот торгует через SmartCOM от itinvest. Как бы торговля идет нормально, но иногда случаются заглюки. Из того, что замечено: запаздывание получения истории всех сделок (до нескольких минут!); запаздывание отклика на сделку (до минуты); два раза было, что отклик на сделку вообще не пришел.
Естественно хочется большей надежности. Сейчас делаю вотчдог, который будет мониторить, что все в порядке и ничего не поломалось и не задерживается. Но он не спасет, только сообщит когда что-то не так. Поддержка SmartCOM отмазывается - давайте логи. Какие логи, если они пишутся со скоростью гигабайт в день?! Они отключены всегда.
В общем почитал форумы, пообщался с народом.. Ну его нафиг. Перехожу на квик. На нем как-то надежнее. Людей кто его использует на порядки больше, что дает надежду на большую стабильность. Как приеду в Россию, так сразу.

понедельник, 7 февраля 2011 г.

Почему портфель лучше

Небольшой пример. Возьмем три самых ликвидных фьючерса на ФОРТС - RTS, SBRF, GAZR.
В результате тестирования выясняется, что система показывает на них следующие годовые прибыли и максимальные просадки (NetProfitPercentPerYear / MaxDrawdownFromTop):
  • RTS: 36.56 / 11.62
  • SBRF: 16.47 / 10.94
  • GAZR: 15.82 / 13.29
  • Общий: 68.85 / 17.28
Видно, что на портфеле прибыли суммируются, а максимальные просадки счета нет. В результате RecoveryFactor (годовая прибыль / риск) портфеля получается больше, чем у каждой бумаги портфеля по отдельности. В нашем случае это 3.15, 1.51 и 1,19 для РТС, Сбера и Газпрома соотвественно при 3.98 на портфеле! В случае меньшей корреляции между бумагами, эта разница будет еще более ощутима.

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

суббота, 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 = <угол стандартного отклонения> / (<ошибка стандартного отклонения> * <количество периодов>).

Люк Ван Хоф