Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 787

 

Обнаружил страннй глюк при рисовании на графике МТ5: стрелки вместо лоу свечи устанавливаются в произвольных местах, как будто со смещением к графику




#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

#property strict

#property indicator_buffers 1 
#property indicator_plots   1
 
#property indicator_label1  "Arrows" 
#property indicator_type1   DRAW_ARROW 
#property indicator_color1  clrGreen 
#property indicator_width1  1

double Buf_0[];

int OnInit()
  {

   SetIndexBuffer(0,Buf_0,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   
   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[])
  {
   
   for (int i=0; i<rates_total; i++)
      {
   
      Buf_0[i]=iLow(_Symbol, _Period,i);
      }
   return(rates_total);
  }

 
psyman:

Обнаружил страннй глюк при рисовании на графике МТ5: стрелки вместо лоу свечи устанавливаются в произвольных местах, как будто со смещением к графику




1. В индикаторе УЖЕ ЕСТЬ массив low. Его и применяйте.

2. Не нужно прогонять визуализацию на максимальной скорости.

3. Код СТРАШНО ГЛЮЧНЫЙ - так как на каждом тике делается проход ПО ВСЕМ БАРАМ.

 
Vladimir Karputov:

1. В индикаторе УЖЕ ЕСТЬ массив low. Его и применяйте.

2. Не нужно прогонять визуализацию на максимальной скорости.

3. Код СТРАШНО ГЛЮЧНЫЙ - так как на каждом тике делается проход ПО ВСЕМ БАРАМ.

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[])
  {
   ArrayInitialize(Buf_0,EMPTY_VALUE);

   for (int i=0; i<rates_total; i++)
      {
   
      Buf_0[i]=iLow(_Symbol, _Period,i);
      }
   return(rates_total);
  }
 
Vladimir Karputov:

1. В индикаторе УЖЕ ЕСТЬ массив low. Его и применяйте.

2. Не нужно прогонять визуализацию на максимальной скорости.

3. Код СТРАШНО ГЛЮЧНЫЙ - так как на каждом тике делается проход ПО ВСЕМ БАРАМ.

Я не стал выкладывать сюда код, а написал самый простой для упрощения разбора.

Про расскажите подробнее что не так, про максимальную скорость непонятно.

 
Vitaly Muzichenko:

Виталий, инициализации почему-то не помогает. Пробовал в онинит прописать PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); то же не работает :(

 
psyman:

Я не стал выкладывать сюда код, а написал самый простой для упрощения разбора.

Про расскажите подробнее что не так, про максимальную скорость непонятно.

Начните исправлять по шагам. Например сначала исправьте:

В индикаторе УЖЕ ЕСТЬ массив low. Его и применяйте.

 
Buf_0[i]=iLow(_Symbol, _Period,i);

iLow работает как серия true, Buf_0 - false, low[] тоже false. Т.е. 0й элемент в вашем случае получает значение rates_total-1 (зеркально)

Нужно перевернуть один из них, например: 

Buf_0[i]=iLow(_Symbol, _Period,rates_total-1-i);
 
psyman:

Обнаружил страннй глюк при рисовании на графике МТ5: стрелки вместо лоу свечи устанавливаются в произвольных местах, как будто со смещением к графику



Знание загадки про яблоки у Буратино обязательно поможет в этой проблеме. Я её в подробностях не помню, подождём кто перескажет без ошибок.

 
Igor Zakharov:

iLow работает как серия true, Buf_0 - false, low[] тоже false. Т.е. 0й элемент в вашем случае получает значение rates_total-1 (зеркально)

Нужно перевернуть один из них, например: 

Это индикатор! В OnCalculate УЖЕ ЕСТЬ массивы 

                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[]

Зачем в индикатор пихать iXXXX функции? 

 
Vladimir Karputov:

Это индикатор! В OnCalculate УЖЕ ЕСТЬ массивы 

Зачем в индикатор пихать iXXXX функции? 

Да откуда ж мне знать? Человек, задавший вопрос, использовал именно iLow(), значит нужно ему. Может проще воспринимает, может планирует через входную переменную обращаться к другому символу или таймфрейму (не помню, есть ли в четвёрке copyrates?)

Добавлено: вопрос по пятерке был задан в четвёрошной ветке. Я проглядел, каюсь. Но, ответ всё равно тот же.

Причина обращения: