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

 
Valeriy Yastremskiy #:

Да, в моем случае начинать надо с первого, а не нулевого.) верное замечание.

Почему же? Нулевой бар сдвигается вместе с остальными влево. А если сдвинуть все бары кроме нулевого, то в результате получится два одинаковых значения по первому и второму индексу. 

P.S. Если мы сдвигаем данные, то свободную ячейку всегда нужно перезаписывать. Иначе, окажутся два одинаковых значения подряд.

 
Valeriy Yastremskiy #:

ЗЫЗЫ перезаписывая значение нулевого до сдвига, мы теряем значение нулевого индекса.

Вот и я о том же!

 
Valeriy Yastremskiy #:

Что такое кольцевой буфер в мкл

Что-то типа

static int head=0;
for(i=head,count=0;count<ArraySize(A);i++,count++)
  {
   if(i>=ArraySize(A))i=0;
   DoSomething(A[i]);
  }

или даже

static int head=0;
for(i=head,count=0;count<ArraySize(A);count++)
  {
   if(++i>=ArraySize(A))i=0;
   DoSomething(A[i]);
  }
 
JRandomTrader #:

Что-то типа

или даже

сдвиг индекса в массиве в мкл. боязно. Хотя работать должно. И кстати вес цикла смены индекса(а это цикл) и цикл присвоений не должны сильно отличатся.

 
Vitaly Muzichenko #:

Как это использовать, можно показать?

Задача вот

Вот готовый код, но цикл немного пугает

---

Опять-же, внутри ArrayCopy()  есть цикл, и возможно не один. Так что код от замены вряд-ли станет легче и быстрее

В этом коде надо указать один массив

int  ArrayCopy(
   void&        dst_array[],         // куда копируем
   const void&  src_array[],         // откуда копируем
   int          dst_start=0,         // с какого индекса пишем в приемник
   int          src_start=0,         // с какого индекса копируем из источника
   int          count=WHOLE_ARRAY    // сколько элементов
   );

с какого индекса писать и с какого копировать зависит от направления смещения массива. То-есть если надо чтобы в индексе 0 всегда были свежие, новые данные, то копировать надо с 0 и писать с 1. Таким образом значения в индексе 0 и 1 будут одинаковы, а потом в 0 писать свежее значение.

И я очень сомневаюсь, что ArrayCopy() внутри имеет такой-же цикл как пользовательский. Таким образом имея некий массив определённым размером, его на каждом тике сдвигаем на единичку и затем его копируем в индикаторный буфер который отображается в виде линии…

 
Подскажите пожалуйста вот функция пробоя дневного фактала 
//+----------------------------------------------------------------------------+
//|Определение пробоя дневного фрактала вверх                                  |
//+----------------------------------------------------------------------------+
int BreakdownSignalUpD1()
  {
   int sig=-1;
   double resistD1 = GetNearestUpFractal(PERIOD_D1);
   if (resistD1 < Ask)
     sig=0;
   if (resistD1 >= Ask)
     sig=1;  
   return(sig);
  }

А вот функция отображающая на экране пробой 

ObjectCreate("signal100",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal100",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE, 40);
   ObjectSetText("signal100",DoubleToString(BreakdownSignalUpD1(),0),18,"Times New Roman", clrRed);

Подскажите пожалуйста как сделать так чтобы на экране было не 0 или 1 а 0 это "ДА" 1 это "НЕТ"

Спасибо 

 
EVGENII SHELIPOV #:
Подскажите пожалуйста вот функция пробоя дневного фактала 

А вот функция отображающая на экране пробой 

Подскажите пожалуйста как сделать так чтобы на экране было не 0 или 1 а 0 это "ДА" 1 это "НЕТ"

Спасибо 

string boolToStr(bool value) { return ((value) ? "true" : "false"); }
 
EVGENII SHELIPOV #:
Подскажите пожалуйста вот функция пробоя дневного фактала 

А вот функция отображающая на экране пробой 

Подскажите пожалуйста как сделать так чтобы на экране было не 0 или 1 а 0 это "ДА" 1 это "НЕТ"

Спасибо 

ObjectSetText("signal100",BreakdownSignalUpD1()==0?"Да":"Нет",18,"Times New Roman", clrRed);

Что-то типа этого.

 
JRandomTrader #:

Что-то типа этого.

Спасибо

 
Alexey Viktorov #:

В этом коде надо указать один массив

с какого индекса писать и с какого копировать зависит от направления смещения массива. То-есть если надо чтобы в индексе 0 всегда были свежие, новые данные, то копировать надо с 0 и писать с 1. Таким образом значения в индексе 0 и 1 будут одинаковы, а потом в 0 писать свежее значение.

И я очень сомневаюсь, что ArrayCopy() внутри имеет такой-же цикл как пользовательский. Таким образом имея некий массив определённым размером, его на каждом тике сдвигаем на единичку и затем его копируем в индикаторный буфер который отображается в виде линии…

Попробую.

---

В целом, мой код работает успешно, прошло более часа


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