Нужна помощь професссионалов! - страница 2

 

Вот так получилось

 
Dmitiry Ananiev:

Вот так получилось

Закинул на комп. щас доделаю.

У меня только так получается. В самом конце выложенной сюда Вами версии индюка дописал

//----
   for(i = limit; i >= 0; i--)//добавлено
      {
         if(TrendUp[i]==TrendDown[i])TrendDown[i]=EMPTY_VALUE;//добавлено
      }//добавлено
//----
  return(0);//было
 }//было

Ответ индикатора теперь однозначный, но линия рвется чуток.

Попробуйте.

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


//+------------------------------------------------------------------------+
//|                                      Symphonie Trendline Indicator.mq4 |
//|Based on basic Trendline by MetaTrader_Experts_and_Indicators           |
//+------------------------------------------------------------------------+
#property copyright "Symphonie Trader Systems"
#property link      "MetaTrader_Experts_and_Indicators"

#property indicator_chart_window
#property indicator_buffers 2

#property indicator_label1  "Trend Up"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

#property indicator_label2  "Trend Down"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  3

   extern int CCIPeriod=63;
   extern int ATRPeriod=18;

   double TrendUp[];
   double TrendDown[];
   int    st = 0;
   int    MAX_PERIOD;
   double nCCI, nATR;
   double nTrendLine;

//+------------------------------------------------------------------+
//| Custom indicator initialization function|
//+------------------------------------------------------------------+
int init()
{

   nTrendLine=EMPTY_VALUE;

   SetIndexBuffer(0, TrendUp);
   SetIndexBuffer(1, TrendDown);

   SetIndexEmptyValue(0, EMPTY_VALUE);
   SetIndexEmptyValue(0, EMPTY_VALUE);

   MAX_PERIOD=(int)MathMax(CCIPeriod, ATRPeriod)+1;

   SetIndexDrawBegin(0, MAX_PERIOD);
   SetIndexDrawBegin(1, MAX_PERIOD);

   IndicatorDigits(_Digits);
   IndicatorShortName("Symphonie Trendline Indicator");

   return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function|
//+------------------------------------------------------------------+
int deinit()
{
  return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function|
//+------------------------------------------------------------------+
int start()
{
   int counted_bars = IndicatorCounted();
// check for possible errors
   if (counted_bars<0) return(-1);
// last counted bar will be recounted
   if (counted_bars>0) counted_bars--;

   int limit=Bars-counted_bars;

   for (int i=limit; i>=0; i--) {

      double nTrendUp  =EMPTY_VALUE;
      double nTrendDown=EMPTY_VALUE;

      nCCI = iCCI(_Symbol, PERIOD_CURRENT, CCIPeriod, PRICE_TYPICAL, i);
      nATR = iATR(_Symbol, PERIOD_CURRENT, ATRPeriod, i);

      if (nCCI>st) {
         nTrendUp=Low[i]-nATR; if (nTrendUp<nTrendLine) nTrendUp=nTrendLine; else nTrendLine=nTrendUp;
      }
      else {
         nTrendDown=High[i]+nATR; if (nTrendDown>nTrendLine) nTrendDown=nTrendLine; else nTrendLine=nTrendDown;
      }
      TrendUp  [i]=nTrendUp;
      TrendDown[i]=nTrendDown;
   }
  return(0);
}
 

Код индикатора максимально упрощен. Заодно был удален код, который не использовался в дальнейших расчетах.

 
Dmitiry Ananiev:
Вот не силен я в индикаторах. 10 лет советники пишу, а индикаторы как то не приходилось. Что нужно изменить ? 

для тех кто 10 лет типа-пишет советники -- индикаторы набора Symphonie перерисовывают (там их несколько индикаторов -- все перерисовывают).

причём, проанализировать сигнал для каждого перерисовывающего индикатора -- свой подход надо найти.

если есть такой жутко длительный "опыт" написания советников -- то рекомендую сразу по-боку пустить этот советник.

 
Andrey F. Zelinsky: индикаторы набора Symphonie перерисовывают (там их несколько индикаторов -- все перерисовывают)
Не знаком со всеми индикаторами набора Symphonie, но тот вариант, который я предложил чуть выше, точно не перерисовывает свои значения (кроме нулевого бара, конечно).

Не приходилось сталкиваться раньше с индикаторами из этого набора, но в принципе мне импонируют трендовые индикаторы, в которых учитывается волатильность, ну хотя бы в виде индикатора ATR.

 
Dmitiry Ananiev:

Так он вообще ничего не рисует! 

Повторюсь для тех кто не понял.  Индикатор рисует как рисует. Как мне в советнике отследить смену цвета ? 

Там нет смены цвета, первый буфер синий , второй красный

т.е если первый буфер не EMPTY_VALUE  линия синия 

 
pako:
Там нет смены цвета, первый буфер синий , второй красный
Да индюк криво написан просто.
 
Eugene Myzrov:
Чтобы советник мог однозначно понимать какая линия индикатора соответствует данному бару, необходимо эту однозначность внедрить в сам индикатор.
Вот версия индикатора, которая лишена этого недостатка. С этой версией индикатора у советника не будет проблем.


точно также рвется линия.