Индикаторы: MACD с адаптивным определением ценовых экстремумов.

 

MACD с адаптивным определением ценовых экстремумов.:

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

Author: Петр

 

Мне понравилось, очень дельно . Роботом не исследовал ?

Скажем если взять часовой фрейм для определения тренда, а на пятиминутке искать возможности

войти с отката, используя твой индюк и ордера на пробой .

Может будет минимальное хотя бы торговое преимущество ? Скажем процента 3 ?

А то что то везде по нулям ((((((((((

 
rotty:

Мне понравилось, очень дельно . Роботом не исследовал ?

Как ТС на одном индикаторе - нет. Да и цели такой не стояло. А сам индикатор используется среди др. в рабочей ТС. Она - прибыльна.

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

Нет. Смысл индикатора как раз в отсутствии необходимости использования разных ТФ. ТС, где этот инд. используется, у меня на минутках. Младше ТФ нет.

Может будет минимальное хотя бы торговое преимущество ? Скажем процента 3 ?

А то что то везде по нулям ((((((((((

Повторюсь: это - индикатор, а не ТС.

 

Спасибо за индикатор!

Использовать его можно наверное по возвращению цены в канал, с фильтрацией по старшей машке.

Такое ощущение, что индикатор тупо не даёт ложных входов, аж не по себе становится :-)

 

Мне кажется, с помощью этого индикатора можно генерить сигналы двух типов  - разворотные, т.е. когда макд входит в канал из области перекупленности/перепроданности, а сигналы пробоя - когда он выходит из канала и становится цветным. Было бы логично использовать различную ширину канала для этих двух случаев. Я попытался на основе этого индикатора нарисовать стрелочки, как я это вижу. Прилепил рисовалку внизу :-) Кажется, получилось неплохо. Сигналы, конечно, надо фильтровать межушным нервным узлом :-) 

А вот код стрелкорисователя: 

//+------------------------------------------------------------------+
//|                                                        |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2010, Dserg "
#property  link      "http://www.metaquotes.net/"
//---- indicator settings
#property  indicator_chart_window
#property  indicator_buffers 4
#property indicator_color1 SkyBlue
#property indicator_color2 DarkOrange
#property indicator_color3 DeepSkyBlue
#property indicator_color4 HotPink
//---- buffers
double Up[];
double Dn[];
double StartUp[];
double StartDn[];
extern bool MAFilter=false;
extern int FilterMA = 89;
// входные параметры
   // MACD
int FastMA=12; // период быстрой EMA
int SlowMA=26; // период медленной EMA
   // волатильность
int Source=1; // источник: 0 - объем, 1 - ATR, 2 - ст.девиация
int SourcePeriod=5; // период источника
      // сигнальная
double FrontPeriod=1; // период сглаживания фронта; м.б. <1
double BackPeriod=444; // период сглаживания затухания; м.б. <1
   // уровни ПК/ПП
extern double xVol1=0.5;
extern double xVol2=0.3;
double Sens=0; // порог чувствительности в пп. или в тиках (для объема)
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 3additional buffers are used for counting.
   
//---- drawing settings
   SetIndexStyle(0,DRAW_ARROW,0,2);
   SetIndexBuffer(0, Up);      
   SetIndexArrow(0, 233);        
   SetIndexStyle(1,DRAW_ARROW,0,2);
   SetIndexBuffer(1, Dn);      
   SetIndexArrow(1, 234);        
   SetIndexStyle(2,DRAW_ARROW,0,2);
   SetIndexBuffer(2, StartUp);      
   SetIndexArrow(2, 233);        // стрелка для бай
   SetIndexStyle(3,DRAW_ARROW,0,2);
   SetIndexBuffer(3, StartDn);      
   SetIndexArrow(3, 234);        // стрелка для селл
   SetIndexEmptyValue(Up,0.0);   
   SetIndexEmptyValue(Dn,0.0);   
   SetIndexEmptyValue(StartUp,0.0);   
   SetIndexEmptyValue(StartDn,0.0);   
   return(0);
  } 
int start()
  {
      int counted_bars = IndicatorCounted(); 
 
      if (counted_bars < 0) return(-1); 
      if (counted_bars > 0) counted_bars--;
      int loopbegin = Bars - counted_bars + 50;
 
      int i;
      
      for(i = loopbegin; i >= 0; i--)
      { 
        double m0 = iMA(NULL,0,FilterMA,0,MODE_EMA,PRICE_CLOSE,i+1);
        double m1 = iMA(NULL,0,FilterMA,0,MODE_EMA,PRICE_CLOSE,i+2);
        double macd00 = iCustom(NULL,0,"_MACD_Xtr",FastMA,SlowMA,Source,SourcePeriod,BackPeriod,xVol1,Sens, 0,i+1);
        double macd10 = iCustom(NULL,0,"_MACD_Xtr",FastMA,SlowMA,Source,SourcePeriod,BackPeriod,xVol1,Sens, 0,i+2);
        double h00 = iCustom(NULL,0,"_MACD_Xtr",FastMA,SlowMA,Source,SourcePeriod,BackPeriod,xVol1,Sens, 1,i+1);
        double h10 = iCustom(NULL,0,"_MACD_Xtr",FastMA,SlowMA,Source,SourcePeriod,BackPeriod,xVol1,Sens, 1,i+2);
        double l00 = iCustom(NULL,0,"_MACD_Xtr",FastMA,SlowMA,Source,SourcePeriod,BackPeriod,xVol1,Sens, 2,i+1);
        double l10 = iCustom(NULL,0,"_MACD_Xtr",FastMA,SlowMA,Source,SourcePeriod,BackPeriod,xVol1,Sens, 2,i+2);
        
        double macd01 = iCustom(NULL,0,"_MACD_Xtr",FastMA,SlowMA,Source,SourcePeriod,BackPeriod,xVol2,Sens, 0,i+1);
        double macd11 = iCustom(NULL,0,"_MACD_Xtr",FastMA,SlowMA,Source,SourcePeriod,BackPeriod,xVol2,Sens, 0,i+2);
        double h01 = iCustom(NULL,0,"_MACD_Xtr",FastMA,SlowMA,Source,SourcePeriod,BackPeriod,xVol2,Sens, 1,i+1);
        double h11 = iCustom(NULL,0,"_MACD_Xtr",FastMA,SlowMA,Source,SourcePeriod,BackPeriod,xVol2,Sens, 1,i+2);
        double l01 = iCustom(NULL,0,"_MACD_Xtr",FastMA,SlowMA,Source,SourcePeriod,BackPeriod,xVol2,Sens, 2,i+1);
        double l11 = iCustom(NULL,0,"_MACD_Xtr",FastMA,SlowMA,Source,SourcePeriod,BackPeriod,xVol2,Sens, 2,i+2);
        //разворотные сигналы
        if(macd10<l10 && macd00>l00) {
            if (m0>m1 || !MAFilter ) {
               StartUp[i] = Low[i]-50*Point; 
            }
        }
        if(macd10>h10 && macd00<h00) {
            if (m0<m1 || !MAFilter ) {
               StartDn[i] = High[i]+50*Point; 
            }
        }
        //пробойные сигналы
        if(macd11<h11 && macd01>h01) {
            if (m0>m1 || !MAFilter ) {
               Up[i] = Low[i]-50*Point; 
            }
        }
        if(macd11>l11 && macd01<l01) {
            if (m0<m1 || !MAFilter ) {
               Dn[i] = High[i]+50*Point; 
            }
        }
      }
      
      return(0);
  }
//+------------------------------------------------------------------+
 

Спасибо! Очень интересно!

 

Dserg писал(а):

код стрелкорисователя

не рисуется. скачал и 2 индюка с темы и код, сунул код в график - ничего

 

Большое спасибо, 10!

 

Svinozavr - большой респект. Великолепная вещь. 10 баллов это ничего за такую работу.

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

Для тех, кто в этом разбирается - не проходите мимо. Действительно ВЕЩЬ

Привожу сравнительный рисунок двух МАСАДов с линиями Advanca и линиями Svinozavrа (нижнее окно индикатора). Настройки идентичные, ну разве что МАСАД с линиями Advanca, построен на simple average и не использует стандартный алгоритм iMACD

Если можно, маленькое предложение по улучшению линий.

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

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

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

Но это мое субъективное мнение. Это только предложение.

В любом случае, большое спасибо за качественную работу.

 
asystem2000:

Если можно, маленькое предложение по улучшению линий.

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

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

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

Но это мое субъективное мнение. Это только предложение.

В любом случае, большое спасибо за качественную работу.

Я пробовал так. Или примерно так. Показалось бесполезным. Определял к какому (вверх/вниз) относится рост ATR и влиял на ПК или ПП.

Был вариант с задержкой на 1 импульс ATR (он виден по вендору волатильности - это когда ATR тащит вверх MA) назад для противоположного знака MACD. Это уже поинтереснее в плане коррекций, но тут уже получается другой по применению индикатор - для импульса/коррекции.

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

Впрочем, это смотря кто какие сигналы хочет уловить.

 

Было бы вообще прекрасно если бы два индикатора совместить в один, просто для удобства, а может и для скорости.

Причина обращения: