Общие вопросы по разработке > CurrentIndex

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

Re: CurrentIndex

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

на следующем баре прошлый бар уже может стать не экстремумом

поставьте фракталы с периодом 1 и тоже самое будет :) погрешность 1 бар
никогда такого не было и вот опять

Аватара пользователя
Den
Сообщения: 363
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 16 раз
Поблагодарили: 4 раза

Re: CurrentIndex

Непрочитанное сообщение Den » 20 ноя 2017, 14:06

на следующем баре прошлый бар уже может стать не экстремумом


это точно, но в общем суть в том, что фракталы для моей цели не подойдут здесь.
Пробовал уже фракталы перед обращением :)
Вы просто гляньте на последний код COUNT что в нем не так? Может тут просто какая нибудь мелочь

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

function Initialize()
{
IndicatorName = "COUNT";
AddInput("Input1", Inputs.Candle);   
   
PriceStudy = true;   
AddSeries("H", DrawAs.Custom, Color.Coral);   
AddSeries("L", DrawAs.Custom, Color.LightGreen);   


}

function Evaluate()

{
var lastLVal = MY.COUNT_II(Input1).GetLastValues ("L", 1)[0];
var lastHVal = MY.COUNT_II(Input1).GetLastValues ("H", 1)[0];




if ( (lastHVal.X > lastLVal.X ? lastHVal.Y : lastLVal.Y) == (MY.COUNT_II(Input1).GetLastValues ("H", 1)[0].Y) )

if ((MY.COUNT_II(Input1).GetLastValues ("H", 2)[0].Y > MY.COUNT_II(Input1).GetLastValues ("H", 2)[1].Y))

if ((MY.COUNT_II(Input1).GetLastValues ("H", 1)[0].Y != MY.COUNT_II(Input1).GetLastValues ("L", 1)[0].Y))

 
   
          H[1] = MY.COUNT_II(Input1).GetLastValues ("H", 1)[0].Y;
         


             


if ( (lastHVal.X > lastLVal.X ? lastHVal.Y : lastLVal.Y) == (MY.COUNT_II(Input1).GetLastValues ("L", 1)[0].Y) )

if ((MY.COUNT_II(Input1).GetLastValues ("L", 2)[0].Y < MY.COUNT_II(Input1).GetLastValues ("L", 2)[1].Y))

if ((MY.COUNT_II(Input1).GetLastValues ("H", 1)[0].Y != MY.COUNT_II(Input1).GetLastValues ("L", 1)[0].Y))

     
 
         L[1] = MY.COUNT_II(Input1).GetLastValues ("L", 1)[0].Y;
       
     
H.DrawArrowDown(Color.Fuchsia, LineStyles.Solid, 10, Color.Fuchsia, 100);             
L.DrawArrowUp(Color.Lime, LineStyles.Solid, 10, Color.Lime, 100);
}

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

Re: CurrentIndex

Непрочитанное сообщение evge » 20 ноя 2017, 14:43

В нём всё так, разве что излишне повторяется вызов индикатра, хотя уже были заданы переменные нужные и код можно было сделать гораздо короче, но на работу это не влияет.

А не работают условия, взгляните на свой индикатор COUNT_II и попробуйте логически выполнить те условия, что прописаны в COUNT, они просто не выполняются никогда, т.к. в COUNT_II индикаторе на всех барах есть сигналы и H и L :)

чуть упрощенный код COUNT

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

function Initialize()
{
IndicatorName = "COUNT";
AddInput("Input1", Inputs.Candle);   
   
PriceStudy = true;   
AddSeries("H", DrawAs.Custom, Color.Coral);   
AddSeries("L", DrawAs.Custom, Color.LightGreen);   
}

function Evaluate()

{
var lastLVal = MY.COUNT_II(Input1).GetLastValues ("L", 1)[0];
var lastHVal = MY.COUNT_II(Input1).GetLastValues ("H", 1)[0];

if ((lastHVal.X > lastLVal.X ? lastHVal.Y : lastLVal.Y) == lastHVal.Y)
if (lastHVal.Y > MY.COUNT_II(Input1).GetLastValues ("H", 2)[1].Y)
if (lastHVal.Y != lastLVal.Y)
 
          H[1] = lastHVal.Y;
         
if ((lastHVal.X > lastLVal.X ? lastHVal.Y : lastLVal.Y) == lastLVal.Y)
if (lastLVal.Y < MY.COUNT_II(Input1).GetLastValues ("L", 2)[1].Y)
if (lastHVal.Y != lastLVal.Y)
 
         L[1] = lastLVal.Y;
             
H.DrawArrowDown(Color.Fuchsia, LineStyles.Solid, 10, Color.Fuchsia, 100);             
L.DrawArrowUp(Color.Lime, LineStyles.Solid, 10, Color.Lime, 100);
}


и самое главное "зачем это всё???"
никогда такого не было и вот опять

Аватара пользователя
Den
Сообщения: 363
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 16 раз
Поблагодарили: 4 раза

Re: CurrentIndex

Непрочитанное сообщение Den » 21 ноя 2017, 14:50

Евгений , не подскажете как можно вычесть L из Н ?
Вложения
jio.png
jio.png (7.35 КБ) 16511 просмотров

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

Re: CurrentIndex

Непрочитанное сообщение evge » 21 ноя 2017, 14:53

всего-навсего найти их по четко описанным условиям и сделать

никогда такого не было и вот опять

Аватара пользователя
Den
Сообщения: 363
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 16 раз
Поблагодарили: 4 раза

Re: CurrentIndex

Непрочитанное сообщение Den » 21 ноя 2017, 15:20

логично :D

я почему спросил, применительно к коду выше не выходит скажем так

(20 баров к примеру глубина)

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

if (MY.COUNT_II(Input).GetLastValues ("L", 20)[0].Y != MY.COUNT_II(Input).GetLastValues ("H", 20)[0].Y)

D = MY.COUNT_II(Input).GetLastValues ("H", 20)[0].Y - MY.COUNT_II(Input).GetLastValues ("L", 20)[1].Y;

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

Re: CurrentIndex

Непрочитанное сообщение evge » 21 ноя 2017, 16:41

зачем 20, можно и 1 значение возвращать, главное что бы ваш COUNT_II обозначил эти экстремумы только :)
никогда такого не было и вот опять


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

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

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