Заметка

Как “оживить” скользящую среднюю

  10  

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

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

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

Что за зверь?

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

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

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

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

Итак, под динамической адаптацией здесь понимается автоматическая подстройка параметров индикатора в зависимости от текущего состояния на рынке. Рассмотрим, как это происходит в экспоненциальной скользящей средней. Ее формула (для цен закрытия) в классическом варианте такова:

EMA = Close*F + EMA-1*(1-F).

Close – цена закрытия,

EMA-1 – предыдущее значение скользящей средней,

F = 2/(n+1) – фактор сглаживания, n – период скользящей средней.

Вся суть динамичности кроется в параметре F. Для того чтобы заставить его меняться в зависимости от характера рынка, представим F как функцию от какого-нибудь технического индикатора (конкретные реализации мы рассмотрим ниже). При этом должны соблюдаться следующие условия: в моменты высокой волатильности значение F должно быть как можно меньше. Это означает, что n – период скользящей средней, должен быть достаточно большим, чтобы не реагировать на случайные зашумления основной тенденции. А в моменты трендового маловолатильного движения периоду лучше уменьшаться (значение F при этом увеличивается), чтобы быть как можно ближе к цене и, при необходимости, вовремя откликнуться на изменение ситуации.

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

 

Немного формул

Как было сказано ранее, динамические скользящие средние уже давно не являются прорывом в науке технического анализа. На сегодняшний день, имеются несколько разновидностей этого инструмента, но наиболее известные из них – VIDYA (Variable Index Dynamic Average) и динамическая скользящая средняя Кауфмана (KAMA, Kaufman Adaptive Moving Average). Что касается последней, то Пэрри Кауфман представил свою разработку еще в 1995 году. Правда, если принять во внимание, что скользящие средние начали применяться за 50 лет до этого момента, то эти инструменты можно назвать относительно новыми. Рассмотрим вкратце работу каждого из них.

VIDYA была предложена Тушаром Чендом. Для ее вычисления используется осциллятор CMO, названный в честь разработчика Chande Momentum Oscillator. По своей сути он напоминает RSI и вычисляется следующим образом: отношение суммы положительных и отрицательных приращений за период (период CMO) к их разности. Значение модуля СМО (абсолютного значения) используется для вычисления динамического периода через фактор сглаживания экспоненциальной скользящей средней следующим образом:

F(Динамический) = F*|CMO| = 2*|CMO|/(n+1)

Подставляя F(Динамический) – динамический фактор сглаживания в формулу для экспоненциальной скользящей средней вместо обычного F, получаем формулу для VIDYA:

VIDYA = Close*F*|CMO| + VIDYA-1*(1 — (F*|CМО|)).

Из данной формулы видно, что если цены растут или падают в активном тренде, CMO имеет большое значение по абсолютной величине. При этом динамическое значение F также высоко, что говорит о низкомдинамическом периоде скользящей средней. А в этом случае VIDYA максимально близка к графику цены и может оперативно реагировать на любые изменения рынка. Напротив, когда движение цены замедляется или мы наблюдаем боковик в рамках тренда, значение СМО приближается к нулю, а следовательно близко к нулю и значение F, что говорит об увеличившемся динамическом периоде скользящей средней. Предельный случай, если СМО=0, VIDYA будет двигаться в горизонтальном направлении, абсолютно игнорируя любые колебания цен.

Суть адаптивной скользящей средней Кауфмана (KAMA) аналогично VIDYA, однако ее вычисления чуть более замысловаты. Для начала вводится параметр эффективности рынка ER (efficiency ratio), который равен отношению Сигнал/Шум. Сигнал вычисляется как модуль разности текущей цены и цены n периодов назад:

|Close[bar] – Close[bar-n]|

(индикатор Momentum по сути). Для того чтобы вычислить Шум, необходимо взять сумму модулей приращений цены за период n:

|Close[bar] – Close[bar-1]|+…+|Close[bar-n-1] – Close[bar-n]|

В результате мы получим коэффициент, который меняется от 0 до 1. При абсолютном шуме ER будет близок к нулю, а если на рынке наблюдается тренд, ER будет близок к 1. Теперь используем ER для придания динамичности экспоненциальной скользящей средней через фактор сглаживания F. Поскольку мы должны переключаться от быстрой скользящей средней к медленной и наоборот, сам автор советует выбрать два крайних значения: 2 и 30 соответственно. Тогда F(быстрый) = 2/(2+1) = 0,66, а F(медленный) = 2/(30+1) = 0,064.Динамический фактор определяется так:

F(динамический) = ER*( F(быстрый) — F(медленный)) + F(медленный)

или:

F(динамический) = ER*0,6021 + 0,0645.

Таким образом, мы получили динамический фактор, который, если его подставить в формулу для экспоненциальной скользящей средней, и даст нам KAMA.

 

Рис 1

На рисунке 1 представлены графики VIDYA (голубая линия), KAMA (синяя линяя) и ЕМА (фиолетовая линия). Можно увидеть, что при трендовом движении динамические линии находятся ближе к цене и, если возникает шум, немного удаляются от нее, чтобы избежать преждевременного выхода. Если тенденция меняется – динамические линии просто выпрямляются.

 

А деньги где?

Перейдем, наконец, к самому интересному – построению торговой системы с использованием адаптивных скользящих средних. Надо сказать, что, к нашему счастью, и VIDYA, и KAMA (а кроме них – другие разновидности динамических скользяшек) входят в библиотеку встроенных инструментов технического анализа различных систем разработок МТС, в частности WealthLab. Это значительно облегчает нам работу.

В качестве основной динамической средней была взята КАМА – исключительно субъективное решение. Правда, дополнительным доводом в ее пользу может служить и то, что она по сути использует только один параметр – длину анализируемого интервала для ER. Сама система проста, поэтому, без излишней лирики перейдем к формальному описанию правил входа и выхода.

Правила входа:

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

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

Правила Выхода:

Для лонга выходим, если цена опустилась ниже двух ATR от цены High предыдущей свечи.

Для шорта выходим, если цена поднялась выше двух ATR от цены Low предыдущей свечи.

Параметры стратегии:

Инструмент – фьючерс на индекс RTS

Работает на 15-минутном масштабе (шорты и лонги)

Интервал тестирования: 1/09/2010 по 28/02/2012

Работаем 1 контрактом, начальный капитал 200000

Работают лонги и шорты

Проскальзывание + комиссия = 20 пунктов

Оптимизируемые параметры

Параметр KAMA

Параметр ATR

Параметр скользящей средней

Результаты тестирования ниже. На рисунке 2 – кривая капитала.

Рис 2

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

Среди наиболее важных характеристик выделим доходность: 65,7%, просадка: 4,94%, Profit Factor: 1,57. Что, согласитесь, достаточно сносно для стратегии “без претензий”, что называется. Если на FORTS взять хотя бы 2-3 плечо, может быть уже значительно интересней. Более подробные результаты бэктестинга в таблице 1. Код стратегии в WealthLab прилагается.

All Trades

Long Trades

Short Trades

Buy & Hold

Starting Capital

200 000,00р.

200 000,00р.

200 000,00р.

200 000,00р.

Ending Capital

462 851,23р.

347 073,83р.

315 777,40р.

242 330,00р.

Net Profit

262 851,23р.

147 073,83р.

115 777,40р.

42 330,00р.

Net Profit %

131,43%

73,54%

57,89%

21,17%

Annualized Gain %

65,68%

39,33%

31,63%

12,25%

Exposure

41,76%

28,60%

21,93%

70,25%

Total Commission

-18 150,00р.

-11 310,00р.

-6 840,00р.

-10,00р.

Return on Cash

0,00р.

0,00р.

0,00р.

0,00р.

Margin Interest Paid

0,00р.

0,00р.

0,00р.

0,00р.

Dividends Received

0,00р.

0,00р.

0,00р.

0,00р.

 

 

 

 

Number of Trades

908

566

342

1

Average Profit

289,48р.

259,85р.

338,53р.

42 330,00р.

Average Profit %

0,18%

0,17%

0,20%

32,58%

Average Bars Held

20,82

20,1

22,01

22 945,00

 

 

 

 

Winning Trades

380

249

131

1

Win Rate

41,85%

43,99%

38,30%

100,00%

Gross Profit

723 791,37р.

422 981,50р.

300 809,87р.

42 330,00р.

Average Profit

1 904,71р.

1 698,72р.

2 296,26р.

42 330,00р.

Average Profit %

1,18%

1,06%

1,39%

32,58%

Average Bars Held

34,02

32,59

36,73

22 945,00

Max Consecutive Winners

8

8

7

1

 

 

 

 

Losing Trades

528

317

211

0

Loss Rate

58,15%

56,01%

61,70%

0,00%

Gross Loss

-460 940,14р.

-275 907,67р.

-185 032,47р.

0,00р.

Average Loss

-872,99р.

-870,37р.

-876,93р.

0,00р.

Average Loss %

-0,54%

-0,54%

-0,54%

0,00%

Average Bars Held

11,31

10,28

12,86

0

Max Consecutive Losses

10

9

10

0

 

 

 

 

Maximum Drawdown

-18 111,31р.

-15 327,74р.

-13 536,36р.

-90 700,00р.

Maximum Drawdown Date

19.08.2011

05.10.2011

31.08.2011

04.10.2011

Maximum Drawdown %

-4,94%

-4,96%

-5,81%

-32,52%

Maximum Drawdown % Date

19.08.2011

05.10.2011

18.01.2011

04.10.2011

 

 

 

 

Wealth-Lab Score

149,51

130,69

135,83

11,76

Sharpe Ratio

4,85

4,51

1,84

0,56

Profit Factor

1,57

1,53

1,63

бесконечность

Recovery Factor

14,51

9,6

8,55

0,47

Payoff Ratio

2,17

1,97

2,55

0

Таблица 1

 

Код стратегии в WealthLab 5.0

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;

namespace WealthLab.Strategies
{
 public class KAMAStrategy : WealthScript
 {
  StrategyParameter _atrper;//5
  StrategyParameter _kamaper;//7
  StrategyParameter _emaper;//8
  StrategyParameter _perL;//5
  
  public KAMAStrategy()
  {
    _perL = CreateParameter("perL", 10, 5, 15, 1);
   _atrper = CreateParameter("atrper", 10, 5, 20, 1);
   _kamaper = CreateParameter("kamaper", 10, 5, 30, 1);
   _emaper = CreateParameter("emaper", 10, 5, 30, 1);

  }
  protected override void Execute()
  {
   int perL = _perL.ValueInt;
   int atrper = _atrper.ValueInt;
   int kamaper = _kamaper.ValueInt;
   int emaper = _emaper.ValueInt;
   double HighFractalPrice = 0;
   bool ReadyToEnterLong = false;
   bool ReadyToEnterShort = false;
   KAMA kama = KAMA.Series((High+Low+Close)/3, kamaper);
   SMA ema = SMA.Series(Close, emaper);
   ATR atr = ATR.Series(Bars, atrper);
   //DataSeries HH = Highest.Series(High, 5);
   DataSeries LL = Lowest.Series(Low, perL);
   for(int bar = 20; bar < Bars.Count; bar++)
   {
    if (IsLastPositionActive)
    {
     
     if( LastPosition.PositionType == PositionType.Long )
      SellAtStop(bar+1, LastPosition, High[bar] — 2*atr[bar], "Exit Long");
     else if( LastPosition.PositionType == PositionType.Short )
      CoverAtStop(bar+1, LastPosition, Low[bar] + 2*atr[bar], "Exit Short");

    }
    else
    {
     if (CrossOver(bar,Close, kama))
      ReadyToEnterLong = true;
     if (ReadyToEnterLong && CrossUnder(bar, Close, kama))
      ReadyToEnterLong = false;
     if (ReadyToEnterLong && ema[bar] < Close[bar])
     {
      BuyAtMarket(bar+1, "Enter Pos Long");
      //BuyAtStop(bar+1, HH[bar-1], "Enter Pos Long");
      ReadyToEnterLong = false;
     }
     
     if (CrossUnder(bar, Close, kama))
      ReadyToEnterShort = true;
     if (ReadyToEnterShort && CrossOver(bar, Close, kama))
      ReadyToEnterShort = false;
     if (ReadyToEnterShort && ema[bar] > Close[bar])
     {
      ShortAtStop(bar+1, LL[bar-1], "Enter Pos Short");
      ReadyToEnterShort = false;
     }
      
    }
    
   }
   
   PlotSeries(PricePane, kama, System.Drawing.Color.Blue, WealthLab.LineStyle.Solid, 2);
   PlotSeries(PricePane, ema, System.Drawing.Color.Cyan, WealthLab.LineStyle.Solid, 2);

  }
 }
}

Сравнение КАМА и ЕМА: зависимость годовой доходности стратегии (по вертикали) от параметра скользящей средней (по горизонтали)

Автор: Максим Ремизов

Комментарии

WizzieFoggs — 29 февраля 2012 г.

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

0 +

Flyanimal — 1 марта 2012 г.

2WizzieFoggs
Самостоятельно - лучше всего, больше маневров для оригинальных решений, так что все верно))
Лично я про данную тему в первый раз читал года 3-4 назад. Но поскольку тогда тестирование происходило на истории 2005-2008гг, когда рынок безудержно рос, то большой разницы между простыми скользяшками и динамическими увидеть было сложно. Сейчас характер рынка изменился, и мы можем наблюдать, что некоторый эффект относительно обычных скользящих средних все таки имеется.

0 +

Николай Камынин — 2 марта 2012 г.

Достаточно подробно это изложено Константином Копыркиным Статья "Динамические скользящие средние".
журнал Современный трейдинг №5-6 за 2001 год

0 +

Yuro — 2 марта 2012 г.

А вы не пробовали ту же систему с VIDYA? Вообще, как мне кажется, суть "динамичности" заключается в том, что они реализуют некий скользящий стоп, который лучше реагирует на волатильность, чем обычные скользящие средние. Но это, конечно, им плюс за это)) Хотя на выход у вас свой скользящий стоп... Интересно для эксперимента - если выходить по этим кривым динамическим - хуже получается?

0 +

selere1 — 2 марта 2012 г.

А с какой целью введены логические переменные, значения которых переприсваиваются после кросинга kama и Close?

0 +

Flyanimal — 2 марта 2012 г.

Николай, именно с этой статьи и началось мое знакомство с этим инструментом))

0 +

Flyanimal — 2 марта 2012 г.

Yuro, VIDYA я не пробовал в деле, а выбор KAMA, как я писал - это чисто субъективно + у нее всего один оптимизируемый параметр (вместо двух у VIDYA), что тоже хорошо. Касательно скользящего стопа, думаю, вы правы, в нектором смысле это он и есть, но я действительно использовал другой стоп - он более чувствительный и система дает с ним лучшие характеристики.

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

0 +

orekton — 2 марта 2012 г.

"после кросинга kama и Close, система в позицию не входит, но при этом уже знает, что одно из условий входа выполнено"
Зачем было вводить дополнительные условия?

0 +

Flyanimal — 3 марта 2012 г.

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

0 +

orekton — 3 марта 2012 г.

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

0 +

ALendi — 3 марта 2012 г.

С чего посоветуете начать изучение C#? Кое-какие навыки программирование есть. Существует пособие по языку, заточенное именно под создание МТС?

0 +

Flyanimal — 3 марта 2012 г.

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

0 +

Flyanimal — 3 марта 2012 г.

ALendi, книг по С# существует огромное количество, посоветовать что-то конкретно затрудняюсь. Есть ли что-то непосредственно под МТС - для C# я не встречал, хотя для Pascal есть (версии 4х WealthLab). В действительности, чтобы писать МТС в том же WealthLab, обладать какими-то виртуозными навыками программирования не требуется. Все необходимые функции и переменные уже встроены в систему бэк-тестинга, поэтому от разработчика требуется не так уж много. К тому же у WealthLab просто потрясающий help с подробными примерами на С#.

0 +

Yuro — 4 марта 2012 г.

Fanimal, мне почему VIDYA интересна - не замечали вы, что если взять вариант WealthLab, то она выглядит как-то странно. Делать или смотреть что-то по ней бессмысленно. Просто, если я не ошибаюсь, она у вас изображена на рисунке и там такая же ситуация.

0 +

Yuro — 4 марта 2012 г.

Flyanimal, сорри за очепятку))

0 +

Flyanimal — 4 марта 2012 г.

Yuro, VIDYA на картинке есть, это точно. Правда она не совсем отвечает формуле, которую мы упоминали в статье (и которую предложил Тушар Ченд))): VIDYA = Close*F*|CMO| + VIDYA(-1)*(1 - (F*|CМО|)). Но это не глюк WelthLab. В своем описании этого инструмента они требуют наличие параметра (переменной), который бы выражал волатильность. пользуясь им, они просто делают %-ый отступ от VIDYA. Об этом написано здесь: http://www2.wealth-lab.com/WL5Wiki/Vidya.ashx

0 +

Flyanimal — 4 марта 2012 г.

Yuro, вот код VIDYA, которая будет работать так, как описано в статье:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;

namespace WealthLab.Strategies
{
public class VIDYA : DataSeries
{
public VIDYA (DataSeries ds, int vidyaPer, int vidyaSmooth) : base (ds, "VIDYA Series")
{
int Smooth = vidyaSmooth;
double SC = (double)2/(Smooth+1);
CMO cmo = CMO.Series(ds, vidyaPer);

for (int bar=1; bar {
if (bar==vidyaPer)
this[vidyaPer] = ds[vidyaPer];
else if (bar>vidyaPer)
this[bar]=SC*Math.Abs(cmo[bar]/100)*ds[bar] +(1 - (SC*Math.Abs(cmo[bar]/100)))*this[bar-1];
}
}

public static VIDYA Series (DataSeries ds, int vidyaPer, int vidyaSmooth)
{
VIDYA _VIDYA = new VIDYA(ds, vidyaPer, vidyaSmooth);
return _VIDYA;
}
}

public class PlotVIDYA : WealthScript
{
protected override void Execute()
{
int Per = 20;
int Smooth=13;

DataSeries VIDYA_Series = VIDYA.Series(Close, Per, Smooth);
PlotSeries(PricePane, VIDYA_Series, Color.Blue, LineStyle.Solid, 2);

for(int bar = 20; bar < Bars.Count; bar++)
{
//PrintDebug(VIDYA_Series[bar]);
if (IsLastPositionActive)
{
//code your exit rules here
}
else
{
//code your entry rules here
}
}
}
}
}

0 +

Yuro — 4 марта 2012 г.

Flyanimal, разъяснили ситуацию. Жаль, что я в С# не особо разбираюсь, но за код спасибо)

0 +

yurikon — 5 марта 2012 г.

Добрый день!

Слишком много сделок - средняя сделка 0.15%. Добавьте сюда проскальзывание, уберите первую минуту после начала торгов и клиринга и от прибыли ничего не останется. Мувинги сами по себе довольно сильно загоняют рынок в рамки, поэтому и работают не фонтан. Хотя на трендовых участках будут радовать.

С уважением.

0 +

Flyanimal — 6 марта 2012 г.

yurikon, здравствуйте! Согласен с вами. Сделок, как для трендовой системы, многовато и средняя прибыль на сделку маленькая. Проскальзывание я тоже установил небольшое, но, как для одного контракта, по-моему нормально - за одну сделку в рынок мы отдаем 20 пунктов... ну маловато, согласен. Но здесь возможны варианты - можно взять тайм-фрейм часовик, это нам уменьшит и количество сделок и поднимет среднюю прибыль на них, что может нивилировать эффект бОльшего проскальзования. Доходность, конечно, тоже уменьшится, раза в 2. Ближе к вечеру я могу запостить резалты.

0 +

Николай Камынин — 6 марта 2012 г.

Добрый день,Flyanimal!
Хочу обратить Ваше внимание на следующий факт в Вашем исследовании.
Так как Вы моделируете торговлю лишь одним контрактом, то задания величины капитала является избыточным параметром.
По Вашим результатам у Вас Exposure<70%, это значит что как минимум 30% указанного вами капитала просто зря валяются на депозите. Поэтому их можно было сразу из эксперимента исключить. Т.е. нодо считать эффективность Вашего эксперимента исходя из капитала примерно в 140 000 а не 200000.
В противном случае, почему бы не указать что на депозите миллиард а вы торгуете одним контрактом.
Т е ограничение числа контрактов автоматом ограничивает учитываемую сумму на депозите

0 +

apis78 — 6 марта 2012 г.

Хотелось бы попробовать KAMA на реальном счёте, есть код стратегии для Wealth Lab 4 ???????

0 +

Flyanimal — 7 марта 2012 г.

yurikon, здравсвуйте! Для этой же стратегии был установлен часовой масштаб и комиссия + проскальзывание = 60 пнктов (покупка+продажа, в одну сторону 30 пунктов), период истории такой же. Всю таблицу по результатам работы выкладывать не буду, отдельные показатели таковы:

Annualized Gain % 38,24%
Number of Trades 188
Average Profit 696,36р.
Average Profit % 0,43%
Maximum Drawdown % -14,43%
Profit Factor 1,66
Самое обидное здесь - это большая просадка. В абсолютных величинах - 37 тыс. пунктов, при работе одним контрактом. Хорошие нужно иметь нервы) Но таковы резалты.

0 +

Flyanimal — 7 марта 2012 г.

Николай, здравсвуйте! Вы правы, капитал здесь используется не особо эффективно, система money management здесь вообще отсутствует (это, надо заметить, самая популярная система управления капиталом ))) ДА, с точки зрения полной работы капитала луше входить либо постоянной суммой и от нее считать доходнсть, либо % эквити (). Здесь хотелось продемонстрировать работу динамических скользящих средних. Хотя работа с капиталом на итоговые результаты, конечно повлияет.

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

0 +

Николай Камынин — 7 марта 2012 г.

Добрый день,Flyanimal!
Хочу положить ложку дегтя в Вашу бочку меда.
В статье Вы фактически ничего не доказали.
Т.е. Вы декларировали предположение, что изменение постоянной времени скользящей средней должно дать положительный эффект в результатах торговли. Потом Вы изложили своими словами два способа изменения параметра. Наглядный рисунок индикаторов лишь указывает, что Вы завысили величину коэффициента для EMA, поэтому этот индикатор более инертный.
Касалось бы , для подтверждения Вашего предположения,
необходим сравнительный эксперимент стратегия с КАМА и с EMA.
Тогда Ваше изначальное предположение имело бы если не доказательство,
то хотя бы иллюстрацию положительного результата.
Но именно это Вы и не показали.
Так что Увы.

0 +

Flyanimal — 7 марта 2012 г.

Николай, какой уж тут мед, тоже скажите)
По правде говоря, у меня не было задачи что-то доказать или навязать, тем более тема не нова. Но соглашусь с Вами, что для полноты картины желательно подтвердить не словами, а экспериментальными результатами преимущество той же KAMA над EMA. Это хорошее предложение, если я Вас правильно понял. Года 3 назад подобный опыт я делал для VIDYA и оказалось, что разницы почти никакой – обе работают одинаково плохо. На мой взгляд, это не служит доказательством или опровержением того, что EMA хуже или лучше VIDYA. Все зависит от "контекста", в котором данный инструмент применяется. А если на истории... в этом случае почти всегда можно сделать конфетку сами знаете из чего.
Тем не менее, предлагаю тот же опыт провести и с KAMA, только в рамках простой стратегии – кроссинг вверх – купили, кроссинг вниз – продали.

0 +

Flyanimal — 8 марта 2012 г.

Было проведено сравнение KAMA и EMA в рамках стратегии - кросинг вверх - покупка, вниз - продажа. Как и предполагалось, КАМА и EMA работают почти одинаково в определенной части диапазона параметра (нижний диапазон), но дальше EMA превосходит КАМА, что связано уже с ее особенностями построения. Интересный момент - в районе периода 30 доходности стратегий почти совпадают, потому как 30 - это крайнее значение для КАМА. Рисунок по доходности стратегии в зависимости от периода будет выложен позже (как редактор сможет).
Какой вывод можно сделать? В нижнем диапазоне периодов КАМА смотрится предпочтительнее (правда, всего на "5 копеек", что называется), для верхних диапазонов ее лучше не использовать.

0 +

Николай Камынин — 9 марта 2012 г.

Добрый день,Flyanimal !
Да Вы правильно поняли мой комментарий.
Дело в том, что когда я исследовал КАМА, то получил, такой же , одинаковый или даже хуже, чем МА, результат.
Дело в том, что все трендовые индикаторы, которые применяются или когда-либо применялись для торговли на рынках - это примитивные фильтры нижних частот, с неизвестными , не оптимальными ( а значит плохими) и фактически случайно заданными переходными характеристикам. Ожидать от них чуда не стоит.
Единственный фильтр, который показал более интересные результаты, чем все эти примитивы,это как уверяют разработчики - фильтр Кальмана, хотя алгоритмически он представляет собой многополюсный фильтр нижних частот.
Опять же чуда нет,так как это фильтр большого порядка и его характеристики значительно лучше.
Поэтому, хорошим завершением Вашей статьи был бы призыв использовать MA и не забивать голову ерундой.
Результат будет один и тот же.
Если рынок растет будет прибыль, если боковик - будет слив.
И хорошо , если боковик будет короткий, иначе сольет все или не заработает ничего на тренде.
А на истории достаточно два параметра, что оптимизировать на прибыль трендовый алгоритм с любым индикатором.

0 +

selere1 — 11 марта 2012 г.

Можете прокомментировать код для VIDYA? У вас в классе VIDYA конструктор public static VIDYA Series (DataSeries ds, int vidyaPer, int vidyaSmooth), а внутри него вы какбы вновь запускаете конструктор? Поясните пожалуйста

1 +

Flyanimal — 11 марта 2012 г.

selere1, добрый вечер. public static VIDYA Series (DataSeries ds, int vidyaPer, int vidyaSmooth) - это не конструктор, а метод класса VIDYA. А уже внутри него действительно запускается конструктор VIDYA. Так сделано для того, что бы не приходилось лишний раз создавать объект класса, а просто брать и сразу инициализировать VIDYA, как обычный инструмент WealthLab.

0 +

umoz — 5 апреля 2012 г.

не, я так простые только беру, SMA за глаза хватает

0 +

foton89 — 9 апреля 2012 г.

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

Газпром
доходность 34,5%
просадка 21%
Выигрышные сделки/проигрышные 46%/54%

Сбербанк
доходность 37%
просадка 23%
Выигрышные сделки/проигрышные 47%/53%

ГМК Норильский Никель
доходность 11,5%
просадка 31%
Выигрышные сделки/проигрышные 36%/64%

0 +

Flyanimal — 12 апреля 2012 г.

foton89, дак с пивом как раз не страшно будет))
Для порядку желательно указать, какой интервал брали, проскальзывание и т д.

umoz, наверное вы правы, хотя каждый инструмент хорош в нужное время и в нужном месте)

0 +

Laborant — 17 января 2013 г.

В боковике развалится, к гадалке не ходи.
А то, что между КАМА и ЕМА нет никакой разницы - это давно известно

0 +

Veresk — 18 января 2013 г.

В боковике многие разваливаются.

0 +

Flyanimal — 18 января 2013 г.

Развалится, а что делать...
Волатильность такой робот собирать не умеет. Ну а то что кривая капитала гладкая... ну конечно я ее оптимизировал. Это не секрет.

0 +

ALendi — 18 января 2013 г.

Flyanimal, а есть от такого робота толк? По собственным впечатлениям?

0 +

Flyanimal — 18 января 2013 г.

ALendi, толк есть всегда от любого дела, даже от безделья))
По системе - в текущей фазе рынка она бессильна, это понятно. Поэтому в данный момент она не используется - крутится на виртуальных объемах. Но ее момент настанет, только чуть позже.

0 +

ALendi — 18 января 2013 г.

Flyanimal, как ты узнаешь, что момент настал?

0 +

Flyanimal — 21 января 2013 г.

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

0 +

ALendi — 21 января 2013 г.

Flyanimal, не серьезно все это. Надо брать сберкассу и валить на Кубу.

0 +

Flyanimal — 21 января 2013 г.

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

0 +

Написать комментарий

Чтобы написать комментарий, необходимо авторизоваться.

Написать администратору