English 中文 Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
preview
Что можно сделать с помощью скользящих средних

Что можно сделать с помощью скользящих средних

MetaTrader 5Примеры | 11 марта 2022, 14:05
4 902 3
Oleh Fedorov
Oleh Fedorov

Введение

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

Вот в данной статье я и решил собрать некоторые такие идеи, которые относятся к самому, наверное, распространенному и легкому в понимании индикатору — скользящей средней (она же — Moving Average, она же — МА).

В простейшем случае значение индикатора вычисляется по известной формуле среднего:

MA[i] = (Price[i]+Price[i+1]+...+Price[i+MAPeriod])/MAPeriod

Здесь MA[i] - следующий элемент последовательности, точка на кривой. Price[i] — цена в данный момент времени, MAPeriod — количество элементов для усреднения.

Понятно, что цена может быть любой: открытия, закрытия, максимум, минимум, средневзвешенные величины и т.д. Стандартный индикатор позволяет выбрать и цену, по которой его надо вычислять, и методы вычисления, в том числе — более сложные, чем простое среднее... При написании примеров я оставляю возможность выбирать способ вычисления, но для понимания сути рассматриваемых методов это непринципиально. Все примеры будут отлично работать и в случае "простой" средней (SMA), и в случае экспоненциальной (EMA), и с использованием других методов расчета. Поэтому во всех рисунках и в настройках по умолчанию в индикаторах будет стоять SMA, и все индикаторы используют цены закрытия, если явно не указано иное, а эксперименты по улучшению этих параметров оставлю читателю.

Если я говорю об одиночной кривой, то обычно буду использовать "умолчательное" значение периода — 10 баров. Если в одном индикаторе будут использоваться несколько кривых с разным периодом, чаще всего это будет 5 и 8. Больше двух кривых разных периодов в этой статье я не использую.

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


Шаблонный индикатор

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

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

Некоторые идеи проще иллюстрировать, если индикатор находится в окне графика, некоторые — если индикатор расположен в отдельном окне. Это делается с помощью одного из свойств. Так, для индикатора в окне графика будет использовано свойство

#property indicator_chart_window

Если индикатор — в отдельном окне, то будет применено свойство

#property indicator_separate_window

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

#property indicator_height 100

Понятно, что цифра может меняться.

Имена буферов в конце обязательно имеют суффикс "Buffer". Так, например, стандартные буферы для стрелок я буду называть ArrowDownBuffer и ArrowUpBuffer. Если индикатор отрисовывает линии, то буфер будет назван по назначению этой линии.

Любые глобальные переменные, определённые мною, если они не являются буферами, будут иметь приставку "ext", например, extATRData — глобальная переменная, содержащая исходные данные индикатора ATR.

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

При инициализации задаю все пустые значение равными 0:

  PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
  PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
  PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);

И таким образом получается, что нужно показать только условия отображения стрелок или линий, то есть только то, что остаётся в основном цикле.

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


Пересечение линии ценой (направление тренда)

В простейшем случае МА линии используются соло, в своём "натуральном" виде. Думаю, все читатели видели подобную картинку на своих мониторах:

"Чистая" МАшка

Рисунок 1. Простая скользящая средняя.

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

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

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      ((close[i-1]<extMAData[i-1]
        && open[i-1]>extMAData[i-1]
       )
       ||(close[i-2]>extMAData[i-2]
          && open[i-2]>extMAData[i-2]
          && close[i-1]<extMAData[i-1]
          && open[i-1]<extMAData[i-1]
         )
      )

    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }
    else
      if(
        ((close[i-1]>extMAData[i-1]
          && open[i-1]<extMAData[i-1]
         )
         ||(close[i-2]<extMAData[i-2]
            && open[i-2]<extMAData[i-2]
            && close[i-1]>extMAData[i-1]
            && open[i-1]>extMAData[i-1]
           )
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   } // main cycle

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

Файл индикатора называется MA-Breaking.mq5. И его выполнение на графике даст следующую картинку (для стандартного периода кривой 10 баров):

MA — пробой

Рисунок 2. Пробой средней

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


МА как линия поддержки/сопротивления

Второй очевидный способ использовать кривую — назначить её уровнем поддержки/сопротивления. Если цена коснулась линии, однако не пересекла её (закрылась с той же стороны), имеем сигнал на сделку. Например, за 17 февраля, если пользоваться этим правилом, можно увидеть 3 точки входа вниз и, возможно, если нет дополнительных фильтров — одну точку вверх (в начале).

Понятно, что это правило можно использовать как для входа в первую сделку, так и для доливки.

Файл индикатора для демонстрации этого принципа работы называется MA-Support.mq5.

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      (high[i-1]>=extMAData[i-1]
       && close[i-1]<extMAData[i-1]
       && open[i-1]<extMAData[i-1]
      )
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }

    else
      if(
        (low[i-1]<=extMAData[i-1]
         && close[i-1]>extMAData[i-1]
         && open[i-1]>extMAData[i-1]
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   } // Main cycle end

Вот результат работы этого кода:

МА как линия поддержки/сопротивления

Рисунок 3. Использование МА как линии поддержки/сопротивления

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

И еще одна очевидная вещь. Чем больше период МА, тем она более пологая и тем дальше она расположена от цены, соответственно, сигналы и на пробой, и на отбой приходят реже, однако, скажем, в качестве поддержки/сопротивления влияние она оказывает сильнее. Для сравнения я покажу еще один график, 20-периодный. Видно, что касания (отбой) происходят реже, однако, возможно, эти сигналы будут более надёжны, и стоп можно ставить более короткий.

МА как поддержка/сопротивление (увеличен период)

Рисунок 4. Средняя с большим периодом (20)

Например, 17 февраля в 4 часа видно, что красная кривая даст сигнал на покупку, и мы получим убыток, тогда как оранжевая даст сигнал на продажу. Но зато в красной можно использовать сигналы в 8 часов, в 10 и в 15, наращивая позицию.

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


Наклон

Чем круче наклон линии, тем быстрее идёт цена и тем больше вероятность продолжения тенденции на следующей свече.

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

Код главного цикла в файле MA-Slope.mq5  выглядит следующим образом:

//--- main cycle
  for(i=start+SlopeShift*2; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]);

    //---

    if(
      slopeIndex<0

    )
     {
      SlopeDownBuffer[i]=slopeIndex;
     }
    else
      if(
        slopeIndex>0
      )
       {
        SlopeUpBuffer[i]=slopeIndex;
       }
   } // main cycle

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

Полученную кривую мне показалось нагляднее всего оформить в виде гистограммы. Результат представлен на следующем рисунке:

МА — гистограмма наклона

Рисунок 5. Гистограмма, отображающая наклон кривой

Вот здесь получается для меня довольно интересная картинка.

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

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

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

Пробуем (МА-Slope-Index-First.mq5)... Код:

//--- main cycle
  for(i=start+SlopeShift*3; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]+Point()/100)
               /(extMAData[i-2]-extMAData[i-2-SlopeShift]+Point()/100);
    //---

    if(
      slopeIndex<0
    )
     {
      SlopeDownBuffer[i]=slopeIndex;
     }
    else
      if(
        slopeIndex>0
      )
       {
        SlopeUpBuffer[i]=slopeIndex;
       }
   } // main cycle

Добавление малой величины (Point()/100) к делимому и делителю не очень сильно меняет результат, но позволяет избежать ошибки деления на 0.

Картинка получается вот такой:

MA — Относительный наклон

Рисунок 6. Относительный индекс наклона средней

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

МА — относительный индекс, сдвинуто влево

Рисунок 7. Относительный индекс наклона средней (сдвинуто влево)

Рисунок 7 очень наглядно показывает, как пиковые значения обозначают границы довольно большого движения. И разница пиковых величин с остальным массивом данных весьма велика. И то, что "пики" так отличаются по величине между собой, и то, что разница между пиками и остальными данными настолько велика, подталкивает к следующему шагу. Поскольку смена направления видна настолько чётко, я не вижу особого смысла присматриваться к гистограммам относительного индекса наклона как таковым. Можно просто еще сильнее "загрубить" вывод, сделав его бинарным. Например, так (МА-Slope-Index-Bin.mq5):

//--- main cycle
  for(i=start+SlopeShift*3; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]+Point()/100)
               /(extMAData[i-2]-extMAData[i-2-SlopeShift]+Point()/100);
    //---

    if(
      slopeIndex<=-SlopeThreshold
    )
     {
      SlopeDownBuffer[i]=-1;
     }
    else
      if(
        slopeIndex>=SlopeThreshold
      )
       {
        SlopeUpBuffer[i]=1;
       }
   } // Main cycle


Здесь SlopeThreshold — пороговое значение высоты бара предыдущей диаграммы, при котором подаётся сигнал. На рисунке значение этого параметра равно 5.

Относительный наклон МА — бинарный вариант

Рисунок 8. Относительный индекс наклона средней — бинарный вариант. SlopeThreshold=5.

И еще один рисунок, где SlopeThreshold=15

Относительный индекс наклона, SlopeThreshold=15

Рисунок 9. Относительный индекс наклона средней — бинарный вариант. SlopeThreshold=15.

Определённо эти полосочки заслуживают внимательного разглядывания!

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

Думаю, понятно, что бинарные полоски на гистограмме легко можно заменить стрелками — по аналогии с предыдущими индикаторами.


Каналы на основе одной скользящей средней

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

Первый вариант — очень простой, так как для него кроме стандартного индикатора МА ничего не требуется. Просто при добавлении индикатора на график надо добавить уровни. Единственное "но" состоит в том, что для каждого временного интервала эти уровни должны быть свои. Чтобы не вводить эти уровни каждый раз при переключении интервала, я собрал их в единый "пакет". Для японской йены получилось следующее:

Simple channel — MA

Рисунок 10. Список уровней канала

Итоговая картинка на часах выглядит так:

Канал из уровней

Рисунок 11. Внешний вид уровней (H1)

В данном случае уровни настроены на отбой. То есть если свеча коснулась уровня и отскочила от него (или подошла достаточно близко) — входим против тренда. Так, данный канал показывает, что 22 февраля нужно было входить в продажи. Ордер можно ставить на середину сигнальной свечи или в конце (в данном случае, если вход по отбою, ордер можно было бы поставить на low сигнальной свечи, в районе 115.100, а стоп — в район 115.265). Цель-минимум — касание средней. Цель-максимум — касание противоположной границы этого же канала.

Однако в данном случае можно было играть и на пробой узкого канала. Например, 22 февраля 9-часовая свеча закрылась выше границы узкого канала. При этом выше средней закрылись уже две свечи, направленные вверх, а черная свеча между ними не вышла за пределы нижней границы. И при этом наклон МА явно уменьшается (если глянуть на график с установленным MA-Slope, это будет видно довольно четко). Это всё в совокупности вполне может быть сигналом на покупку. Стоп — например, в район 114.570. Точку выхода можно посчитать с помощью уровней, скажем, разместить её в районе 115.230. Или тянуть трал по свечам. Или использовать любой другой метод, который Вам нравится.

Обратите внимание, что на данном периоде видны только два канала: самый внутренний и тот, что чуть побольше. Если же переключиться на фрейм повыше, скажем, на D1, то канал на +-50 практически скроется, зато рабочими могут быть +-300 и +-1500. При этом иногда может быть виден и месячный канал, и кому-то он даже может давать сигналы, но основными будут всё же те, что видны лучше всего.

Множественные каналы (D1)

Рисунок 12. Внешний вид уровней (D1)

Аналогичную картинку будет видно и на недельном/месячном масштабе. Четвёртый канал подстроен именно под них, а третий может быть внутренним вспомогательным.

Самый внутренний канал подстроен под М1-М15.

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

Измерение размера канала

Рисунок 13. Измерение волатильности канала (D1)

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


Каналы на основе двух средних (ATR3x5)

Вышеприведённые каналы хороши, но у них есть пара недостатков.

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

Второй — уровни не хранятся в буферах, соответственно, программно использовать их будет не совсем тривиальной задачей.

Этих недостатков лишен канал на основе скользящих средних и ATR. Суть проста: берём два индикатора скользящих средних с периодом 3. Один применяем к максимумам (high), другой — к минимумам (low). И сдвигаем полученные линии на расстояние 5-периодного ATR в соответствующую сторону (нижний — вниз, верхний — вверх).

Всё, канал готов! Идеально подстраивается под любой инструмент, работает, в основном, на отбой, так как пробои крайне редки. В моей реализации я приделал стрелки, показывающие касание стенок канала.

//--- main cycle   for(i=start+3; i<rates_total && !IsStopped(); i++)    {     ArrowDownBuffer[i]=0;     ArrowUpBuffer[i]=0;     //---     MAUpBuffer[i]=extMAUpData[i]+extATRData[i]*DistanceCoefficient;     MADownBuffer[i]=extMADownData[i]-extATRData[i]*DistanceCoefficient;     if(       (high[i-1]>=MAUpBuffer[i-1]        && close[i-1]<MAUpBuffer[i-1])       ||(         close[i-2]>MAUpBuffer[i-2]         && close[i-1]<MAUpBuffer[i-1]       )     )      {       ArrowDownBuffer[i]=high[i]+extATRData[i]/5;      }     else       if(         (low[i-1]<=MADownBuffer[i-1]          && close[i-1]>MADownBuffer[i-1])         ||(           close[i-2]<MADownBuffer[i-2]           &&close[i-1]>MADownBuffer[i-1]         )       )        {         ArrowUpBuffer[i]=low[i]-extATRData[i]/5;        }    }// main cycle

Здесь DistanceCoefficient — параметр индикатора, который позволяет менять расстояние до стенок канала, если кому-то это необходимо, подстраивая индикатор к конкретным условиям. Может быть любым дробным числом, но, как правило, больше 2 выставлять нет смысла, поскольку в этом случае стрелки почти совсем пропадают, соответственно, сделок не происходит.

ART3x5 канал

Рисунок 14. Канал ATR3x5

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

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


Несколько индикаторов с разным периодом

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

Итак, создадим график, на котором будут отображаться две кривые, с периодами 5 и 8 баров. Периоды взяты достаточно произвольно, в данном случае — из ряда Фибоначчи. Важно, чтобы они были разными, описывая одну "быструю" линию и одну "медленную".

Одновременно две скользящие средние

Рисунок 15. Две скользящие средние на одном графике

К тем возможностям, что мы уже исследовали, добавляется возможность наблюдать взаимное расположение кривых, их сонаправленность (или — наоборот, дивергенцию, то есть "расхождение" направлений). Также появляется расстояние между МА.

Каждый из этих параметров может усилить или ослабить какие-то признаки движения, показанные каждой из кривых, а также — дать самостоятельные сигналы для входа.


Взаимное расположение. Пересечение средних

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

Соответственно, если быстрая — ниже медленной, вероятнее всего мы наблюдаем "глобальный" для данного временного интервала тренд вниз, и вероятность, что каждая следующая свеча будет падающей, сильно повышается, до тех пор, пока не дойдём до пика...

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

Попробуем написать индикатор, реагирующий на пересечение средних. И сразу учесть флеты, чтобы было меньше ложных входов. Сделать это можно, например, учитывая размер наклона быстрой средней. И тогда можем получить следующий код для поиска сигналов (MA2-Breaking):

//--- main cycle   for(i=start+3+SlopeShift*2; i<rates_total && !IsStopped(); i++)    {     ArrowDownBuffer[i]=0;     ArrowUpBuffer[i]=0;     //---     if(       extMAFastData[i-1]<extMASlowData[i-1]       && extMAFastData[i-2]>=extMASlowData[i-2]       && MASlope(extMAFastData,i-1)<-SlopeThreshold       && MASlope(extMASlowData,i-1)<SlopeThreshold/SlowDelimiter     )      {       ArrowDownBuffer[i]=high[i]+extATRData[i]/3;      }     else       if(         extMAFastData[i-1]>extMASlowData[i-1]         && extMAFastData[i-2]<=extMASlowData[i-2]         && MASlope(extMAFastData,i-1)>SlopeThreshold         && MASlope(extMASlowData,i-1)>-SlopeThreshold/SlowDelimiter       )        {         ArrowUpBuffer[i]=low[i]-extATRData[i]/3;        }    } // main cycle

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

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

SlowDelimiter — делитель порога наклона медленной средней. Иногда бывает очень хороший сигнал, когда быстрая средняя уже наклонена вниз, а медленная при этом еще не развернулась, однако уже на подходе к этому. То есть запись

MASlope(extMASlowData,i-1)>-SlopeThreshold/SlowDelimiter

означает следующее: наклон медленной средней может быть либо совсем небольшим отрицательным (направленным вниз, но не сильно), либо нулевым, либо положительным, но никак не резко отрицательным.

Если использовать этот индикатор в "чистом" виде, параметры порога и делителя нужно подбирать для каждого инструмента и каждого таймфрейма отдельно. Так, для USDJPY на временном интервале H1 при значениях SlopeTreshold=0.017 и SlowDelimiter=5 получилось следующее:

Сигналы пересечения МА с учетом наклона

Рисунок 16. Сигналы пересечения средних с учетом наклона

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

И еще картинка — тот же график при ближайшем рассмотрении (большем масштабе).

Пересечение средних (приближено)

Рисунок 17. Пересечение средних с учётом наклона (приближено)

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

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

Пересечение средних — продолжение тенденции

Рисунок 18. Сигналы пересечения: продолжение тенденции.


Заключение

В этом месте я прервусь. Мне еще есть, что сказать по этому поводу, но, пожалуй, это будет в другой статье.

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

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

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

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

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

Пусть профиты будут вашими спутниками.

Прикрепленные файлы |
jx-Breaking.mq5 (5.56 KB)
h9-Support.mq5 (5.22 KB)
lw-Slope.mq5 (4.66 KB)
ATR3x5.mq5 (7.34 KB)
wr2-Crossing.mq5 (6.5 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (3)
Verner999
Verner999 | 28 мар. 2022 в 21:35

Попробовал поэкспериментировать с Вашим индикатором МА-Slope-Index-Bin.mq5. Заметил, что он даже на участках, где существует явно выраженный нисходящий тренд, выдаёт гораздо больше положительных значений, чем отрицательных. Сначала подумал, что проблема в том, что я использую большие значения МА, в силу чего МА получается очень пологой и используемое Вами добавление к числителю и знаменателю малой величины Point()/100, дабы избежать деления на ноль, начинает вносить существенные искажения. Попробовал уменьшить эту величину таким вот образом:

    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]+Point()/100*MABars)
               /(extMAData[i-2]-extMAData[i-2-SlopeShift]+Point()/100*MABars);

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

Oleh Fedorov
Oleh Fedorov | 6 апр. 2022 в 07:08
Verner999 #:

Попробовал поэкспериментировать с Вашим индикатором МА-Slope-Index-Bin.mq5. Заметил, что он даже на участках, где существует явно выраженный нисходящий тренд, выдаёт гораздо больше положительных значений, чем отрицательных. Сначала подумал, что проблема в том, что я использую большие значения МА, в силу чего МА получается очень пологой и используемое Вами добавление к числителю и знаменателю малой величины Point()/100, дабы избежать деления на ноль, начинает вносить существенные искажения. Попробовал уменьшить эту величину таким вот образом:

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

В данном случае очевидное (для меня) применение будет таким: положительное значение - просто резкое увеличение наклона (в ту же сторону), отрицательное - резкая смена направления.

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

Поскольку мне нравятся уровни, я просто наблюдаю, как после резкого скачка наклона цена ведёт себя, скажем, на уровнях Мюррея или Ганна (напомню, разница в том, что Мюррей предлагал значимые интервалы делить на 8, а Ганн - пополам или на 3 - в зависимости от остальных привходящих). Это я к примеру, отлично подходят и пивоты, и фибы... Главное - если я вижу, что резко поменялся наклон на уровне - могу предположить разворот.

Oleh Fedorov
Oleh Fedorov | 6 апр. 2022 в 08:30
Применение бинарного индикатора наклона (+уровни)

Добавлю рисунок для пояснения предыдущей мысли :-)

Сиреневые линии - это время экстремумов, по которым строились салатные уровни (просто разделил интервал пополам и отложил вверх и вниз по два интервала (+-100% и +-200%).

Дальше, 28.01.2022 пришел сигнал о резком изменении наклона. Видим, что основное направление наклона - вверх (или по основному индикатору наклона [нижняя диаграмма], либо по самой MA-шке)... При этом цена за этот день подошла к диагонали уровней и, по сути, отскочила от неё. Цена находится над кривой MA. Основной тренд - вверх, но отскок от диагонали предполагает коррекцию. Возможные варианты трейда:

  • либо по открытию следующей свечи - вниз со стопом по максимуму текущей свечи и тейком в районе кривой (MA) или уровня (1/2);
  • либо дождаться касания кривой (и уровня) - и дальше - вверх со стопом ниже 24.01.2022 (113.469 по моим данным).
Следующий сигнал - 04.03.2022. Резкий рост наклона в "основном" направлении, наклон - всё еще вверх, и мы видим, что цена долго была в диапазоне 1/2-1. При этом цена закрытия ни разу не пробила уровень 1/2. Решение - трейд вверх, по открытию следующей свечи. Стоп - ниже 1/2, тейк - либо на +1/2, либо не ставить и выходить, скажем, по тралу (один из моих любимых - по фракталам)...
Как и зачем разрабатывать собственную систему для алгоритмической торговли Как и зачем разрабатывать собственную систему для алгоритмической торговли
В этой статье мы рассмотрим основы языка программирования MQL. Цель статьи — помочь начинающим программистам разработать собственную систему алгоритмической торговли (торгового советника).
Математика в трейдинге: Коэффициенты Шарпа и Сортино Математика в трейдинге: Коэффициенты Шарпа и Сортино
Доходность является самым очевидным показателем, который используют инвесторы и начинающие трейдеры для анализа эффективности торговли. Профессиональные трейдеры пользуются более надежными инструментами для анализа стратегии, среди них — коэффициенты Шарпа и Сортино.
Как разрабатывать системы на основе скользящих средних Как разрабатывать системы на основе скользящих средних
Есть множество различных способов для фильтрации сигналов, генерируемых какой-либо стратегией. Вероятно, простейший из них — это использование скользящей средней. Об этом мы и поговорим в этой статье.
Графика в библиотеке DoEasy (Часть 98): Перемещаем опорные точки расширенных стандартных графических объектов Графика в библиотеке DoEasy (Часть 98): Перемещаем опорные точки расширенных стандартных графических объектов
В статье продолжим развитие расширенных стандартных графических объектов, и создадим функционал перемещения опорных точек составных графических объектов при помощи контрольных точек управления координатами опорных точек графического объекта.