Скользящие средние с минимальным запаздыванием > HMA (Hull Moving Average) – скользящая средняя Халла

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

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

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

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

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

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

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

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

Сигналы:

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

Пример:

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


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

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

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];
}
никогда такого не было и вот опять

Аватара пользователя
Gluker
Сообщения: 12
Зарегистрирован: 31 мар 2016, 09:25
Благодарил (а): 9 раз
Поблагодарили: 1 раз

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

Непрочитанное сообщение Gluker » 14 апр 2016, 17:00

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

m4Dmitry
Сообщения: 65
Зарегистрирован: 21 май 2018, 22:04
Благодарил (а): 52 раза
Поблагодарили: 3 раза

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

Непрочитанное сообщение m4Dmitry » 30 июл 2018, 16:50

evge писал(а):Скользящая средняя Халла


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

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

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

Непрочитанное сообщение evge » 30 июл 2018, 17:38

Т.к. в коде жестко прописано рисовать каким цветом и какой толщиной:

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

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


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

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

     HMA.DrawLine();


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

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

m4Dmitry
Сообщения: 65
Зарегистрирован: 21 май 2018, 22:04
Благодарил (а): 52 раза
Поблагодарили: 3 раза

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

Непрочитанное сообщение m4Dmitry » 30 июл 2018, 17:41

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


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

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

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

Непрочитанное сообщение evge » 30 июл 2018, 18:42

HMA-Color-01.png
HMA-Color-01.png (34.53 КБ) 5678 просмотров


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

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];
}
никогда такого не было и вот опять

m4Dmitry
Сообщения: 65
Зарегистрирован: 21 май 2018, 22:04
Благодарил (а): 52 раза
Поблагодарили: 3 раза

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

Непрочитанное сообщение m4Dmitry » 30 июл 2018, 18:53

evge писал(а):HMA-Color-01.png


Спасибо :)


Вернуться в «Скользящие средние с минимальным запаздыванием»

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

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