Особенности языка mql5, тонкости и приёмы работы - страница 266

 
Aleksey Vyazmikin #:

В цикле?

ну откуда тогда выигрышь..что по очереди качать в разноимённые массивы, что в один

 
Maxim Kuznetsov #:

ну откуда тогда выигрышь..что по очереди качать в разноимённые массивы, что в один

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

 
Aleksey Vyazmikin #:

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

Ты вроде бугалтер, попробую на твоём языке перефразировать.
В чем смысл брать кредиты по необходимости если можно взять сразу большой на всю жизнь
 
Aleksei Beliakov #:
Ты вроде бугалтер, попробую на твоём языке перефразировать.
В чем смысл брать кредиты по необходимости если можно взять сразу большой на всю жизнь

Вы бухгалтер? С чего взяли, что сможете влезть в другую профессиональную область и чего то объяснять там?

Речь про программирование тут в ветке, поэтому пробуйте придумать свой пример в виде кода - это будет продуктивней.

 
Aleksey Vyazmikin #:

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

А если вы не знаете какого размера потребуется массив?

Пример:

Забили массив нулями и перебираете заполненную часть пока не встретится 0. А вдруг в массив попадает значение 0 и тут обрывается цикл… Но если массив увеличивается по необходимости, то прекращение цикла будет по достижению последнего элемента массива. Всё чётко…

 
Alexey Viktorov #:
А если вы не знаете какого размера потребуется массив?

Тогда действительно иного пути нет. Просто как то не сталкивался с этим.

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

 
Aleksey Vyazmikin #:

Тогда действительно иного пути нет. Просто как то не сталкивался с этим.

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

Практически всегда имею дело с большими массивами (десятки Mb), и ,причем, изначально с неизвестным размером.
В ближайшем будущем, думаю, придется переходить на тики, а это сотни Mb, и даже, возможно гигабайты. 
Третий параметр в ArrayResize сильно упрощает жизнь.
 
Теперь #-перевод в строку не удаляет пробелы.

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

Что делать при таком расширении спредов?

fxsaber, 2024.06.25 22:17

#define PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  // (1.46483 * 0.1 + 1.46484 * 1.0) / (1.0 + 0.1) = 1.4648390909090907
  PRINT((1.46483 * 0.1 + 1.46484 * 1.0) / (1.0 + 0.1));
}

Будьте внимательны, можно попасть на кроссплатформенном коде.

 

Билды торговых серверов позже 12.06.2024 (например, b4410) заполняют второй байт MqlTick.flags тиков (SymbolInfoTick и CopyTicks*).


void OnStart()
{
  MqlTick Ticks[];
  
  const int Amount = CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, D'2024.06.01' * 1000);
  
  Print(AccountInfoString(ACCOUNT_SERVER)); // MetaQuotes-Demo
  
  for (int i = 0; i < Amount; i++ )
    if ((bool)(Ticks[i].flags >> 8))
    {
      //  time = 2024.06.12 15:52:50.286 bid = 1.08241 ask = 1.08241 last = 0.00000 volume = 0 
      Print(Ticks[i].time);

      // 1158 TICK_FLAG_BID TICK_FLAG_ASK FLAG_UNKNOWN (1152)
      Print(Ticks[i].flags);

      break;
    }
}
 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам".