Ошибки, баги, вопросы - страница 3591

 
Nikolai Semko #:
Вопрос знающим:
Есть ли возможность открыть программно окно свойств индикатора или советника?

Предлагал, когда еще сервис-деск был -- https://www.mql5.com/ru/forum/271954

[Вместо СД] Функция, открывающая окно настроек индикатора
[Вместо СД] Функция, открывающая окно настроек индикатора
  • 2018.08.12
  • Andrey Khatimlianskii
  • www.mql5.com
Начата: 2017.02.27 01:06, #1682027 У советника есть "мордочка" в правом верхнем углу графика и пункт меню под правой кнопкой мыши...
 
Nikolai Semko #:
Вопрос знающим:
Есть ли возможность открыть программно окно свойств индикатора или советника?

Скажите, а зачем? Может сможем предложить иное решение...

 
Vitaly Murlenko #:

Скажите, а зачем? Может сможем предложить иное решение...

Нет проблем с иными решениями. Спасибо.
Тем более изменение любого параметра через окно свойств ведёт к полной переинициализации программы, что в большинстве случаев не оправдано.
Спросил для того, что иногда нужен ленивый вариант для быстрого доступа к свойствам одним кликом мышки, а не пятью.
 

Почему стек помещает больше, чем указано в #property stacksize?

Я что-то неправильно измерил?

#define _stacksize (int)16e6
#property stacksize _stacksize

int callCount = 0;
ulong sum = 0;
int currSize = 0;

void f(long &prev[])
  {
   callCount++;
   long arr[200000];
   currSize += sizeof(arr);
   PrintFormat("stack %i/"((string)_stacksize), currSize);
   for(int i = ArraySize(arr) - 1; i >= 0; i--)
     {
      arr[i] = callCount * 10 + i;
      sum += prev[i] + MathAbs(int(arr[i] % 3));
     }
   f(arr);
  }

void OnStart()
  {
   long arr[200000];
   ArrayInitialize(arr, 0);
   currSize += sizeof(arr);
   f(arr);
   PrintFormat("callCount %i, sum %I64i", callCount, sum);
  }


 

Правильно ли я понимаю, что MQL_MEMORY_USED возвращает размер кучи?

#define _numOfArrayElements ((int)(1e6 - 16) / sizeof(long))
class OneMegabyteObject
  {
public:
   long arr[_numOfArrayElements];
   OneMegabyteObject(int seed)
     {
      if(seed < 1)
         seed = 1;
      for(int i = _numOfArrayElements - 1; i >= 0; i--)
         arr[i] = seed + (i % seed);
     }
  };

#define _printMemoryUsed(a) Print("#"((string)a)" memory used ", MQLInfoInteger(MQL_MEMORY_USED), " MB")
void OnStart()
  {
   OneMegabyteObject toStack(MathRand() % 100);
   OneMegabyteObject toStack2(MathRand() % 100);
   _printMemoryUsed(1); // #1 memory used 0 MB
   OneMegabyteObject* toHeap = new OneMegabyteObject(MathRand() % 100);
   _printMemoryUsed(2); // #2 memory used 1 MB
   useObjects(toStack, toHeap, toStack2);
   delete toHeap;
  }

// Trying to avoid compiler optimizations
void useObjects(OneMegabyteObject &obj1, OneMegabyteObject &obj2, OneMegabyteObject &obj3)
  {
   int a = (MathRand() % 9) + 1;
   long result = 0;
   for(int i = _numOfArrayElements - 1; i >= 0; i--)
      result += MathAbs(long(obj1.arr[i] * obj2.arr[i] - obj3.arr[i])) % a;
   Print("result = ", result);
  }
 
Nikolai Semko #:
Нет проблем с иными решениями. Спасибо.
Тем более изменение любого параметра через окно свойств ведёт к полной переинициализации программы, что в большинстве случаев не оправдано.
Спросил для того, что иногда нужен ленивый вариант для быстрого доступа к свойствам одним кликом мышки, а не пятью.
Я всё же применяю иное решение - вывожу окно с ключевыми настройками как панель.
 
Vladislav Boyko #:

Почему стек помещает больше, чем указано в #property stacksize?

Я что-то неправильно измерил?


К пользовательскому размеру, мы добавляем до 4MB, чтобы гарантировать стек для встроенных MQL функций

Дополнительно

  • минимальный размер стека, для экспертов и скриптов - 8MB
  • для индикаторов, размер стека всегда - 4MB
 
Vladislav Boyko #:

Правильно ли я понимаю, что MQL_MEMORY_USED возвращает размер кучи?

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

Стек, индикаторные буфера, торговые данные (массивы в параметрах OnCalculate) сюда не попадают.

 

Привет. Подскажите, как сделать чтоб при новом окне графика, торговая история была отключена?

 
Andrei Sokolov #:

Привет. Подскажите, как сделать чтоб при новом окне графика, торговая история была отключена?

Сохранить дефолтный шаблон с отключенной историей. Сам не пробовал, но должно сработать.