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

 
JRandomTrader #:

В передаче данных такое использовалось с незапамятных времён.

Удобно. С этим нельзя не согласиться. Но как я уже говорил, всегда нужно учитывать, на какое количество данных можно откатиться.

 
Vitaly Muzichenko #:

Давай-те примером, это будет в тему

Код для модернизации есть

В данном коде не выйдет, т.к. индикаторный буфер живёт независимо от нас и в нём мы кольцевой буфер не организуем - нет способа объяснить это MT.

 
Mihail Matkovskij #:

С помощью ArrayCopy можно только из другого массива перенести данные. Но сместить их нельзя.

Кто вам сказал такую глупость?

Внимательно читайте как это делается.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Alexey Viktorov, 2022.02.13 18:21

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

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() внутри имеет такой-же цикл как пользовательский. Таким образом имея некий массив определённым размером, его на каждом тике сдвигаем на единичку и затем его копируем в индикаторный буфер который отображается в виде линии…


 
JRandomTrader #:

В данном коде не выйдет, т.к. индикаторный буфер живёт независимо от нас и в нём мы кольцевой буфер не организуем - нет способа объяснить это MT.

Ясно.

Ну работает - пусть работает пока так, результата ещё нет, нужно ждать наших "друзей" пиндосов, пока откроется рынок, а это не скоро.

Погляжу, что можно наарбитражить.

 
JRandomTrader #:

или даже

А косяка-то никто не заметил!

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

А косяка-то никто не заметил!

До сих пор не вижу 

 
Vitaly Muzichenko #:

До сих пор не вижу 

i должно инкрементироваться в конце цикла, после использования.

А вот проверять на вылет за массив можно и в конце цикла, и в начале следующего.

 
Alexey Viktorov #:

Кто вам сказал такую глупость?

Внимательно читайте как это делается.


Не знал, что эта функция столь универсальна. Но если даже и так, то что это меняет? ArrayCopy сдвинет данные быстрее обычного цикла?

 
Vitaly Muzichenko #:

Сейчас код рабочий, но по скорости есть сомнения из-за цикла.

Что это будет?

Хочу проверить несколько кухонь на возможность арбитража, индикатор будет рисовать разность значений, работает по таймеру раз в 100мс. Задержки выполнения кода критичны для данной ситуации.

Тогда не знаю. Попробуйте ArrayCopy. Функция вроде умеет сдвигать данные. Но вряд ли она сделает это быстрее обычного цикла. Хотя, кто знает... Нужно пробовать.

 
Mihail Matkovskij #:

Тогда не знаю. Попробуйте ArrayCopy. Функция вроде умеет сдвигать данные. Но вряд ли она сделает это быстрее обычного цикла. Хотя, кто знает... Нужно пробовать.

Не знаю с чего начать

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