Пользовательские индикаторы > RangeChart - усредненное движение цены с учетом волатильности

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

RangeChart - усредненное движение цены с учетом волатильности

Непрочитанное сообщение evge » 31 авг 2017, 13:48

RangeChart - усредненное движение цены с учетом волатильности

Параметры

Period - период для расчета средних

Примеры работы

RangeChart-01.png
RangeChart-01.png (40.92 КБ) 52996 просмотров

RangeChart-02.png
RangeChart-02.png (43.18 КБ) 52996 просмотров


Исходный текст индикатора

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

function Initialize()
{
  IndicatorName = "RangeChart";
  PriceStudy = false;
  AddInput("Input", Inputs.Candle);         
  AddParameter("Period", 13);                   
  AddGlobalVariable("SUM", Types.Double, 0.0);         
  AddGlobalVariable("SUMR", Types.Double, 0.0);         
  AddSeries("Med", DrawAs.Line, Color.Red, false);   
  AddSeries("Range", DrawAs.Line, Color.Black, false);   
 
  AddSeries("ROpen", DrawAs.Custom, Color.Green);   
  AddSeries("RHigh", DrawAs.Custom, Color.Black);   
  AddSeries("RLow", DrawAs.Custom, Color.Black);   
  AddSeries("RClose", DrawAs.Custom, Color.Red);   
  AddSeries("Zero", DrawAs.Line, Color.Black);   
}

function Evaluate()
{

// evge 31.08.2017 http://alfadirect4.ru

var I = Input;

Zero = 0.0;

double LRange = 0.0;

if (CurrentIndex > 0)
   Range = Math.Max( I.Close[0] - I.Close[1], I.High[0] - I.Low[0] );
else
   Range = 0;

if ( CurrentIndex < Period )
{
   SUM += (I.High[0] + I.Low[0]) * 0.5;     
   Med = SUM / (CurrentIndex + 1);     
   SUMR += Range;
   LRange = SUMR / (CurrentIndex + 1) / Period;
}
else
{
   SUM += (I.High[0] + I.Low[0]) * 0.5 - (I.High[Period] + I.Low[Period]) * 0.5;     
   Med = SUM / Period;   
    SUMR += Range[0] - Range[Period];
   LRange = SUMR / Period / Period;
}

if (LRange != 0.0) {
   ROpen = ( I.Open[0] - Med[0] ) / LRange;
   RHigh = ( I.High[0] - Med[0] ) / LRange;
   RLow = ( I.Low[0] - Med[0] ) / LRange;
   RClose = ( I.Close[0] - Med[0] ) / LRange;
}

if (RClose > ROpen)
{
   ROpen.DrawHistogram(RClose);
   RHigh.DrawVertical(RClose);
   RLow.DrawVertical(ROpen);
}
else
{
   if (RClose[0] == ROpen[0]) RClose.DrawDash(Colors["RHigh"], LineStyles.Solid, 1,0);
   else RClose.DrawHistogram(ROpen);
   RHigh.DrawVertical(ROpen);
   RLow.DrawVertical(RClose);
}
 
}


Скачать исходный текст

RangeChart-2021-03-24.zip
скорректированная версия для работы в последних версиях терминала
(118.66 КБ) 2095 скачиваний


RangeChart.zip
(118.65 КБ) 2458 скачиваний
никогда такого не было и вот опять

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

Re: RangeChart - усредненное движение цены с учетом волатильности

Непрочитанное сообщение evge » 31 авг 2017, 18:06

Ради спортивного интереса дорисовал индикатор до свечек, похожих на настоящие :)
Заодно будет примером на будущее как нарисовать программно свечки.

RangeChart-03.png
RangeChart-03.png (41.32 КБ) 52975 просмотров


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

function Initialize()
{
  IndicatorName = "RangeChart";
  PriceStudy = false;
  AddInput("Input", Inputs.Candle);         
  AddParameter("Period", 13);                   
  AddGlobalVariable("SUM", Types.Double, 0.0);         
  AddGlobalVariable("SUMR", Types.Double, 0.0);         
  AddSeries("Med", DrawAs.Line, Color.Red, false);   
  AddSeries("Range", DrawAs.Line, Color.Black, false);   
 
  AddSeries("ROpen", DrawAs.Custom, Color.Green);   
  AddSeries("RHigh", DrawAs.Custom, Color.Black);   
  AddSeries("RLow", DrawAs.Custom, Color.Black);   
  AddSeries("RClose", DrawAs.Custom, Color.Red);   
  AddSeries("Zero", DrawAs.Line, Color.Black);   
}

function Evaluate()
{

// evge 31.08.2017 http://alfadirect4.ru

var I = Input;

Zero = 0.0;

double LRange = 0.0;

if (CurrentIndex > 0)
   Range = Math.Max( I.Close[0] - I.Close[1], I.High[0] - I.Low[0] );
else
   Range = 0;

if ( CurrentIndex < Period )
{
   SUM += (I.High[0] + I.Low[0]) * 0.5;     
   Med = SUM / (CurrentIndex + 1);     
   SUMR += Range;
   LRange = SUMR / (CurrentIndex + 1) / Period;
}
else
{
   SUM += (I.High[0] + I.Low[0]) * 0.5 - (I.High[Period] + I.Low[Period]) * 0.5;     
   Med = SUM / Period;   
    SUMR += Range[0] - Range[Period];
   LRange = SUMR / Period / Period;
}

if (LRange != 0.0) {
   ROpen = ( I.Open[0] - Med[0] ) / LRange;
   RHigh = ( I.High[0] - Med[0] ) / LRange;
   RLow = ( I.Low[0] - Med[0] ) / LRange;
   RClose = ( I.Close[0] - Med[0] ) / LRange;
}

if (RClose > ROpen)
{
   ROpen.DrawHistogram(RClose);
   RHigh.DrawVertical(RClose);
   RLow.DrawVertical(ROpen);
}
else
{
   if (RClose[0] == ROpen[0]) RClose.DrawDash(Colors["RHigh"], LineStyles.Solid, 1,0);
   else RClose.DrawHistogram(ROpen);
   RHigh.DrawVertical(ROpen);
   RLow.DrawVertical(RClose);
}
 
}
никогда такого не было и вот опять

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

Re: RangeChart - усредненное движение цены с учетом волатильности

Непрочитанное сообщение evge » 01 сен 2017, 09:00

Код индикатора в первом сообщении заменен.
никогда такого не было и вот опять

Dubrovskiy1971
Сообщения: 2
Зарегистрирован: 29 июн 2016, 20:58

Re: RangeChart - усредненное движение цены с учетом волатильности

Непрочитанное сообщение Dubrovskiy1971 » 24 мар 2021, 18:59

приветствую. но получается скомпилировать. пишет Название ряда индикатора должно быть input в строке 0

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

Re: RangeChart - усредненное движение цены с учетом волатильности

Непрочитанное сообщение evge » 24 мар 2021, 21:30

В более ранних версиях АД4 это работало, поменял заменил выше код, который будет работать и в старых и текущих версиях АД4
никогда такого не было и вот опять

Ilia
Сообщения: 2
Зарегистрирован: 19 окт 2021, 10:35

Re: RangeChart - усредненное движение цены с учетом волатильности

Непрочитанное сообщение Ilia » 06 ноя 2021, 22:24

Если смотреть усредненное движение по модулю, то поинформативнее было бы.

Mandarin84
Сообщения: 11
Зарегистрирован: 25 апр 2023, 18:12
Благодарил (а): 3 раза

Re: RangeChart - усредненное движение цены с учетом волатильности

Непрочитанное сообщение Mandarin84 » 10 окт 2023, 00:37

в интернете про него ничего нет
объясните пожалуйста как им пользоваться?
мне кажется в нем большой потенциал


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

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

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