Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ищешь единомышленников? На форуме их много!
Roman Starinskij
1870
Roman Starinskij 2014.10.12 11:57 

День добрый.

Есть ли возможность в MQL (или другой способ) задать длину OBJ_TREND или OBJ_RECTANGLE_LABEL не в ценовом варианте (от Open[1] до Open [2]), а в пикселях (от 250px до 300px), но так, чтобы при пролистывании графика пиксельные объекты тоже двигались (не с новым тиком, а в потоке), а не оставались на своих пиксельных местах.

Хочу сделать немного толще уровни закрытия и открытия бара на графике. Если делать обычным ценовым методом, то минимальная длина линии на графике получается в 1 бар, и линия закрытия одого бара прилипает к линии открытия другого бара, что визуально не удобно.
То есть, обычная цена закрытия или открытия бара, которые можем видеть на графике, но в 2-3+ раз толще, такого же размера в пол бара, как у стандартного графика.

Если не достаточно понятно объяснил, сделаю скриншоты с объяснениями. Спасибо!

Alexander Voronkov
18298
Alexander Voronkov 2014.10.12 13:54  
WePlexus:

День добрый.

Есть ли возможность в MQL (или другой способ) задать длину OBJ_TREND или OBJ_RECTANGLE_LABEL не в ценовом варианте (от Open[1] до Open [2]), а в пикселях (от 250px до 300px), но так, чтобы при пролистывании графика пиксельные объекты тоже двигались (не с новым тиком, а в потоке), а не оставались на своих пиксельных местах.

Хочу сделать немного толще уровни закрытия и открытия бара на графике. Если делать обычным ценовым методом, то минимальная длина линии на графике получается в 1 бар, и линия закрытия одого бара прилипает к линии открытия другого бара, что визуально не удобно.
То есть, обычная цена закрытия или открытия бара, которые можем видеть на графике, но в 2-3+ раз толще, такого же размера в пол бара, как у стандартного графика.

Если не достаточно понятно объяснил, сделаю скриншоты с объяснениями. Спасибо!

Сделайте скрин.
Andrey F. Zelinsky
31045
Andrey F. Zelinsky 2014.10.12 14:17  
WePlexus:

День добрый.

Есть ли возможность в MQL (или другой способ) задать длину OBJ_TREND или OBJ_RECTANGLE_LABEL не в ценовом варианте (от Open[1] до Open [2]), а в пикселях (от 250px до 300px), ....

OBJ_TREND -- цена и время, т.е. привязка к барам

OBJ_RECTANGLE_LABEL -- расстояние в пикселях от угла привзяки 

Roman Starinskij
1870
Roman Starinskij 2014.10.13 06:56  
abolk:

OBJ_TREND -- цена и время, т.е. привязка к барам

OBJ_RECTANGLE_LABEL -- расстояние в пикселях от угла привзяки 

OBJ_RECTANGLE_LABEL очень хорошо работает, но при прокручивании графика объект остается на своем "пиксельном" месте и приходится ждть новый тик, чтобы индикатор обновил местоположение бара. А нужно чтобы "пиксельные" бары пролистывались как обычные.
Roman Starinskij
1870
Roman Starinskij 2014.10.13 07:05  
Fillellin:
Сделайте скрин.

Толщина вот так:

Как видно, линия открытия и закрытия бара заканчивается в пределах "своего" бара. 


А вот, если рисовать стандартными графическими методами:

Здесь линии "прилипают" к соседним барам, что визуально не удобно.  


Pavel Tsatsenko
836
Pavel Tsatsenko 2014.10.13 08:58  

Думаю тут одно решение, рисовать стилями DRAW_CANDLES или DRAW_BARS.

#property indicator_chart_window
#property indicator_buffers 10
#property indicator_plots   2
//--- plot TestBars
#property indicator_label1  "OpenBars"
#property indicator_type1   DRAW_COLOR_BARS
#property indicator_color1  clrLime,clrRed,clrDodgerBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- plot TestBars
#property indicator_label2  "CloseBars"
#property indicator_type2   DRAW_COLOR_BARS
#property indicator_color2  clrLime,clrRed,clrDodgerBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2
//---
input ENUM_TIMEFRAMES TF=PERIOD_H6;
//--- indicator buffers
double         OpenBarsBuffer1[];
double         HighBarsBuffer1[];
double         LowBarsBuffer1[];
double         CloseBarsBuffer1[];
double         OpenBarsColors[];
//---
double         OpenBarsBuffer2[];
double         HighBarsBuffer2[];
double         LowBarsBuffer2[];
double         CloseBarsBuffer2[];
double         CloseBarsColors[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,OpenBarsBuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,HighBarsBuffer1,INDICATOR_DATA);
   SetIndexBuffer(2,LowBarsBuffer1,INDICATOR_DATA);
   SetIndexBuffer(3,CloseBarsBuffer1,INDICATOR_DATA);
   SetIndexBuffer(4,OpenBarsColors,INDICATOR_COLOR_INDEX);
//---
   SetIndexBuffer(5,OpenBarsBuffer2,INDICATOR_DATA);
   SetIndexBuffer(6,HighBarsBuffer2,INDICATOR_DATA);
   SetIndexBuffer(7,LowBarsBuffer2,INDICATOR_DATA);
   SetIndexBuffer(8,CloseBarsBuffer2,INDICATOR_DATA);
   SetIndexBuffer(9,CloseBarsColors,INDICATOR_COLOR_INDEX);
//---
   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=prev_calculated;
   if(limit==0)
     {
      ArrayInitialize(OpenBarsBuffer1,EMPTY_VALUE);
      ArrayInitialize(HighBarsBuffer1,EMPTY_VALUE);
      ArrayInitialize(LowBarsBuffer1,EMPTY_VALUE);
      ArrayInitialize(CloseBarsBuffer1,EMPTY_VALUE);
      ArrayInitialize(OpenBarsBuffer2,EMPTY_VALUE);
      ArrayInitialize(HighBarsBuffer2,EMPTY_VALUE);
      ArrayInitialize(LowBarsBuffer2,EMPTY_VALUE);
      ArrayInitialize(CloseBarsBuffer2,EMPTY_VALUE);
     }

   if(limit>=rates_total)
     {
      limit=rates_total-1;
     }

   for(int i=limit;i<rates_total && !IsStopped();i++)
     {
      if(NewBar(TF,time[i]))
        {
         OpenBarsBuffer1[i]=HighBarsBuffer1[i]=LowBarsBuffer1[i]=CloseBarsBuffer1[i]=open[i];
         OpenBarsBuffer2[i]=HighBarsBuffer2[i]=LowBarsBuffer2[i]=CloseBarsBuffer2[i]=close[i];

         if(open[i]<close[i])
           {
            OpenBarsColors[i]=0;
            CloseBarsColors[i]=0;
           }
         else if(open[i]>close[i])
           {
            OpenBarsColors[i]=1;
            CloseBarsColors[i]=1;
           }
         else
           {
            OpenBarsColors[i]=2;
            CloseBarsColors[i]=2;
           }
        }
      else
        {
         OpenBarsBuffer1[i]=HighBarsBuffer1[i]=LowBarsBuffer1[i]=CloseBarsBuffer1[i]=EMPTY_VALUE;
         OpenBarsBuffer2[i]=HighBarsBuffer2[i]=LowBarsBuffer2[i]=CloseBarsBuffer2[i]=EMPTY_VALUE;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
bool NewBar(ENUM_TIMEFRAMES tf,datetime currtime)
  {
   static datetime prevtime=0;
   int mod=(int)MathMod(currtime,PeriodSeconds(tf));
   if(mod==0 && prevtime!=currtime)
     {
      prevtime=currtime;
      return true;
     }
   return false;
  }
//+------------------------------------------------------------------+

Этот индикатор будет выделять опен и клозе первого бара выбранного фрейма.

Сделать черточки от середины бара влево и вправо - не выйдет, только на всю ширину.

 

Roman Starinskij
1870
Roman Starinskij 2014.10.15 10:04  
kPVT:

Думаю тут одно решение, рисовать стилями DRAW_CANDLES или DRAW_BARS.

Этот индикатор будет выделять опен и клозе первого бара выбранного фрейма.

Сделать черточки от середины бара влево и вправо - не выйдет, только на всю ширину.

 

Прошу прощение, это для МТ4... 
Pavel Tsatsenko
836
Pavel Tsatsenko 2014.10.15 11:18  
WePlexus:
Прошу прощение, это для МТ4... 

Вот так.. 

В таком случае тупик, ибо в МТ4 новые стили еще не введены, но зато любезно запрещено рисовать символом черточки (код 4) в индикаторах для стиля DRAW_ARROW.

Можете посмотреть другие символы шрифта Wingdings, но вариантов мало, да к тому же еще более корявые, чем реализация в МТ5.

Можно вспомнить про динамический канвас, но даже не знаю работает ли он в МТ4, да и сложно будет, задача того не стоит. 

Roman Starinskij
1870
Roman Starinskij 2014.10.18 21:47  
kPVT:

Вот так.. 

В таком случае тупик, ибо в МТ4 новые стили еще не введены, но зато любезно запрещено рисовать символом черточки (код 4) в индикаторах для стиля DRAW_ARROW.

Можете посмотреть другие символы шрифта Wingdings, но вариантов мало, да к тому же еще более корявые, чем реализация в МТ5.

Можно вспомнить про динамический канвас, но даже не знаю работает ли он в МТ4, да и сложно будет, задача того не стоит. 

Спасибо за ответ. Значит простым способом на MT4 не попрёшь. :) Попробую через ценовую метку, как-то извратиться.
Alexey Kozitsyn
6207
Alexey Kozitsyn 2014.10.19 10:02  
kPVT:
Добрый день. А Вы не в курсе, можно ли делать цветные свечи без заливки? То-есть, выделять разным цветом только границы свечей, а тело свечи, чтобы оставалось таким, как в настройках графика?
Anatoli Kazharski
55490
Anatoli Kazharski 2014.10.19 10:11  
Tapochun:
Добрый день. А Вы не в курсе, можно ли делать цветные свечи без заливки? То-есть, выделять разным цветом только границы свечей, а тело свечи, чтобы оставалось таким, как в настройках графика?

Можно. 

С помощью вот этого класса: Класс для создания пользовательской графики >>> 

Интересная заморочка. ) 

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