Скачать MetaTrader 5

Как рисуется разнонаправленная гистограмма? (см. рис.)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Rice
324
Rice 2015.09.26 23:16 

Гистограммы рисуют на одной полоске либо отрицательное значение, либо положительное.

Обычная гистограмма 

Возможно ли нарисовать на одной полоске гистограммы вниз отрицательное значение, вверх положительное? Если да, то как?

Разнонаправленная гистограмма 

Спасибо. 

Alexander Bereznyak
21822
Alexander Bereznyak 2015.09.26 23:35  
Два буфера с разными цветами, в один положительные значения, а в другой отрицательные.
Alexey Busygin
6449
Alexey Busygin 2015.09.27 06:54  
Рисуется, примерно как у вас.
Rice
324
Rice 2015.09.27 11:38  
Alexander Bereznyak:
Два буфера с разными цветами, в один положительные значения, а в другой отрицательные.

Я в программировании не очень силён, могу только переделать существующий индикатор. Не могли бы вы примерно показать кодом, как это сделать?

В обычном варианте получается:

   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3,Red);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3,Green);

 То есть, отрицательные - красный, положительные - зелёный цвет. А как их вывести на одно полоску?

Rice
324
Rice 2015.09.27 11:39  
Alexey Busygin:
Рисуется, примерно как у вас.
Если вы не знаете, что ответить, зачем писать глупости? Или вам так нравится выглядеть глупо?
Alexey Viktorov
7778
Alexey Viktorov 2015.09.27 11:40  
Rice:

Я в программировании не очень силён, могу только переделать существующий индикатор. Не могли бы вы примерно показать кодом, как это сделать?

В обычном варианте получается:

 То есть, отрицательные - красный, положительные - зелёный цвет. А как их вывести на одно полоску?

Одновременно и нулевой и первый буферы заполнять значениями.
Alexander Bereznyak
21822
Alexander Bereznyak 2015.09.27 12:14  
Rice:

Я в программировании не очень силён, могу только переделать существующий индикатор. Не могли бы вы примерно показать кодом, как это сделать?

В обычном варианте получается:

 То есть, отрицательные - красный, положительные - зелёный цвет. А как их вывести на одно полоску?

да так, два буфера, они сами выведутся как надо
Alexey Busygin
6449
Alexey Busygin 2015.09.27 16:12  
Rice:
Если вы не знаете, что ответить, зачем писать глупости? Или вам так нравится выглядеть глупо?

А вы думаете ваша тема, несет высоко глубокий смысл? На мой взгляд от моего типа глупого сообщения, ваша тема отличается только картинками.

Я не экстросенс читать мысли не умею, но если вы хотите написать индикатор с этого бы и начинали! А не со взвешивания сообщений на весах мудрости

Rice
324
Rice 2015.10.07 19:43  
Alexey Busygin:

А вы думаете ваша тема, несет высоко глубокий смысл? На мой взгляд от моего типа глупого сообщения, ваша тема отличается только картинками.

Я не экстросенс читать мысли не умею, но если вы хотите написать индикатор с этого бы и начинали! А не со взвешивания сообщений на весах мудрости

Вроде такой умный, а такие глупости пишете.
Sergey Eremin
4373
Sergey Eremin 2015.10.07 21:13  

Вот пример, набросал на скорую руку (для MT4):

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                                                   Sergey Eryomin |
//|                                                 sergey@ensed.org |
//+------------------------------------------------------------------+
#property copyright "Sergey Eryomin"
#property link      "sergey@ensed.org"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Red
#property indicator_label1  "Red"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- plot Blue
#property indicator_label2  "Blue"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2
//--- indicator buffers
double         RedBuffer[];
double         BlueBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,RedBuffer);
   SetIndexBuffer(1,BlueBuffer);
   
//---
   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=rates_total-prev_calculated;
   if(prev_calculated>0)
   {
      limit++;
   }
   
   srand(GetTickCount());  
   
   for(int i=0; i<limit-1; i++)
   {
      BlueBuffer[i] = rand();
      RedBuffer[i] = -1 * rand();
   }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Рандомно рисует синие (значения выше нуля) и красные (значения ниже нуля) столбики. Результат примерно как на картинке:

Если что-то непонятно, то спрашивайте, постараюсь пояснить.

Rice
324
Rice 2015.10.08 09:08  
Sergey Eremin:

Вот пример, набросал на скорую руку (для MT4):

Рандомно рисует синие (значения выше нуля) и красные (значения ниже нуля) столбики. Результат примерно как на картинке:

Если что-то непонятно, то спрашивайте, постараюсь пояснить.

Спасибо большое вам, Сергей!

Вы - просто мастер программирования, на скорую руку написали то, с чем я неделю разбирался, да так и не разобрался, замучился и перешёл к исследованию другой стратегии. Поэтому пока вопросов по данной теме нет. Но ваш код весьма ценен как пример. Красивый получился график. :)

Поэтому, ещё раз большое спасибо за приложенные вами усилия и потраченное время!

ps. Хочу добавить, потрясающий у вас стиль кода! Я разбирался с другим индикатором, но там всё на кучу, прыгаешь с места на место, чтобы понять, к чему относится та или иная функция или параметр. А у вас всё по полочкам! 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий