В АД4 в какой-то из версии терминала внесли эту проверку на название ряда и некоторые (малочисленное кол-во) индикаторов могут выдать такую ошибку. Исправляется это легко.
Ищем
берем из него наименование в ".....", ниже по коду для нашего случая это Input1.
Здесь же его заменяем на Input
а в самой первой строке после
дописываем (в нашем случае при наименовании равном Input1)
в ином заменяем Input1 на ранее взятое наименование ряда.
и далее код самого алгоритма работы индикатора можно не проверять, т.к. уже должно компилироваться.
В итоге для EWO поправленный код токой:
Код: Выделить всё
function Initialize()
{
//SRR_ELLIOT_WAVE_OSCILLATOR_INDICATOR_V1.02
//Coded for AD 4.0 by SRR (aka Indigo-On), 2017-2018
//Индикатор Осциллятор Эллиота - обычная 34-периодная простая скользящая
//средняя, взятая от 5-периодной SMA, отображаемая как гистограмма выше
//или ниже линии нуля (обычно он называется "5/34 oscillator).
//Подсмотрено на MQL5
//С 1 рядом данных
//
//v1.02 - версия подготовленная для публикации.
//v1.01 - изменена цветовая шкала раскраски гистограммы
// (приближена к индикатору SRR_ENTROPY_V1).
//v1.00 - первая тестовая версия.
//Параметры основного индикатора #1
//Обязательные параметры:
IndicatorName = "SRR_EWO_V1"; //название индикатора
PriceStudy = false; //рисовать в отдельной области
//Дополнительные параметры:
AddParameter("FastPeriod", 5); //период быстрой SMA (значение по умолчанию = 5)
AddParameter("SlowPeriod", 34); //период медленной SMA (значение по умолчанию = 34)
//Входной ряд типа Candle
AddInput("Input", Inputs.Candle);
//Инициализация линии #1 индикатора - формируем ряд данных EWO
AddSeries("EWO", DrawAs.Custom, Color.Silver, AxisType.ZeroBased, true);
//Рисуем линии уровня индикатора
AddLevel(0.0, Color.Silver, LineStyles.Solid, 1, "EWO");
}
function Evaluate()
{
var Input1 = Input;
///////////////////////////////////////////////////////////
/// Расчет значений индикатора
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
/// Индикатор ELLIOT WAVE OSCILLATOR
/// Расчет значений ряда данных EWO
///////////////////////////////////////////////////////////
//Расчет осциллятора Эллиота
//проверить на достаточность исходных данных
if (CurrentIndex > 0)
EWO = SMA(LIB.MID(Input1), FastPeriod)[0] - SMA(LIB.MID(Input1), SlowPeriod)[0];
else
EWO = 0.0;
///////////////////////////////////////////////////////////
/// Вывод значений индикатора EWO на экран
///////////////////////////////////////////////////////////
if (EWO[0] > 0.0)
{
if (EWO[0] > EWO[-1])
EWO.DrawHistogram(Color.Teal);
if (EWO[0] < EWO[-1])
EWO.DrawHistogram(Color.Blue);
}
else
if (EWO[0] < 0.0)
{
if (EWO[0] < EWO[-1])
EWO.DrawHistogram(Color.Magenta);
if (EWO[0] > EWO[-1])
EWO.DrawHistogram(Color.Purple);
}
else
EWO.DrawHistogram(Color.Gray);
}