если речь идет о отрисовке индикаторными буферами, то только штатной SetIndexShift
https://docs.mql4.com/ru/customind/setindexshift
индексация в индикаторном буфере остается прежней, а отрисовка будет смещена, набросал пример:
#property copyright "IgorM" #property link "https://www.mql5.com/ru/users/igorm" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 //--- plot Label1 #property indicator_label1 "CLOSE" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 2 //--- plot Label2 #property indicator_label2 "SHIFT" #property indicator_type2 DRAW_LINE #property indicator_color2 clrYellow #property indicator_style2 STYLE_SOLID #property indicator_width2 2 //--- indicator buffers double Label1Buffer[]; double Label2Buffer[]; input int Indicator_Shift = 5; //Indicator Shift //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0, Label1Buffer); SetIndexBuffer(1, Label2Buffer); SetIndexShift(1, Indicator_Shift); //--- 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 + 1; if(prev_calculated == 0 || limit > 1) limit = rates_total - 1; for(int i = limit; i >= 0; i--) { Label2Buffer[i] = Label1Buffer[i] = close[i]; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
если нужно графическими обьектами рисовать, то просто рассчитывайте правый край линии путем прибавления времени в секундах, редко пользуюсь графическими обьектами, пример сходу не набросаю
если нужно графическими обьектами рисовать, то просто рассчитывайте правый край линии путем прибавления времени в секундах, редко пользуюсь графическими обьектами, пример сходу не набросаю
Такое у меня реализовано.
если речь идет о отрисовке индикаторными буферами, то только штатной SetIndexShift
Смещение не годится. Оно смещает всё что есть в массиве , а мне нужно выравнять два разных по размеру массива по левому краю с начальной точки , при этом второй должен продолжить линии правее нулевого бара.
п.с. хотя нужно подумать, понял вроде как сделать.
Смещение не годится. Оно смещает всё что есть в массиве
не смещает сам массив, а только отрисовка будет смещена
Вам просто нужно при расчете отрисовки делать смещение в индексах массива
не смещает сам массив, а только отрисовка будет смещена
Вам просто нужно при расчете отрисовки делать смещение в индексах массива
Да всё разобрался. Просто нужно ещё было сделать два цикла для рисования первой линии и второй что длиннее.
Тема закрыта.
Сносите ветку!
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть два массива разного размера. Первый N - размер , второй N + y.
Есть ли возможность отобразить вторую линию вперёд на y значений ? MQl4
Смещение линии не годится.