Пожелания для МТ5 - страница 23

 

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

 

Хорошо бы в редакторе сделать ползунок, разделяющий окно редактирования на два независимых, как в Ворде. Было бы удобно копировать, писать и смотреть одновременно два участка программы.

 
MetaDriver:

Вот бы...

 

Единственное исключение (и то не обязательное) - выходные дни.  Их можно и пропускать, но опять же ГАРАНТИРОВАННО синхронно по разным инструментам.

 

 

Вы знаете ?, что на самом деле в выходные форекс работает

просто не работает большинство брокеров

 ---

некоторые даже дают котировки в выходные, и разрешают работать с ордерами

что весьма удобно

 в выходные могут раздигать спред - т к ликвидности нет

 но прикрыться отрыться что то поменять возможность есть

 

Хорошо бы добавить в стандартные библиотеки функцию по работе со строкой вида: Разобрать строку на модули ограниченные "началом", "концом" и записать их в массив строк. Например:   int count=(string, array,"<h1>","</h1>",flag); .Где  string - это входящяя строка, array - выходящий массив строк,  "<h1>" - начало модуля в строке, "</h1>" - конец модуля в строке. flag - указывает включать или нет ограничители модуля в выходные строки массива, count - число найденных модулей.

В данном случае  int count=(string, array,"<h1>","</h1>",flag); - создаст массов всех заголовков, которые есть в  string'е.

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
 
Это можно реализовать и существующими средствами, почитайте статью Разбор HTML средствами MQL4
Разбор HTML средствами MQL4 - Статьи по MQL4
  • www.mql5.com
Разбор HTML средствами MQL4 - Статьи по MQL4: примеры использования экспертов, тестирования и оптимизации
 
Rosh:
Это можно реализовать и существующими средствами, почитайте статью Разбор HTML средствами MQL4
Ну это понятно, что можно поэтапно имеющимися средствами сделать это. Но лучше, чем две страницы кода иметь одну готовую функцию, которая всё сразу делает....
 
Rinng:
Ну это понятно, что можно поэтапно имеющимися средствами сделать это. Но лучше, чем две страницы кода иметь одну готовую функцию, которая всё сразу делает....
Добавь в библиотеку или в mqh файл и никаких проблем ;))
 

В редакторе была бы полезной функция скрывать/открывать некоторые блоки кода программы. Например разделы "функции", "определения", "классы"..., а можно скрывать/открывать  вложенные участки кода программы, например операторы for, if ...

Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Основы языка / Операторы / Оператор цикла for - Документация по MQL5
 
Rosh писал(а)  :
Почитайте раздел Организация доступа к данным, там написано как правильно запрашивать историю

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

 Недопонял другого, вот этого: "Параметр "Max bars in charts" ограничивает доступное для графиков, индикаторов и mql5-программ количество баров в формате HC. Это ограничение действует для данных всех таймфреймов, и предназначено в первую очередь для экономии ресурсов.

Устанавливая большие значения данного параметра, следует помнить, что при наличии достаточно глубокой истории ценовых данных для младших таймфреймов расход памяти на хранение таймсерий и буферов индикаторов может составить сотни мегабайт и достигнуть ограничения оперативной памяти для программы клиентского терминала (2Гб для 32-битных приложений MS Windows)."

 

 В данном эпизоде я, наверное, не очень разобрал что к чему, а заодно ещё раз подчеркну, что здесь и сейчас в отношении MQL-программ я вопросов задавать не буду, однако в отношении автоматического запроса терминалом истории при ручной работе непосредственно с графиком вышеприведённые мотивы для экономии ресурсов выглядят странно. Код у вас закрытый, поэтому судить не могу, как там всё устроено. Я не знаю, является каждая свеча нехилым объектом с нехилыми гроздями свойств и атрибутов или идёт упрощённая графическая отрисовка/перерисовка структурного образа рынка. Если опустить тему выкачивания недостающей истории, ограничившись той, которая уже есть в распоряжении, возникает вопрос о рациональности подхода отрисовки. Даже если выставить в настройках определённое и большое максимальное количество баров на графике, даже если сжать бары графика до иголки, даже если выставить у монитора очень высокое разрешение, не поверю, что вся видимая картинка убьёт оперативку при грамотной подгрузке из исторической СУБД баров на экран. Вы используете принцип LIFO? Максимальное количество баров на графике может быть бесконечно большим, но то, что за экраном (что справа, что слева), вообще не должно находиться в памяти, а при скроллинге подгружаться в оперативку с выгрузкой ушедшего за экран должно мгновенно, т. к. здесь мы не работаем с Сетью, а только с имеющейся локально историей. О каких таких ужасных 2 Гб-ограничениях может идти речь?

 ...Наверное, я очень сильно не в теме, так что заранее пардоньте деревенщину. 

 

Каждый ценовой бар описывается структурой MqlRates (других характеристик нет) размером в 52 байта:

struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     volume;       // объем
  };

Чтобы оценить объемы рабочих баз данных, надо заглянуть в каталог /bases/имя сервера/символ/. Например, для EURUSD можно увидеть следующее:

В этом каталоге лежат исходные сжатые минутные контейнеры, как их отдает торговый сервер. Видно, что в среднем минутки за 1 год занимают около 15 мб. Это очень специфический формат сжатия для минимизации трафика.

В каталог cache кладутся созданные по необходимости расжатые рабочие базы данных:


Тут видно, что минутки с 1993 года (на самом деле до 1999 года вместо минуток идут дневки) занимают в расжатом и готовом для работы виде 231 мегабайт. При этом рядом лежащие часовки занимают всего 4 мб.

Если умножить 52 байта на 4 400 000 баров, то как раз получится значение около 230 Мб. Наложение простого индикатора Moving Average с одним рабочим буфером (double) на такую историю потребует 4 400 000 * 8 = 35 мб памяти.


Когда трейдер выставляет в настройках терминала "Максимум баров в окне", то он явно указывает "загружать в память для работы не больше указанного числа баров". Если в загружена вся история минуток (идет работа на чарте M1), наложено несколько тяжелых многобуферных индикаторов, используются эксперты, то затраты памяти могут быть существенными. Причем нельзя считать "я работаю с одним окном, вижу 500 баров, поэтому остальное можно выгрузить". Выгрузить нельзя - на этих данных живут и работают индикаторы, эксперты и тд.

Мы реализовали очень эффективную модель кеширования, когда данные и индикаторы всегда хранятся в единственном числе. То есть, открытие 5 окон на EURUSD:M1 не требуют создания 5 буферов с данными, а несколько абсолютно одинаковых по параметрам индикаторов имеют всего одну копию. При долгом неиспользовании индикаторов или чартов их данные автоматически высвобождаются и поднимаются назад по необходимости.

Кроме того, у нас есть 64 битная версия клиентского терминала, которая может без ограничений работать с огромной историей. Эта версия выйдет как только закончим тесты MQL5 под 64 битной средой.

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