Поиспользовав некоторое время K-Ratio в качестве параметра оптимизации пришел к выводу о его негодности. При оптимизации по этому параметру системы стабильно дают результаты гораздо хуже, чем например, при оптимизации по RecoveryFactor.
Вообще по результативности лучше, чем RecoveryFactor параметра не нашел. Сейчас есть идея немного улучшить его, начав учитывать время до обновления максимума системой. Но это пока только идея в тестировании.
Про K-Ratio в качестве оценки рабочести системы могу сказать, что бывает я выбираю систему с меньшим K-Ratio. Т.к. там меньшие просадки и большая прибыль и просто в зависимости от типа рынка наклон доходности меняется и K-Ratio от этого падает. Но это как-бы не страшно.
Еще, основным декларируемым преимуществом K-Ratio была его универсальность, т.е. независимость от промежутка времени, на котором тестируется система. Но зачем мне это, если я сравниваю системы на одинаковом временном промежутке?
суббота, 11 декабря 2010 г.
понедельник, 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);
}
}
/// 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
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 года ) применяется кол-во без корня, как более правильное по словам самого Ларса.
-----
Вычисления.
Хотя этот процесс кажется сложным, коэффициент легко вычислить к форматной таблице (рисунок 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). Тем не менее, обе системы имеют одинаковый Коэффициент Шарпа.
Коэффициент K был разработан автором "Количественных стратегий торговли" Ларсом Кестнером, и является практически идеальным критерием оценка качества работы системы. Этот показатель работы может сравниваться для разных рынков и периодов времени, и указывает на ошибкоустойчивость (или ее отсутствие) торговых система. Этот показатель нацелен на дополнение и обнаружение недостатков в Коэффициенте Шарпа. Оценка основывается на стабильности кривой активов.
Диаграмма 2. Кривая активов и ошибкоустойчивость первой системы.
На диаграмме 2 представлена торговая система с коэффициентом K равным 1.32. Зеленая линия регрессии отражает доходность системы. Расстояние (стандартная ошибка) наблюдений (синие точки) от линии активов представляют ошибкоустойчивость системы.
На диаграмме 3 представлена торговая система с коэффициентом K равным 0.40. Оранжевая линия представляет доходность системы. Расстояние (стандартная ошибка) наблюдений (розовые точки) от линии активов представляет ошибкоустойчивость системы.
Поскольку кривая активов представляет собой графическое отражение совокупной прибыли через какое-то время, то она должна увеличиваться линейно со временем. Если прибыль реинвестируется, то кривая активов должна увеличиваться по экспоненте.
K-ratio = <угол стандартного отклонения> / (<ошибка стандартного отклонения> * <количество периодов>).
Недостатки классических параметров
Чистая прибыль (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!!!
Время тестирования одной стратегии и подсчет ее результата занимает примерно 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 на фортс.
УРА!!
И сегодня мой первый робот сделал свою первую реальную сделку с фьючерсом SBRF-9.10 на фортс.
УРА!!
четверг, 6 мая 2010 г.
МТС
Уже две недели как доделал свой фреймворк для МТС на с#. Данные подсасываются через квик в mysql базу. Система ее оттуда берет. МТС можно писать и тестить в wealth-lab и потом копировать в мою - будет работать. Т.е. я как бы wealth-lab внутренности переписал с разницей, что данные берутся из mysql. Плюс прикрутил полезные фишки, типа своего ГА оптимизатора и тестирования системы с передвижением интервала бектестинга.
Дело осталось за малым - написать стратегии.
Дело осталось за малым - написать стратегии.
пятница, 9 апреля 2010 г.
скальпинг гейм овер
2 месяца позанимавшись скальпингом, понял, что это не мое. Т.е. я научился, и бывали даже недели без убытков, но прибыли не впечатляют, даже если их умножить в 10 раз, а времени и сил отнимает очень много. Не люблю я экшены. Я лучше посижу и подумаю.
Уже месяц пишу МТС. Вернее, пока только фреймворк. В связи с этим даже поменял название блога.
Подробнее напишу позже. Может быть выложу что-нибудь полезное.
Уже месяц пишу МТС. Вернее, пока только фреймворк. В связи с этим даже поменял название блога.
Подробнее напишу позже. Может быть выложу что-нибудь полезное.
воскресенье, 21 февраля 2010 г.
интересная статистика про время удержания убытков
Продолжил собирать статистику своей торговли и вывел несколько интересных фактов про время удержания прибыльных и убыточных поз. Ниже сравнение двух средненьких дней. Один день в плюс, другой в минус:
Подписаться на:
Сообщения (Atom)