Страница 1 из 2

Заливка *ЛЕНТЫ* цены

Добавлено: 10 июн 2020, 14:41
Den
Добрый день, друзья!

Подскажите, как можно залить такую "трёхмерную" ленту индикатора, через DrawArea или DrawChannel?

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

if ( CurrentIndex < Period)
{
D = D + Input[0];
SMA = D / (CurrentIndex + 1);
}
else
{
D = D + Input[0] - Input[(int)(-Period)] ;
SMA = D / Period;
}
if ( (lastHVal.X > lastLVal.X ? lastHVal.Y : lastLVal.Y) == lastLVal.Y)

SMA.DrawDash(Color.Cyan, Line.Solid, 3, 5);//SMA.DrawLine(Color.Cyan,Line.Solid,5);



if ( (lastHVal.X > lastLVal.X ? lastHVal.Y : lastLVal.Y) == lastHVal.Y )

SMA.DrawDash(Color.Magenta, Line.Solid, 3, 5);//SMA.DrawLine(Color.Magenta,Line.Solid,5);

}

Re: Заливка *ЛЕНТЫ* цены

Добавлено: 10 июн 2020, 22:54
Den
И есть ли возможность соединить концы DrawDash?

Re: Заливка *ЛЕНТЫ* цены

Добавлено: 11 июн 2020, 17:10
Den
Почему функция отображения Series.DrawDash(Color color, LineStyles style, int width, int delta = 0); рисуя горизонтальную линию на данном баре шириной delta, делает при этом отступ от [0] на delta баров?

Re: Заливка *ЛЕНТЫ* цены

Добавлено: 14 июн 2020, 14:26
Tyler_Durden

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

Series.DrawDash(Color color, LineStyles style, int width, int delta = 0);
от ряда до ряда наверное как-то надо рисовать. Вводить серию

Re: Заливка *ЛЕНТЫ* цены

Добавлено: 16 июн 2020, 15:55
Den
Дмитрий (oxi), может вы подскажете как "залить" эту ленту индикатора?

Re: Заливка *ЛЕНТЫ* цены

Добавлено: 16 июн 2020, 17:50
oxi
У вас sma. Точки на конце полос - это запаздывающая sma.
Снимок.PNG


Так?

Re: Заливка *ЛЕНТЫ* цены

Добавлено: 17 июн 2020, 15:10
Den
Дмитрий, спасибо за ответ.

да, у меня sma, меняющая цвет по сигналу пользовательского индикатора

ДА, ИМЕННО ТАК!

Представьте код, пожалуйста

Re: Заливка *ЛЕНТЫ* цены

Добавлено: 17 июн 2020, 15:16
oxi

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

function Initialize()
{
  IndicatorName = "SMA_III";
  PriceStudy = true ;
  AddInput("Input", Inputs.Price);         
  AddParameter("Period", 20);                   
  AddGlobalVariable("SUM", Types.Double, 0);
  AddSeries("SMA", DrawAs.Custom, Color.Red);   
  AddSeries("D", DrawAs.Custom, Color.Blue);   
  AddSeries("DS", DrawAs.Custom, Color.Blue);   
 
}

function Evaluate()
{


int p = MaxIndex - CurrentIndex;
if( p >= Period)
   p = (int)Period;

if ( CurrentIndex < Period)
{
   SUM = SUM + Input[0];
   SMA = SUM / (CurrentIndex + 1);
}
else
{
   SUM = SUM + Input[0] - Input[(int)(Period)] ;
   SMA = SUM / Period;
}

   if (CurrentIndex >= Period)
   {
          D[p] = SMA;
   }
   else
   {
      D = SMA;
   }
   
   DS = SMA[0];
   DS.DrawDash(Color.Red, Line.Solid, 1, p);
   
   if (SMA < D)
       SMA.DrawChannel(D, Color.Red, 10);
    else
       D.DrawChannel(SMA, Color.Red, 10);
   
}

Re: Заливка *ЛЕНТЫ* цены

Добавлено: 17 июн 2020, 16:14
Den
Дмитрий, БОЛЬШОЕ СПАСИБО !!!

Re: Заливка *ЛЕНТЫ* цены

Добавлено: 17 июн 2020, 17:11
Den
Дмитрий, один нюанс, как видно на вашем скрине лента залита горизонтально, в местах "перегиба" ленты возникают наложения цвета, создающие затемнения, а на моём заливка рисуется параллельно (вертикально) линии SMA

Как сделать, чтобы была горизонтальная заливка как у вас на скрине?

ГРУБО ГОВОРЯ, ЧТОБЫ ЗАЛИВАЛИСЬ ПРОМЕЖУТКИ МЕЖДУ DS.DrawDash

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

function Initialize()
{
  IndicatorName = "1";
  PriceStudy = true ;
  AddInput("Input", Inputs.Price);         
  AddParameter("Period", 4);                   
  AddGlobalVariable("SUM", Types.Double, 0);
  AddSeries("SMA", DrawAs.Custom, Color.Transparent);   
  AddSeries("D", DrawAs.Custom, Color.Transparent);   
  AddSeries("DS", DrawAs.Custom, Color.Transparent);   
 
}

function Evaluate()
{
{
var lastLVal = MY.индикатор(Input, 0, 0, 2).GetLastValues ("L", 1)[0]; 
var lastHVal = MY.индикатор(Input, 0, 0, 2).GetLastValues ("H", 1)[0];
{


int p = MaxIndex - CurrentIndex;
if( p >= Period)
   p = (int)Period;

if ( CurrentIndex < Period)
{
   SUM = SUM + Input[0];
   SMA = SUM / (CurrentIndex + 1);
}
else
{
   SUM = SUM + Input[0] - Input[(int)(Period)] ;
   SMA = SUM / Period;
}

   if (CurrentIndex >= Period)
   {
          D[13] = SMA;
   }
   else
   {
      D = SMA;
   }
   
   DS = SMA[0];
   DS.DrawDash(Color.Transparent, Line.Solid, 3, 13);
   
   if ( (lastHVal.X > lastLVal.X ? lastHVal.Y : lastLVal.Y) == lastLVal.Y)
//(SMA < D)
       SMA.DrawChannel(D, Color.Cyan, 33);
   if ( (lastHVal.X > lastLVal.X ? lastHVal.Y : lastLVal.Y) == lastHVal.Y )       
       D.DrawChannel(SMA, Color.Magenta, 33);
   
}
}
}