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

 
Vitaly Muzichenko #:

Не могу сообразить, как решить задачу

Нужен тиковый график, то есть, пришёл тик - сдвигаем буфер на единицу и рисуем

Рисовать нужно 60 последних тиков, то есть - 60 баров.

---

Нужно сделать, как это реализовано в терминале окна "Тики"


Там же не бары а линия.

Код бары рисует в новом окне. Может поможет.

Файлы:
SaveTicks.mq4  6 kb
 
Vitaly Muzichenko #:

Не могу сообразить, как решить задачу

Нужен тиковый график, то есть, пришёл тик - сдвигаем буфер на единицу и рисуем

Рисовать нужно 60 последних тиков, то есть - 60 баров.

---

Нужно сделать, как это реализовано в терминале окна "Тики"


Для решения данной задачи нужен еще один массив. Можно фиксированной длины, например, 60. Нужно заполнять его тиками каждый раз сдвигая данные на 1 с помощью цикла. После записи каждого тика данный массив следует копировать в массив Buffer и его данные отобразятся в чарте.

 
Valeriy Yastremskiy #:

Там же не бары а линия.

Код бары рисует в новом окне. Может поможет.

Ничего не смог оттуда почерпнуть. Может не с той стороны смотрю?


Mihail Matkovskij #:

Для решения данной задачи нужен еще один массив. Можно фиксированной длины, например, 60. Нужно заполнять его тиками каждый раз сдвигая данные на 1 с помощью цикла. После записи каждого тика данный массив следует копировать в массив Buffer и его данные отобразятся в чарте.

Вот не соображу, как делать сдвиг.

Если не сложно, покажите кодом

 
Vitaly Muzichenko #:

Ничего не смог оттуда почерпнуть. Может не с той стороны смотрю?


Вот не соображу, как делать сдвиг.

Если не сложно, покажите кодом

A[0]=Bid;

for(i=0;i<60;i++){A[i+1]=A[i]} 

 
Valeriy Yastremskiy #:

A[0]=Bid;

for(i=0;i<60;i++){A[i+1]=A[i]} 

Это сделал, работает

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[])
{
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
  }
  double b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  Buffer1[0]=b;
  for(int j=10; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
  }
  return(rates_total);
}

---

Что-то подсказывает, что можно обойтись без цикла.

Так ли это?

 
Vitaly Muzichenko #:

Это сделал, работает

---

Что-то подсказывает, что можно обойтись без цикла.

Так ли это?

В таймсериях этот цикл скрыт. без разницы с какой стороны двигать. мне с 0 логичнее и понятнее. В МКЛ не встречал функций сдвига. Это работа с индексами. Это первый вошел, последний вышел. В питоне есть. В МКЛ вроде нет.

 

Вот что не так?

Начинает работать нормально, но на каждом новом баре идёт смещение и выход с диапазона.

Как это избежать?

---

P.S. Вроде всё, работает нормально, добавил

  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
  }
 
Vitaly Muzichenko #:

Вот что не так?

Начинает работать нормально, но на каждом новом баре идёт смещение и выход с диапазона.

Как это избежать?

---

P.S. Вроде всё, работает нормально, добавил

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

 
Valeriy Yastremskiy #:

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

Массив на всю доступную историю, мне это не нужно.

Нужно буквально 50-100 баров

Вот так


 

Доброе время суток .

Вывожу на монитор величину дневного фрактала в виде его величины или вертикальной линии. Линия не отображается а величина равна 0.

Вот часть кода

 double FractalDayUpper = iFractals(Symbol(), PERIOD_D1, MODE_UPPER, 0);
   ObjectCreate("signal00",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal00",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE,100);
   ObjectSetText("signal00",DoubleToString(FractalDayUpper,5),18,"Times New Roman", clrRed);


 Подскажите в чем ошибка