День добрый.
Есть ли возможность в MQL (или другой способ) задать длину OBJ_TREND или OBJ_RECTANGLE_LABEL не в ценовом варианте (от Open[1] до Open [2]), а в пикселях (от 250px до 300px), но так, чтобы при пролистывании графика пиксельные объекты тоже двигались (не с новым тиком, а в потоке), а не оставались на своих пиксельных местах.
Хочу сделать немного толще уровни закрытия и открытия бара на графике. Если делать обычным ценовым методом, то минимальная длина линии на графике получается в 1 бар, и линия закрытия одого бара прилипает к линии открытия другого бара, что визуально не удобно.
То есть, обычная цена закрытия или открытия бара, которые можем видеть на графике, но в 2-3+ раз толще, такого же размера в пол бара, как у стандартного графика.
Если не достаточно понятно объяснил, сделаю скриншоты с объяснениями. Спасибо!
День добрый.
Есть ли возможность в MQL (или другой способ) задать длину OBJ_TREND или OBJ_RECTANGLE_LABEL не в ценовом варианте (от Open[1] до Open [2]), а в пикселях (от 250px до 300px), ....
OBJ_TREND -- цена и время, т.е. привязка к барам
OBJ_RECTANGLE_LABEL -- расстояние в пикселях от угла привзяки
OBJ_TREND -- цена и время, т.е. привязка к барам
OBJ_RECTANGLE_LABEL -- расстояние в пикселях от угла привзяки
Думаю тут одно решение, рисовать стилями 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; } //+------------------------------------------------------------------+
Этот индикатор будет выделять опен и клозе первого бара выбранного фрейма.
Сделать черточки от середины бара влево и вправо - не выйдет, только на всю ширину.
Думаю тут одно решение, рисовать стилями DRAW_CANDLES или DRAW_BARS.
Этот индикатор будет выделять опен и клозе первого бара выбранного фрейма.
Сделать черточки от середины бара влево и вправо - не выйдет, только на всю ширину.
Прошу прощение, это для МТ4...
Вот так..
В таком случае тупик, ибо в МТ4 новые стили еще не введены, но зато любезно запрещено рисовать символом черточки (код 4) в индикаторах для стиля DRAW_ARROW.
Можете посмотреть другие символы шрифта Wingdings, но вариантов мало, да к тому же еще более корявые, чем реализация в МТ5.
Можно вспомнить про динамический канвас, но даже не знаю работает ли он в МТ4, да и сложно будет, задача того не стоит.
Вот так..
В таком случае тупик, ибо в МТ4 новые стили еще не введены, но зато любезно запрещено рисовать символом черточки (код 4) в индикаторах для стиля DRAW_ARROW.
Можете посмотреть другие символы шрифта Wingdings, но вариантов мало, да к тому же еще более корявые, чем реализация в МТ5.
Можно вспомнить про динамический канвас, но даже не знаю работает ли он в МТ4, да и сложно будет, задача того не стоит.
Добрый день. А Вы не в курсе, можно ли делать цветные свечи без заливки? То-есть, выделять разным цветом только границы свечей, а тело свечи, чтобы оставалось таким, как в настройках графика?
Можно.
С помощью вот этого класса: Класс для создания пользовательской графики >>>
Интересная заморочка. )
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
День добрый.
Есть ли возможность в MQL (или другой способ) задать длину OBJ_TREND или OBJ_RECTANGLE_LABEL не в ценовом варианте (от Open[1] до Open [2]), а в пикселях (от 250px до 300px), но так, чтобы при пролистывании графика пиксельные объекты тоже двигались (не с новым тиком, а в потоке), а не оставались на своих пиксельных местах.
Хочу сделать немного толще уровни закрытия и открытия бара на графике. Если делать обычным ценовым методом, то минимальная длина линии на графике получается в 1 бар, и линия закрытия одого бара прилипает к линии открытия другого бара, что визуально не удобно.
То есть, обычная цена закрытия или открытия бара, которые можем видеть на графике, но в 2-3+ раз толще, такого же размера в пол бара, как у стандартного графика.
Если не достаточно понятно объяснил, сделаю скриншоты с объяснениями. Спасибо!