Обновление платформы MetaTrader 4 билд 625: Журналы в MetaTrader Market и новый MetaViewer - страница 45

 
AlexeyVik:
Так и должно быть. Иначе будет на каждый МЕ как и на МТ свой файл справки.
А какие неудобства при работе с флешки?

Да не то что бы неудобства... Вот только при стремлении воспользоваться справкой на чужом компе, МТ начинает оставлять "мусор", который там не нужен. А если закачать справку на флешку и открывать ее отдельно, то она не будет обновляться. В общем кто-то что-то не додумал в этом вопросе.... Хотя, я думаю, что не сложно сделать раздел в настройках, где можно было бы указывать пути расположения настроек, шаблонов, справочных файлов и тд
 

Объявляем переменные count...

Используем

Ошибок 0, предупреждений 0. Т.е. инклюдник переменную видит.

Проверяем. Используем в инклюднике необъявленную переменную.

Ошибка. Значит, точно, инклюдник объявленные глобальные (внешние) переменные знает.

Давным давно тут всё впорядке

Когда же появится тут?

В сервисдеск писал, ответили, что "инклюдники ничего не знают о внешних переменных". Однако, видим, что знают.

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

 
Кстати, сегодня ещё на "фишку" нарвался в своем проекте... Есть несколько переменных, которые начинаются на "count...". Есть несколько классов, которые подключаются (#include). В одном из классов почему-то список выпадает, правда, в списке присутствует только одна переменная "cont..." Т.е. уже непонятно дважды: почему вдруг выпадает; почему всё-таки одну показывает
 
Alexey_74:

Объявляем переменные count...

Используем

Ошибок 0, предупреждений 0. Т.е. инклюдник переменную видит.

Проверяем. Используем в инклюднике необъявленную переменную.

Ошибка. Значит, точно, инклюдник объявленные глобальные (внешние) переменные знает.

Давным давно тут всё впорядке

Когда же появится тут?

В сервисдеск писал, ответили, что "инклюдники ничего не знают о внешних переменных". Однако, видим, что знают.

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

А зачем в инклуднике в его функциях использовать переменные, заданные в одном отдельно взятом коде? Для чего тогда нужен этот инклудник? Для работы с конкретно одним-единственным кодом?

Передавайте параметры по ссылке в функции, находящиеся в инклуднике. Тогда вам не нужно будет помнить все имена переменных. Они от кода к коду могут меняться, просто передаваться в инклудник по ссылке. Тогда можно будет пользоваться функциями инклудника в любой программе, а не в одной-единственной.

 
На этапе финальной компиляции, когда инклюдник реально вставляется в общий поток/тело программы, он начинает видеть вышестоящие пределения. Когда работаете в отдельном файле, который не содержит информации о включениях/определениях других файлов, интеллисенс не может их определить. Так что все верно.
 
Renat:
На этапе финальной компиляции, когда инклюдник реально вставляется в общий поток/тело программы, он начинает видеть вышестоящие пределения. Когда работаете в отдельном файле, который не содержит информации о включениях/определениях других файлов, интеллисенс не может их определить. Так что все верно.


Очевидно, туплю. Что значит "реально вставляется в общий поток/тело программы". Объясните на примере:

#property strict

int count1,count2,count3,count4;

#include <IncTest.mqh>
//+------------------------------------------------------------------+
void OnStart()
{
  FuncFromInclude();
}
//+------------------------------------------------------------------+

Тут инклюдник реально вставляется или нет? Что значит "работает в отдельном файле"? И что такое тогда "инклюдник" в принципе?

И просьба осветить так же второй момент, который просто описал, сейчас покажу:

1. Пишем скрипт.

2. Создаем инклюдник, в котором описываем класс

3. Инклюдник с классом подключаем в скрипт

Имеем следующее:

Скрипт. Причем, переменные countema и countbar объявлены после инклюда

В классе CMain:

Однако список вывалился. Только в нем оказалась одна переменная из двух. Но вывалился. Но одна.

Т.е. в одних случаях вываливается не полностью, в других не вываливается совсем. Если во всем этом есть логика, то я её не улавливаю.

 

https://forum.mql4.com/61996

https://forum.mql4.com/ru/60554/page104

у меня вот такая точно проблема но дело не в вирусах - все компилится ок. Но не тестится и не инициализируется в терминале

В чем причина?

 

В MQL4 есть перечисление ENUM_DAY_OF_WEEK. Тем не менее, функция TimeDayOfWeek() возвращает результат типа int, а не ENUM_DAY_OF_WEEK. При этом численные значения перечисления полностью совпадают со значениями, возвращаемыми функцией TimeDayOfWekk().

Будет ли исправлен результат, возвращаемый функцией, или подобное поведение останется для совместимости со старыми программами?

 
Alexey_74:


Очевидно, туплю. Что значит "реально вставляется в общий поток/тело программы".

Вы понимаете смысл директивы #include?
Эта строчка перед компиляцией просто заменяется содержимым файла, указанного между <>.
Естественно, переменные "видны".

А когда вы редактируете сам mqh-файл, который понятия не имеет о том, куда его потом будут включать, эти переменные для него просто отсутствуют.
Вы можете попробовать в сам mqh-файл включить основной файл советника (через тот же инклуд), и переменные станут "видны" (раньше работало, сейчас - не знаю). Но это, мягко говоря, плохой стиль.


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

 
chief2000:

Я предполагал что поскольку терминальные переменные хранятся в памяти то скорость работы с ними будет соизмерима со скоростью работы с массивами, но на том примере видно что это далеко не так. Ренат видимо проверял на мощном компьютере с i7 и у него получилось 8 секунд (против нуля с массивами). Пользовательские компьютеры обычно значительно слабее, у меня разница составила 17 секунд (в примере я округлил до 15) и это только 10 000 циклов.

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

Если вам критично быстродействие, работайте со своими массивами, а сбрасывайте их на диск (то ли с помощью терминальных переменных, то ли с помощью файла) - по необходимости (например, по событию таймера каждые 5 минут).

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