Уровни > Fractal – фрактал (экстремум)

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Fractal – фрактал (экстремум)

Непрочитанное сообщение evge » 07 фев 2016, 16:57

Фракталы Билла Вильямса (В.Williams) показывают особые точки или локальные экстремумы. «Особые точки» - это экстремальные точки на графике, в которых происходит изменение направления движения цены. Эти точки говорят, что в данный момент времени на данном уровне существенно меняется соотношение спроса и предложения, которое может происходить из-за выхода новой информации или из-за достижения определенных ценовых уровней.

Параметр «Period» данного индикатора показывает порядок фрактала, т.е. какое количество точек справа и слева должно быть ниже (выше) экстремума.

Пример:

Fractal-00.png
Fractal-00.png (24.02 КБ) 37061 просмотр


Исходный текст:

Код: Выделить всё

function Initialize()
{
  IndicatorName = "Fractal";   
  AddInput("Input", Inputs.Candle);   
  AddParameter("Period", 5);   
  PriceStudy = true;   
  AddSeries("H", DrawAs.Custom, Color.Coral);   
  AddSeries("L", DrawAs.Custom, Color.LightGreen);   
}

function Evaluate()
{
// AlfaDirect. 2014. OX
// Fractal. Period - число точек справа и слева от экстремума, которые ниже (выше) него
  if (CurrentIndex > 2 * Period)
  {
     var xH = 0;
     var xL = 0;
     var HPoint =  Input.High[-Period];
     var LPoint =  Input.Low[-Period];
     for (var i = 0; i < Period; i++ )
     {
           if ( HPoint >= Input.High[i+1-Period] && HPoint >= Input.High[-i-1-Period] )
              xH = xH + 1;
           if ( LPoint <= Input.Low[i+1-Period] && LPoint <= Input.Low[-i-1-Period] )
              xL = xL + 1;
      }
      if ( xH == Period )
      {
          H[Period] = HPoint;
      }
      if ( xL == Period )
      {
          L[Period] = LPoint;
      }
      H.DrawArrowDown();
      L.DrawArrowUp();
  }
}
никогда такого не было и вот опять

MonteCristo
Сообщения: 35
Зарегистрирован: 16 май 2018, 19:52
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Re: Fractal – фрактал (экстремум)

Непрочитанное сообщение MonteCristo » 16 май 2018, 19:59

Как при тестировании стратегии, на каждом шаге выполнения OnUpdate(), получить последние значения рядов H и L у этого индикатора?

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Fractal – фрактал (экстремум)

Непрочитанное сообщение evge » 16 май 2018, 23:05

Нужно учитывать, что фракталы рисуются "задним числом", т.е. в момент их обнаружения уже прошло некоторое время (задержка, кол-во баров заданное в параметре периода).

Где они реально стали известны можно чуть доделав индикатор продемонстрировать:

Код: Выделить всё

function Initialize()
{
  IndicatorName = "FractalX";   
  AddInput("Input", Inputs.Candle);   
  AddParameter("Period", 5);   
  PriceStudy = true;   
  AddSeries("H", DrawAs.Custom, Color.OrangeRed);   
  AddSeries("L", DrawAs.Custom, Color.Green);   
  AddSeries("HReal", DrawAs.Line, Color.OrangeRed);   
  AddSeries("LReal", DrawAs.Line, Color.Green);   
}

function Evaluate()
{
// AlfaDirect. 2014. OX
// Fractal. Period - число точек справа и слева от экстремума, которые ниже (выше) него

// evge 16.05.2018
// Добавлены серии HReal, LReal для возможности тестирования в стратегиях

  LReal[0] = LReal[1];
  HReal[0] = HReal[1];

  if (CurrentIndex > 2 * Period)
  {
     var xH = 0;
     var xL = 0;
     var HPoint =  Input.High[-Period];
     var LPoint =  Input.Low[-Period];
     for (var i = 0; i < Period; i++ )
     {
           if ( HPoint >= Input.High[i+1-Period] && HPoint >= Input.High[-i-1-Period] )
              xH = xH + 1;
           if ( LPoint <= Input.Low[i+1-Period] && LPoint <= Input.Low[-i-1-Period] )
              xL = xL + 1;
      }
      if ( xH == Period )
      {
          H[Period] = HPoint;
          HReal[0] = HPoint;
      }
      if ( xL == Period )
      {
          L[Period] = LPoint;
          LReal[0] = LPoint;
      }
      H.DrawArrowDown();
      L.DrawArrowUp();
  }
 
}


Можете использовать, вместо H и L серий, HReal и LReal.
Эти серии будут содержать на каждом последующем баре последний фрактал High (HReal) и Low (LReal).

FractalX-01.png
Реальный момент появления фракталов в виде линии (серия HReal и LReal)
FractalX-01.png (37.25 КБ) 36145 просмотров
никогда такого не было и вот опять

MonteCristo
Сообщения: 35
Зарегистрирован: 16 май 2018, 19:52
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Re: Fractal – фрактал (экстремум)

Непрочитанное сообщение MonteCristo » 17 май 2018, 19:24

Не понял, что значит задержка? Если у фрактала период 5, то мы же увидим на текущем баре фрактал, который только что нарисовался, с учетом того, что слева и справа по 5 свечек, естественно. То есть если текущая свечка стала 5-ой, которая ниже экстремума, значит в OnUpdate() по идее я хочу увидеть, что 5 баров назад есть экстремум. Разве не так?

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Fractal – фрактал (экстремум)

Непрочитанное сообщение evge » 17 май 2018, 19:27

Об этом и речь, а текущем баре мы узнаем что фрактал был 5 баров назад и там его и нарисуем.

На таких индикаторах, которые рисуют "задним числом" тестирование в АД4 будет всегда показывать граальные результаты.

Даже если рисуется с запаздыванием в 1 бар.

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

К этим сериям в стратегии можно обратится на любом баре и не выискивать на истории отрисованные задним числом фракталы (тестирование стратегий этого не любит).
никогда такого не было и вот опять

MonteCristo
Сообщения: 35
Зарегистрирован: 16 май 2018, 19:52
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Re: Fractal – фрактал (экстремум)

Непрочитанное сообщение MonteCristo » 19 май 2018, 00:51

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

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Fractal – фрактал (экстремум)

Непрочитанное сообщение evge » 19 май 2018, 08:25

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

nordseven
Сообщения: 39
Зарегистрирован: 05 мар 2016, 19:39
Благодарил (а): 6 раз
Поблагодарили: 1 раз

Re: Fractal – фрактал (экстремум)

Непрочитанное сообщение nordseven » 19 май 2018, 08:48

А если предпослседний?

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Fractal – фрактал (экстремум)

Непрочитанное сообщение evge » 19 май 2018, 10:26

Хранить в глобальной переменной Types.DoubleList:

Код: Выделить всё

ListH.Insert(0, H);
ListL.Insert(0, L);

удалять лишнее

Код: Выделить всё

if (ListH.Count > 20) ListH.RemoveAt(0);
if (ListL.Count > 20) ListL.RemoveAt(0);


Обращаться по индексу

ListH[0] - последний
ListH[1] - предпоследний

и т.д.
никогда такого не было и вот опять

MonteCristo
Сообщения: 35
Зарегистрирован: 16 май 2018, 19:52
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Re: Fractal – фрактал (экстремум)

Непрочитанное сообщение MonteCristo » 19 май 2018, 19:01

А H и L это что? Я думал прям из них можно последнее значение вынуть. Просто хотел узнать как. Я думал что-то типа такого: H[H.Count() - 1]. Но нормального описания всех методов и функций не нашел. H и L наполняются так же пошагово вместе с каждым баром или разом заполняется в начале теста за весь период тестирования?


Вернуться в «Уровни»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя