Вывод параметров индикатора в советник через iCustom() - страница 3

 
Vyacheslav:
Я имею ввиду не последние цифры в коде, а предпоследние, которые и выводят значение из буферов индикатора (выделил красным)
    double SThigh=iCustom(NULL, TimeFrame, "Supertrend_I", CCIperiod,ATRperiod, applied_price, 0, 1); 
    double STlow= iCustom(NULL, TimeFrame, "Supertrend_I", CCIperiod,ATRperiod, applied_price, 1, 1);
Так вот, если посмотреть на график, то мы видим на нем одну единственную линию (двух цветов), мне нужно значение цены этой линии на последней закрытой свече (пример на рисунке выше по ветке) .

У индюка два буфера и значения каждого из них выводятся линиями разных цветов. Индексы этих самых буферов и обозначаются предпоследними значениями функции iCustom(). А то, что якобы мы видим всего лишь одну разноцветную линию - это неправда. На самом деле мы видим обе и иногда они расходятся по нулевому бару (я имею в виду поведение индюка не на истории, а в реальном режиме при подключении к серверу). После чего индюк уже начинает врать, т.е. если тренд пойдет вниз в сторону красной линии, то он меняет значение и для зеленой, опускает и делает его таким же как и для красной. А если тренд пойдет вверх, то соответственно индюком будет подогнано и приподнято значение красной. А что касаемо разноцветности, дык это одна линия затирает другую после подгонки. Например, если в графическом редакторе взять и нарисовать некую линию одним цветом, то наложив на ее участки сверху куски другой линии, мы и получим эдакую аляпистость. Индюк всего лишь занимается подгонкой значений и закрашиванием своих предыдущих огрехов на двух последних барах. И этого более чем предостаточно, чтобы на истории не заметить подвоха. Но зато вполне достаточно, чтобы наблюдая, заметить подвох в реальном режиме.
 
Спасибо за разъяснения и терпение.
Я уже наверное до печенок всех достал?
Наверное зря привел пример с этим названием индикатора, потому что он отвлекает от цели вопроса.
С расскраской линии мне все понятно, еще раз спасибо. Давайте представим ну что нет этой линии есть два буфера и мне нужно вывести их ценовые значения.
Вот пример, я поставил этот код в советник и запустил на тест.
     Print( "TrendDown =  ",TrendDown[1] ," TrendUp =  " , TrendUp[1]);
Принтую вот эти два буфера со значением свечи "1" и вот что я получаю по журналу....


Я получаю ценовые значения этих буферов.
Теперь вопрос, могу ли я получить эти же значения из индикатора через функцию iCustom()???
Если да, то покажите примером на этом коде.

Еще раз, извените за "замороку" и всем спасибо.
 
вроде уж все объяснили:)


double SThigh=iCustom(NULL, TimeFrame, "Supertrend_I", CCIperiod,ATRperiod, applied_price, 0, 1);
double STlow= iCustom(NULL, TimeFrame, "Supertrend_I", CCIperiod,ATRperiod, applied_price, 1, 1);

Print( "STlow= ",SThigh ," STlow= " , STlow);

Разберешся?
 
Я бы и не спрашивал если бы не эта "фигня" ?
    double SThigh=iCustom(NULL, TimeFrame, "Supertrend_I", CCIperiod,ATRperiod, applied_price, 0, 1); 
    double STlow= iCustom(NULL, TimeFrame, "Supertrend_I", CCIperiod,ATRperiod, applied_price, 1, 1); 
    Print("ЗначениеH__ ",SThigh);
    Print("ЗначениеL__ ",STlow);

А вот что получаю...

Ладно, на этом больше допекать не буду, попытаюсь разобраться сам.

Еще раз всем спасибо.

 

попробуйте это

 
Переделай индикатор:

- установи значения по умолчанию для буферов (например: 0,0);
- присваивай значения другому буферу при расчетах (например: там где расчитываешь TrendUp, присвой TrendDown=0.0; и наоборот)
 
Vyacheslav:
Спасибо, я примерно такого же мнения на счет этого индикатора. Но...
Я это понимаю, но еще раз посмотрите код индикатора, я же изменил его и цикл начинается при i >=1; а не i>=0;
for(i = limit; i >= 1; i--) {
      cciTrendCurrent  = iCCI(NULL,TimeFrame, CCIperiod,  applied_price, i);
      cciTrendPrevious = iCCI(NULL,TimeFrame, CCIperiod,  applied_price, i+1);
      
      if (cciTrendCurrent >= 0 && cciTrendPrevious < 0) {
         TrendUp[i+1] = TrendDown[i+1];
      }

Подглядывание от этого не прекратилось. Всякий раз при смене тренда оптимистичность индикатора улучшается ровно на 1 бар. Итак по всей истории. Будьте осторожны, делая выводы о его пригодности.
 
А, если совсем ничего не помогает, а времени искать потерянный ноль нет, я делаю так:
If (MathAbs(Sthigh)>1000000000) Sthigh=0;
Раз значение буфера не определено, то оно должно быть равно нулю.
Туповато, конечно, но работает надежно.


 
granit77:
А, если совсем ничего не помогает, а времени искать потерянный ноль нет, я делаю так:
If (MathAbs(Sthigh)>1000000000) Sthigh=0;
Раз значение буфера не определено, то оно должно быть равно нулю.
Туповато, конечно, но работает надежно.



Определено и по умолчанию равно EMPTY_VALUE, которое само по себе равно 0x7FFFFFFF
Но всё можно изменить при помощи SetIndexEmptyValue(0,0.0);
 
 
Вы будете смеяться, но не всегда получалось, просто мистика какая-то. Приходилось решать по-тупому.
Причина обращения: