Общие вопросы по разработке > EMA от серии из другого индикатора

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
spekt
Сообщения: 12
Зарегистрирован: 15 фев 2019, 07:24

EMA от серии из другого индикатора

Непрочитанное сообщение spekt » 01 июн 2019, 21:08

Подскажите пожалуйста, как корректно получить в индикаторе EMA от серии из другого индикатора?

Я пробую вот так:

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

function Initialize()
{
// Область определения параметров индикатора

// Обязательные параметры:
   IndicatorName = "ADXS";   // Задайте название индикатора и сохраните с данным именем
   PriceStudy = false;   // Рисовать в области цены (true – да, false – нет)
   AddInput("Input", Inputs.Candle);   // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)
    AddSeries("DXP", DrawAs.Line, Color.Green);   // Задаем вид линии индикатора A
    AddSeries("DXN", DrawAs.Line, Color.Red);   // Задаем вид линии индикатора A
    AddSeries("DX", DrawAs.Line, Color.Blue);   // Задаем вид линии индикатора A

// Дополнительные параметры:
    AddParameter("Period", 48);   // Задаем имя изменяемого параметра и его значение
}

function Evaluate()
{
    var gDX=ADX(Input,Period);
    DXP = EMA(gDX["PosDI"],3);
    DXN = EMA(gDX["NegDI"],3);
    DX = gDX["ADX"];
}


Но компилятор ругается: Cannot implicitly convert type 'TA.Script.IndicatorResult' to 'TA.Script.XSeries'

spekt
Сообщения: 12
Зарегистрирован: 15 фев 2019, 07:24

Re: EMA от серии из другого индикатора

Непрочитанное сообщение spekt » 01 июн 2019, 21:24

Поправил на

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

function Initialize()
{
// Область определения параметров индикатора

// Обязательные параметры:
   IndicatorName = "ADXS";   // Задайте название индикатора и сохраните с данным именем
   PriceStudy = false;   // Рисовать в области цены (true – да, false – нет)
   AddInput("Input", Inputs.Candle);   // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)
    AddSeries("DXP", DrawAs.Line, Color.Green);   // Задаем вид линии индикатора A
    AddSeries("DXN", DrawAs.Line, Color.Red);   // Задаем вид линии индикатора A
    AddSeries("DX", DrawAs.Line, Color.Blue);   // Задаем вид линии индикатора A

// Дополнительные параметры:
    AddParameter("Period", 48);   // Задаем имя изменяемого параметра и его значение
}

function Evaluate()
{
    var gDX=ADX(Input,Period);
    DXP = EMA(gDX["PosDI"],10)[0];
    DXN = EMA(gDX["NegDI"],10)[0];
    DX = gDX["ADX"][0];
}


Скрипт скомпилировался, но результат явно не тот что должен быть. Кто-нибудь может подсказать в чем ошибка?

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

Re: EMA от серии из другого индикатора

Непрочитанное сообщение evge » 02 июн 2019, 12:03

Да, есть конечно мистика.

Берет всё равно серию ADX, даже если указывать PosDI и NegDI
В любом случае берет ADX. Поэтому у вас индикатор вернул 3 линии 2 из которых получились EMA(10) от ADX серии. Т.е. визуально как бы 2, но на самом деле это серия ADX и EMA от него EMA(ADX,10) - два раза.

Здесь вопрос тогда к альфа-директ разработчикам, явно есть проблема.
Ранее вроде бы было вообще невозможно сделать вызов индикатора от индикатора возвращающего несколько серий.
Сейчас всё компилируется и якобы передаем нужную серию. но на выходе получаем всё равно результат от самой первой серии индикатора (с несколькими сериями).

напишите на robot@alfadirect.ru или может здесь Дмитрий (oxi) ответит.
никогда такого не было и вот опять

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

Re: EMA от серии из другого индикатора

Непрочитанное сообщение evge » 02 июн 2019, 16:24

Способ решения задачи, через костыль конечно, есть. Это создать ещё два индикатора пользовательских, каждый из которых повторяет только один из рядов индикатора ADX, т.е. PosDI и NegDI. На выходе одна серия. Ваш индикатор уже строить по этим трем индикаторам.

Но конечно нужно это ... поправлять разработчику АД4 :)
никогда такого не было и вот опять

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

Re: EMA от серии из другого индикатора

Непрочитанное сообщение evge » 02 июн 2019, 17:04

Что интересно! Но не работает!

Создал 2 индикатора:

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

function Initialize()
{
IndicatorName = "PosDI";
PriceStudy = false;
AddInput("Input", Inputs.Candle);
AddSeries("PosDI", DrawAs.Line, Color.Green);
AddParameter("Period", 14);
}
function Evaluate()
{
PosDI = ADX(Input, Period)["PosDI"][0];
}


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

function Initialize()
{
IndicatorName = "NegDI";
PriceStudy = false;
AddInput("Input", Inputs.Candle);
AddSeries("NegDI", DrawAs.Line, Color.Red);
AddParameter("Period", 14);
}
function Evaluate()
{
NegDI = ADX(Input, Period)["NegDI"][0];
}


и теперь демонстрация что возвращают они без EMA:

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

function Initialize()
{
   IndicatorName = "ADXS";
   PriceStudy = false;
   AddInput("Input", Inputs.Candle);
   AddSeries("DXP", DrawAs.Line, Color.Green);
   AddSeries("DXN", DrawAs.Line, Color.Red);
   AddSeries("DX", DrawAs.Line, Color.Blue);
   
   AddParameter("Period", 48, 2);
}

function Evaluate()
{
    var gDX=ADX(Input,Period);   
    var gPos=MY.PosDI(Input,Period);
    var gNeg=MY.NegDI(Input,Period);
   
     DXP = gPos[0];
    DXN = gNeg[0];
    //DXP = EMA(gPos,10)[0];
    //DXN = EMA(gNeg,10)[0];
    DX = gDX[0];
}


ADXS-01.png
ADXS-01.png (35.15 КБ) 4974 просмотра


а теперь вариант с EMA

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

function Initialize()
{
   IndicatorName = "ADXS";
   PriceStudy = false;
   AddInput("Input", Inputs.Candle);
   AddSeries("DXP", DrawAs.Line, Color.Green);
   AddSeries("DXN", DrawAs.Line, Color.Red);
   AddSeries("DX", DrawAs.Line, Color.Blue);
   
   AddParameter("Period", 48, 2);
}

function Evaluate()
{
    var gDX=ADX(Input,Period);   
    var gPos=MY.PosDI(Input,Period);
    var gNeg=MY.NegDI(Input,Period);
   
    //DXP = gPos[0];
    //DXN = gNeg[0];
    DXP = EMA(gPos,10)[0];
    DXN = EMA(gNeg,10)[0];
    DX = gDX[0];
}


ADXS-02.png
ADXS-02.png (33.43 КБ) 4974 просмотра


если менять толщину линии для серии DXP и DXN ничего на графике не меняется, значит ничего не вычисляет EMA
никогда такого не было и вот опять

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

Re: EMA от серии из другого индикатора

Непрочитанное сообщение evge » 02 июн 2019, 17:05

Нужно ещё эксперимент провести на других индикаторах и на пользовательском ADX.
никогда такого не было и вот опять

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

Re: EMA от серии из другого индикатора

Непрочитанное сообщение evge » 02 июн 2019, 17:28

Проверил на встроенном индикаторе BB, результат тот же.
никогда такого не было и вот опять

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

Re: EMA от серии из другого индикатора

Непрочитанное сообщение evge » 05 июн 2019, 07:01

Здесь где-то явно проблема с входящими данными серий в индикаторах.

Индикатор от индикатора не будет работать если принимающий индикатор имеет на входе:

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

AddInput("Input", Inputs.Candle);


т.к. передать Candle от своего индикатора мы не можем, а может только конкретный ряд.

НО в примерах выше пользовательские индикаторы имеют на ВХОД Inputs.Candle, а на выходе у них одна единственная серия.

Непонятно, почему входящий ряд пользовательских индикаторов влияет на работу индикатора (SMA, EMA) от этих индикаторов.

На вход SMA и EMA ждут ряд.
На выходе пользовательских индикаторов тоже ряд.
никогда такого не было и вот опять


Вернуться в «Общие вопросы по разработке»

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

Сейчас этот форум просматривают: Google [Bot] и 10 гостей