Настройка толщины линии индикатора

 
Коллеги, первый раз столкнулась с такой ситуацией при написании индикатора для МТ4.

Нужно установить ширину линии индикатора больше 5.

Через  #property indicator_width устанавливается без проблем. Но после установки индикатора  на график при попытке поменять ширину во вкладке Цвета предлагается только диапазон (1-5)

То есть, я например прописала в коде индикатора начальную настройку ширины линии:
 #property indicator_width 7 

Хочу потом поменять на  6, не получается. Меняю на 5, вернуться обратно на 7 тоже не получается.

Можно ли как-то расширить диапазон настроек ширины во вкладке Цвета? 
Или единственный выход - это выносить настройку ширины во вкладку Параметры? 

 
Elena Baranova:
Коллеги, первый раз столкнулась с такой ситуацией при написании индикатора для МТ4.

Нужно установить ширину линии индикатора больше 5.

Через  #property indicator_width устанавливается без проблем. Но после установки индикатора  на график при попытке поменять ширину во вкладке Цвета предлагается только диапазон (1-5)

То есть, я например прописала в коде индикатора начальную настройку ширины линии:
 #property indicator_width 7 

Хочу потом поменять на  6, не получается. Меняю на 5, вернуться обратно на 7 тоже не получается.

Можно ли как-то расширить диапазон настроек ширины во вкладке Цвета? 
Или единственный выход - это выносить настройку ширины во вкладку Параметры? 

Толщин линий всего 5. То, что установлена толщина 6,7, 8 и более, ни на что не влияет. Толщина 7 от толщины 5 ничем не отличается. Видимо, это чисто субъективно показалось, что толще.

 
Ihor Herasko:

Толщин линий всего 5. То, что установлена толщина 6,7, 8 и более, ни на что не влияет. Толщина 7 от толщины 5 ничем не отличается. Видимо, это чисто субъективно показалось, что толще.

Нет, не показалось :) Ниже, картинка  - ширина 5,7,10. Через вкладку параметры можно без проблем установить любую ширину. А вот через вкладку Цвета только от 1 до 5


 

Да, действительно, работает ))

Тогда запишем очередную фичу МТ4: указать толщину линии в коде можно любую, а в параметрах линий - только от 1 до 5. 

Это недавняя фича. Раньше такого не было. Установка любого значения выше 5 ни к чему не приводило..

 
Ihor Herasko:

Да, действительно, работает ))

Тогда запишем очередную фичу МТ4: указать толщину линии в коде можно любую, а в параметрах линий - только от 1 до 5. 

Это недавняя фича. Раньше такого не было. Установка любого значения выше 5 ни к чему не приводило..

А точно в параметрах линии( во вкладке Цвета в настройках) никак нельзя программно настроить ширину, чтобы было больше 5? Заказчик просит ) 

И не знаете, в МТ5 такое же ограничение?

 
Elena Baranova:

А точно в параметрах линии( во вкладке Цвета в настройках) никак нельзя программно настроить ширину, чтобы было больше 5? Заказчик просит ) 

Программно никак не установить, кроме указанного Вами варианта, который все равно не расширяет выбор в выпадающем списке. Попробуйте обратиться к разработчикам.

И не знаете, в МТ5 такое же ограничение?

Посмотрел.  Там все то же самое.))

Ну хоть хорошо, что фича одинакова для обоих терминалов.

 

Кстати, в МТ5 проходит такой финт:

input  uint             i_uWidth = 20;

int OnInit()
{
...   
   PlotIndexSetInteger(0, PLOT_LINE_STYLE, STYLE_SOLID);
   PlotIndexSetInteger(0, PLOT_LINE_WIDTH, i_uWidth);
...
}

Кликабельно.

В МТ4 то же самое, только вместо PlotIndexSetInteger можно дополнительно задействовать аналогичный параметр в функции SetIndexStyle:

SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, i_uWidth);
 
Elena Baranova:

А точно в параметрах линии( во вкладке Цвета в настройках) никак нельзя программно настроить ширину, чтобы было больше 5? Заказчик просит ) 

И не знаете, в МТ5 такое же ограничение?

Линию в МТ5 я не смотрел, а гистограмму любую поставьте, а она не будет толще свечи. Даже если в параметрах индикатора поставить 5, а на графике 2, то и гистограмма будет толщиной 2

 
Ihor Herasko:

Кстати, в МТ5 проходит такой финт:

Кликабельно.

В МТ4 то же самое, только вместо PlotIndexSetInteger можно дополнительно задействовать аналогичный параметр в функции SetIndexStyle:

Да, я так и сделала, через Входные параметры. Просто думала, что можно как-то через вкладку Цвета, как просит Заказчик.

Похоже, что нельзя :(

 
Elena Baranova:

Да, я так и сделала, через Входные параметры. Просто думала, что можно как-то через вкладку Цвета, как просит Заказчик.

Похоже, что нельзя :(

не понимаю, какие могут быть сложности с этим...

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot line
#property indicator_label1  "line"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#define ARGB(a,r,g,b)  ((uchar(a)<<24)|(uchar(r)<<16)|(uchar(g)<<8)|uchar(b))
//--- indicator buffers
double         lineBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,lineBuffer);
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);

//---
   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[])
  {
   if(rates_total - prev_calculated>1)
      ArrayCopy(lineBuffer,close);
   else
      lineBuffer[rates_total-1] = close[0];
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id == CHARTEVENT_MOUSE_MOVE)
     {
      SetIndexStyle(0,EMPTY,EMPTY,int(lparam/20),ColorToARGB(Grad(dparam/1000),0));
      ChartRedraw();
     }
  }
//+------------------------------------------------------------------+
uint Grad(double p)
  {
   static uint Col[6]= {0xFF0000FF,0xFF00FFFF,0xFF00FF00,0xFFFFFF00,0xFFFF0000,0xFFFF00FF};
   union argb {uint clr; uchar c[4];};
   if(p>0.9999)
      return Col[5];
   if(p<0.0001)
      return Col[0];
   p=p*5;
   int n=(int)p;
   double k=p-n;
   argb c1,c2;
   c1.clr=Col[n];
   c2.clr=Col[n+1];
   return ARGB(255,c1.c[2]+uchar(k*(c2.c[2]-c1.c[2])+0.5),
               c1.c[1]+uchar(k*(c2.c[1]-c1.c[1])+0.5),
               c1.c[0]+uchar(k*(c2.c[0]-c1.c[0])+0.5));
  }


уу

 
Nikolai Semko:

не понимаю, какие могут быть сложности с этим...

Заказчику нужно, чтобы в закладке "Цвета" можно было выставить линию толщиной более 5. Ему не нужно оперативно менять толщину линии во время работы индикатора.

Почему так - не спрашивайте. У каждого свои тараканы в голове. ))