Новая версия платформы MetaTrader 5 build 5260: улучшения в Algo Forge, расширение OpenBLAS и новые правила наследования в MQL5 - страница 4

 
Rashid Umarov #Не смог воспроизвести. Может сервер был временно недоступен?

у меня не работает... Ни из ME4 ни из ME5

 
Перестал работать Printsceen в MT5 с кнопки на клавиатуре. может кто знает как разрулить?
[Удален]  
@Aleksandr Safro #Перестал работать Printsceen в MT5 с кнопки на клавиатуре. может кто знает как разрулить?

У меня нет проблем с «PrintScreen» в MT5 build 4260 на Windows 10. Что вы используете?

I don't have any "PrintScreen" issues with MT5 build 4260 on Windows 10. What are you using?

 

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

Новая версия платформы MetaTrader 5 build 4230: больше встроенных приложений и расширение поддержки ONNX

Ilyas, 2024.03.19 17:20

справка по ArrayResize не содержит описания для случая, когда reserve_size == -1

это изменяет обычное поведение ArrayResize при уменьшении размера массива, происходит реальное перевыделение памяти, аналог C++ std::vector<>::shrink_to_fit()

Если уменьшается размер массива, то перевыделение происходит? Под перевыделением имею в виду резервирование другого куска памяти и копирование туда данных.

Т.е. нужно понять, происходит ли при уменьшении массива дополнительная потребность в памяти?


К сожалению, происходит.

void OnStart()
{
  MqlTick Ticks[];
  
  const int Size = ::ArrayResize(Ticks, (int)ArraySizeMax<MqlTick>()); // https://www.mql5.com/ru/forum/170952/page311#comment_58016524
  
  Print(Size); // 147462958
  Print(ArrayResize(Ticks, Size - 1, -1)); // -1
}


Просьба подумать над другим алгоритмом поведения при уменьшении размера массива. Спасибо.

Строка для поиска: Uluchshenie 136.
 
build 5273
Инструменты (Ctrl+T)->Торговля->Прибыль->0.00 (не показывает общую прибыль(убытки) по открытым сделкам);

Окно котировок (F10) - не сохраняет настройки окна;

 

b5273, ArrayResize может "отключить" Print.

struct A { MqlTick Ticks[]; };

void OnStart()
{  
  A Array[];
  
  ArrayResize(Array, 1);
  
  const int Size = ::ArrayResize(Array[0].Ticks, (int)ArraySizeMax<MqlTick>());
  Print(Size); // После перезагрузки Терминала может отсутствовать Print.
}


Журнал Терминала.

Scripts script Test6 (XAUUSD,M1) loaded successfully
MQL5    VirtualAlloc failed in large allocator, size=12614369504
MQL5    VirtualAlloc failed in large allocator, size=9460777088
MQL5    VirtualAlloc failed in large allocator, size=9263677600
MQL5    VirtualAlloc failed in large allocator, size=9165127872
MQL5    VirtualAlloc failed in large allocator, size=9115852928
MQL5    VirtualAlloc failed in large allocator, size=9103534176
MQL5    VirtualAlloc failed in large allocator, size=9097374752
MQL5    VirtualAlloc failed in large allocator, size=9095835072
MQL5    VirtualAlloc failed in large allocator, size=9095786824
MQL5    VirtualAlloc failed in large allocator, size=9095786584
MQL5    VirtualAlloc failed in large allocator, size=9095786528
MemoryException 21364736 bytes not available, 0 heapmin result
MemoryException 21364736 bytes not available, 0 heapmin result
Scripts script Test6 (XAUUSD,M1) removed


Однако, в журнале эксперта может не быть (не при каждом запуске) соответствующего принта.

Строка для поискаOshibka 147.

 
fxsaber #:

b5273, ArrayResize может "отключить" Print.

В принципе, ArrayResize запросто может "убить" и любой работающий советник.
 
fxsaber # :
В принципе, ArrayResize запросто может "убить" и любой работающий советник.

Очень жаль

 
Читаю: «Ранее, если в производном классе или структуре определялся метод с тем же именем, что и в базовом классе, происходила перегрузка: все варианты методов (и предка, и потомка) были доступны в наследнике. Теперь, методы с одинаковым именем в потомке скрывают методы предка (method hiding).»

Вопрос: а что там сейчас в плюсах? Бьерн еще в 98 стандарте столько дичи намутил, хотя бы с friend, а вроде скоро на повестке С++ 26?
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Перегрузка
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Перегрузка
  • www.mql5.com
В пределах одного класса можно определить два или более методов, которые совместно используют одно и тоже имя, но имеют разное количество...
 

b5274, разное поведение оптимизатора компилятора для статических и динамических массивов.


В ходе обсуждения выяснилось, что статические массивы работают быстрее динамических.

Немного изменил старый код и получил неожиданный результат.

#define BENCH(A)                                                             \
  {                                                                          \
    const ulong StartTime = GetMicrosecondCount();                           \
    int Res = A;                                                             \
    Print(#A + ":" + (string)(GetMicrosecondCount() - StartTime) + " mcs."); \
    Print(Res);                                                              \
  } 
  
struct A
{
  int i;
  double d;
  bool b;

  void Init()
  {
    this.i = 1;
    this.d = 1;
    this.b = 1;
  }
};

#define SIZE 10000000

int Bench1()
{
  static A Array[SIZE];  
  int Res = 0;
  
  for (uint i = SIZE; (bool)i--;)
  {
    Array[i].Init();
      
    Res += (int)(Array[i].i + Array[i].d + Array[i].b);
  }
  
  return(Res);
}

int Bench2()
{
  A Array[];    
  int Res = 0;

  for (uint i = ArrayResize(Array, SIZE); (bool)i--;)
  {
    Array[i].Init();
      
    Res += (int)(Array[i].i + Array[i].d + Array[i].b);
  }
  
  return(Res);
}

void OnStart()
{
  for (int i = 0; i < 5; i++)
  {
    BENCH(Bench1()); // Bench1(): 0 mcs.
    BENCH(Bench2()); // Bench2(): 62367 mcs. 
  }
}

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

Строка для поиска: Uluchshenie 137.

Подробнее о способах ускорения оптимизации советников в MT5.
Подробнее о способах ускорения оптимизации советников в MT5.
  • 2025.09.15
  • www.mql5.com
Классификация советников. Все советники, запускаемые в Оптимизаторе, делятся на два типа. Торговые. Статистические: "обучение", обработка котировочных данных. Каждый из них тоже делится на два типа