Страница 1 из 1

HMA (Hull Moving Average) – скользящая средняя Халла

Добавлено: 06 фев 2016, 16:19
evge
Скользящая средняя Халла – индикатор, в котором осуществлена попытка минимизировать запаздывание при усреднении цен. Для этого считается разница между WMA с разными периодами, которые отличаются в 2 раза

Полученное значение добавляется к младшей WMA.

Итоговое значение получается сглаживанием MMA взвешенной средней с периодом √P

Типовые параметры:

Автор рассматривает значение P = 16, половина которого равна 8, а корень – 4.

Сигналы:

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

Пример:

HMA-00.png
HMA-00.png (27.29 КБ) 44114 просмотров


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

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

function Initialize()
{
IndicatorName = "HMA";                     
AddInput("Input", Inputs.Price);     
AddSeries("HMA", DrawAs.Custom, Color.Green);   
AddSeries("MMA", DrawAs.Line, Color.Green, false);   

PriceStudy = true;                           
AddParameter("P", 16, 2);   
}

function Evaluate()
{
// AlfaDirect. 2015. OX
// HMA (Hull Moving Average) - скользящая средняя Халла.
// http://alanhull.com/hull-moving-average

if ( CurrentIndex > P)
{
  double WMA1 = WMA(Input, 0.5*P)[0];
  double WMA2 = WMA(Input, P)[0];
  MMA = 2.0*WMA1 - WMA2;
  double P3 = Math.Truncate(Math.Sqrt(P));
  var sum = 0.0;
  var sumZ = 0.0;
  for (var i = 0; i < P3; i++)
  {
     sum = sum + MMA[-i]*(P3-i);
     sumZ = sumZ + (i+1);
  }
  HMA = sum/sumZ;
  if ( HMA > HMA[-1] )
     HMA.DrawLine(Color.LightBlue, Line.Solid, 1);
  else
     HMA.DrawLine(Color.Orange, Line.Solid, 1);
}
else
  HMA = Input[0];
}

Re: HMA (Hull Moving Average) – скользящая средняя Халла

Добавлено: 14 апр 2016, 17:00
Gluker
Чтобы AD не зависал при нечетных значениях периода, надо добавить приведение к целому в строке вычисления WMA1:
double WMA1 = WMA(Input, (int)(0.5*P))[0];

Re: HMA (Hull Moving Average) – скользящая средняя Халла

Добавлено: 30 июл 2018, 16:50
m4Dmitry
evge писал(а):Скользящая средняя Халла


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

Re: HMA (Hull Moving Average) – скользящая средняя Халла

Добавлено: 30 июл 2018, 17:38
evge
Т.к. в коде жестко прописано рисовать каким цветом и какой толщиной:

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

 
  if ( HMA > HMA[-1] )
     HMA.DrawLine(Color.LightBlue, Line.Solid, 1);
  else
     HMA.DrawLine(Color.Orange, Line.Solid, 1);


попробуйте заменить весь этот участок на

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

     HMA.DrawLine();


Но цвет будет 1 и толщину и этот цвет можно будет задать.

Ещё можно чуть дописать код и сделать задаваемые 2 цвета на понижение и повышение с возможностью настройки линии.

Re: HMA (Hull Moving Average) – скользящая средняя Халла

Добавлено: 30 июл 2018, 17:41
m4Dmitry
evge писал(а):Ещё можно чуть дописать код и сделать задаваемые 2 цвета на понижение и повышение с возможностью настройки линии.


А можно кинуть сюда код, с двумя цветами и возможностью редактирования линии?

Re: HMA (Hull Moving Average) – скользящая средняя Халла

Добавлено: 30 июл 2018, 18:42
evge
HMA-Color-01.png
HMA-Color-01.png (34.53 КБ) 42737 просмотров


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

function Initialize()
{
IndicatorName = "HMA";                     
AddInput("Input", Inputs.Price);     
AddSeries("U", DrawAs.Custom, Color.Green);   
AddSeries("D", DrawAs.Custom, Color.Red);   
AddSeries("HMA", DrawAs.Custom, Color.Green, false);   
AddSeries("MMA", DrawAs.Line, Color.Green, false);   

PriceStudy = true;                           
AddParameter("P", 16, 2);   
}

function Evaluate()
{
// AlfaDirect. 2015. OX
// HMA (Hull Moving Average) - скользящая средняя Халла.
// http://alanhull.com/hull-moving-average
//
// http://alfadirect4.ru

if ( CurrentIndex > P)
{
  double WMA1 = WMA(Input, 0.5*P)[0];
  double WMA2 = WMA(Input, P)[0];
  MMA = 2.0*WMA1 - WMA2;
  double P3 = Math.Truncate(Math.Sqrt(P));
  var sum = 0.0;
  var sumZ = 0.0;
  for (var i = 0; i < P3; i++)
  {
     sum = sum + MMA[-i]*(P3-i);
     sumZ = sumZ + (i+1);
  }
  HMA = sum/sumZ;
  if ( HMA > HMA[-1] )
  {
     U = HMA[0]; U[1] = HMA[1];
     U.DrawLine();
  }
  else
  {
     D = HMA[0]; D[1] = HMA[1];
     D.DrawLine();
  }
     
}
else
  HMA = Input[0];
}

Re: HMA (Hull Moving Average) – скользящая средняя Халла

Добавлено: 30 июл 2018, 18:53
m4Dmitry
evge писал(а):HMA-Color-01.png


Спасибо :)