Ошибки, баги, вопросы - страница 1092

zfs:
Я так и делаю, но получаю шлейф непонятных значений еще позади.

Для устранения "шлейфа" нужно использовать вот это. ))

PlotIndexSetDouble(i,PLOT_EMPTY_VALUE,0);
Но перед этим также нужно инициализировать индикаторные буферы пустыми значениями. 
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
tol64:

Для устранения "шлейфа" нужно использовать вот это. ))

Да тоже работает)  Это я пробовал как ни странно, но сейчас работает тоже, к сожалению, это только начало багов).

Почему может не отображаться график, пропадает даже надпись названия и значений, в логе ничего, а значения у буфферов есть). Вот такая загадка).

zfs:

Да тоже работает)  Это я пробовал как ни странно, но сейчас работает тоже, к сожалению, это только начало багов).

Почему может не отображаться график, пропадает даже надпись названия и значений, в логе ничего, а значения у буфферов есть). Вот такая загадка).

А например при переключении таймфреймов всё восстанавливается. Так?
zfs:

Да тоже работает)  Это я пробовал как ни странно, но сейчас работает тоже, к сожалению, это только начало багов).

Почему может не отображаться график, пропадает даже надпись названия и значений, в логе ничего, а значения у буфферов есть). Вот такая загадка).

Направление верно? Может, он слева рисуется?

У меня такое было :-)

Silent:

Направление верно? Может, он слева рисуется?

У меня такое было :-)

Нашел, значений уже нет. Стерлись). Еще вопрос знатокам. В коде прописано линия зеленая, а в настройках индикатора цветов нет. Линия отображается серой.

А вот опять исчезло, поменял номер буфера. Такое ощущение, что нельзя совмещать бары и линии в одном коде.

zfs:

Нашел, значений уже нет. Стерлись). Еще вопрос знатокам. В коде прописано линия зеленая, а в настройках индикатора цветов нет. Линия отображается серой.

Можно вот так:

#property indicator_color1   clrRed

 и так:

PlotIndexSetInteger(s,PLOT_LINE_COLOR,line_color[s]);
zfs:

...Еще вопрос знатокам. В коде прописано линия зеленая, а в настройках индикатора цветов нет. Линия отображается серой.

...

Это как?

//--- plot l USD
#property indicator_label1  "USD"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrLime
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot 2 EUR
#property indicator_label2  "EUR"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrAqua
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//-- и т д


Silent:

Это как?


Пусто там, несмотря на то, что цвет в коде задается. При всем положительный результат был, но он исчез, как не смешно это звучит).
zfs:
Пусто там, несмотря на то, что цвет в коде задается. При всем положительный результат был, но он исчез, как не смешно это звучит).
Тогда поможет разобраться краткий код воспроизводящий проблему.
tol64:
Тогда поможет разобраться краткий код воспроизводящий проблему.
#property indicator_separate_window

#property indicator_buffers 6                 // Количество буферов для расчёта индикатора
#property indicator_plots   2                 // Количество графических серий

#property indicator_label1  "Open;High;Low;Close"

//перечисление методов отображения индикатора
enum ViewInd
  {
   Line,               // линии
   Bar,                // бары
   Candles             // свечи
  }; 
  
input ViewInd      _ViewInd= Line;     //вид индикатора  

double op[],cl[],hi[],lo[],s[];
double buffer_color_line[];//Буфер для индекса цвета



int OnInit()
  {
   for (int i=0;i<=5;i++)
    PlotIndexSetDouble(i,PLOT_EMPTY_VALUE,0);
   ArrayInitialize(op,0);ArrayInitialize(cl,0);  
   ArrayInitialize(hi,0);ArrayInitialize(lo,0);  
   ArrayInitialize(s,0);     

    
   if(_ViewInd==Line){
    SetIndexBuffer(5,s,INDICATOR_DATA);//Привязка массива к буферу
    PlotIndexSetInteger(5,PLOT_DRAW_TYPE,DRAW_LINE);
    PlotIndexSetInteger(5,PLOT_LINE_STYLE,STYLE_SOLID);
    PlotIndexSetInteger(5,PLOT_LINE_COLOR,clrRed);
    ArraySetAsSeries(s,true);
   }
   else{
   SetIndexBuffer(0,op,INDICATOR_DATA);
   SetIndexBuffer(1,hi,INDICATOR_DATA);
   SetIndexBuffer(2,lo,INDICATOR_DATA);
   SetIndexBuffer(3,cl,INDICATOR_DATA);
   SetIndexBuffer(4,buffer_color_line,INDICATOR_COLOR_INDEX);//Сопоставляем массив-буфер индексов цветов с буфером индикатора
   ArraySetAsSeries(op,true);
   ArraySetAsSeries(hi,true);
   ArraySetAsSeries(lo,true);
   ArraySetAsSeries(cl,true);   
   ArraySetAsSeries(buffer_color_line,true);      
//Задаем количество индексов цветов для графического построения
   PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);
   if (_ViewInd==Candles)PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_COLOR_CANDLES); else
    PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_COLOR_BARS);
//Задаем цвет для каждого индекса
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue);   //Нулевой индекс -> Синий
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrOrange); //Первый индекс  -> Оранжевый   
   }   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int limit;//MQL 4 RULEZZZ
   int counted_bars=prev_calculated;
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=rates_total-counted_bars;
   
   for (int i=0;i<limit;i++){
    if(_ViewInd==Line)s[i]=MathRand();
    else{
     op[i]=MathRand();
     cl[i]=MathRand();
   if (op[i]>cl[i])buffer_color_line[i]=1;else buffer_color_line[i]=0;
     hi[i]=32767;
     lo[i]=0;        
    }  
   }

   return(rates_total);
  }
//+------------------------------------------------------------------+
Примерно так.