Пользовательские индикаторы > BreakDayEMA - EMA с начала каждого дня

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

BreakDayEMA - EMA с начала каждого дня

Непрочитанное сообщение evge » 02 дек 2019, 06:48

Индикатор BreakDayEMA формирует экспоненциальную скользящую среднюю (EMA) с отсчетом от начала дня.
Если параметр Period больше количества баров от текущего бара до начала дня, то для периода EMA будет взято доступное кол-во баров.

Параметры

Period - период

Примеры

BreakDayEMA-01.png
BreakDayEMA-01.png (28.71 КБ) 10348 просмотров


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

function Initialize()
{
IndicatorName = "BreakDayEMA";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddSeries("ED", DrawAs.Custom, Color.Red);

AddParameter("Period", 10);
AddGlobalVariable("IDX", Types.Int, 0); //CurrentIndex start day
}

function Evaluate()
{
var I = Input;

if (BarDate(0) != BarDate(1)) IDX = CurrentIndex;
if (IDX == 0) return;

TA.Script.IndicatorResult E;

if (CurrentIndex - IDX + 1 >= Period)
E = EMA(I, Period);
else
E = EMA(I, CurrentIndex - IDX + 1);

ED = E[0];
if (CurrentIndex - IDX != 0) ED.DrawLine();

}


Скачать индикатор

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

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

Re: BreakDayEMA - EMA с начала каждого дня

Непрочитанное сообщение evge » 02 дек 2019, 06:55

Оптимизированная версия в 3 строки кода в Evaluate()

Результат тот же.

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

function Initialize()
{
IndicatorName = "BreakDayEMA";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddSeries("ED", DrawAs.Custom, Color.Red);

AddParameter("Period", 10);
AddGlobalVariable("IDX", Types.Int, 0); //CurrentIndex start day
}

function Evaluate()
{
if (BarDate(0) != BarDate(1)) IDX = CurrentIndex;
ED = EMA(Input, Math.Min(CurrentIndex - IDX + 1, Period))[0];
if (CurrentIndex - IDX != 0) ED.DrawLine();
}
никогда такого не было и вот опять


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

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

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