АмиБрокер. Подсчет волн 1-2-3

Модифицированный зигзагообразный индикатор «максимум-минимум», который основан на процентном изменении цены и измерении волатильности на основе ATR.

Here are all the parameters I use:

  • ZZPercent = 5: использованный процент зигзага (значение по умолчанию 5)
  • ATRPeriod = 5: период ретроспективного анализа ATR (по умолчанию 5)
  • ATRFactor = 1.5: коэффициент умножения ATR (по умолчанию 1,5)
  • zigZagColor = Color.DodgerBlue: цвет по умолчанию, используемый для зигзага
  • linewidth = 1: ширина линии зигзага
  • trend: тренд текущей зигзагообразной линии (1 = вверх, -1 = вниз)
  • lhb: последнее максимальное количество баров с момента последнего максимума колебания
  • uplineid: lимя последнего использованного идентификатора строки
  • llb: количество последних минимальных баров с момента последнего минимума колебания
  • downlineid: последнее использованное имя идентификатора нисходящей линии
  • hh: новый высокий максимум
  • ll: новый нижний минимум
  • HLPivot: уровень разворота high-low.

The 1-2-3 Wave Count

 

Формула индикатора The 1-2-3 Wave Count

ZZPercent = Param("ZZPercent", 5 );
ATRPeriod = Param("ATRPeriod", 5 );
ATRFactor = Param("ATRFactor", 1.5, 0, 5 );

HLPivot = ZZPercent * 0.01 + ATRFactor * ATR( ATRPeriod )/Close;

Ll = Low[ 0 ];
Hh = High[ 0 ];
Llb = Lhb = 0;

if( High[ 1 ] >= Hh )
{
  Hh = High[ 1 ];
  Lhb = trend = 1;
}
else
{
  Ll = Low[ 1 ];
  Llb = 1;
  trend = -1;
}

Line = Null;

for( i = 2; i < BarCount; i++ )
{
  if( trend > 0 )
  {
    if( High[ i ] >= Hh )
    {
      Hh = High[ i ];
      Lhb = i;
      Curline = LineArray( Llb, Ll, Lhb, Hh );
      Line = IIf( IsNull( CurLine ), Line, CurLine );
    }
    else
    if( Low[ i ] < Hh - Hh * HLPivot[ i ] )
    {
      Ll = Low[ i ];
      Llb = i;
      trend = -1;
      CurLine = LineArray( Lhb, Hh, Llb, Ll );
      Line = IIf( IsNull( CurLine ), Line, CurLine );
    }
 }
 else
 {
    if( Low[ i ] <= Ll )
    {
      Ll = Low[ i ];
      Llb = i;
      CurLine = LineArray( Lhb, Hh, Llb, Ll );
      Line = IIf( IsNull( CurLine ), Line, CurLine );
    }
    else
    if( High[ i ] > Ll + Ll * HLPivot[ i ] )
    {
      Hh = High[ i ];
      lhb = i;
      trend = 1;
      CurLine = LineArray( Llb, Ll, Lhb, Hh );
      Line = IIf( IsNull( CurLine ), Line, CurLine );
    }
  }
}

Plot( Line, "", colorBlueGrey, styleThick );
Plot( Close, Date()+ " Close", colorDefault, styleCandle );

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *