Бета-тестирование MetaTrader 5 началось! - страница 85

 

А что сейчас используется вместо "IsExpertEnabled()" и "IsLibrariesAllowed()", что-то не нашел в справке нечего подобного?


Одними TERMINAL_TRADE_ALLOWED, TERMINAL_DLLS_ALLOWED, TERMINAL_EMAIL_ENABLED и TERMINAL_FTP_ENABLED на мой взгляд не обойтись...


PS

Предлагаю добавить еще TERMINAL_EXPERT_ENABLED и TERMINAL_LIB_ALLOWED


PPS

Хотя в поиске у справочника (4 релиз) есть упоминание о "TERMINAL_EXPERTS_ENABLED", только вот незадача без описания и детальной информации.

Справочник выкидывает в раздел с описанием "ENUM_TERMINAL_INFO_INTEGER" и на этом все завершается (к сожалению).....

 
betmen >>:

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

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

Суть задачи следующая выдается список доступных в market watch инструментов далее собирается массив из имен этих инструментов плюс по каждому инструменту заводятся по 9 мувингов. Для наглядности результаты выкладываются в виде массива кнопок в окне вызвавшего их инструмента.

Как правильно написать этот код на MQL5 без использования Sleep?


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

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

  • обеспечение достаточной глубины данных на заданном таймфрейме/символе;
  • расчет значений индикатора на этих данных.

Кроме того, непонятно, почему для приложенного скрипта должно быть критичным время выполнения? А если предполагается все эти вычисления делать в эксперте (то есть, опять таки нет необходимости получить сразу всё и сразу на первом же тике ), то опять-таки время не критично.

Вы просто пишете код, не задумываясь - есть ли данные для расчета, можно ли вообще получить эти данные, какое количество данных достаточно и так далее. А в этом варианте скрипт и не должен работать корректно.

Чуть позже я выложу более правильный вариант.

 

Как и ожидалось MQL5 в упор не видит TERMINAL_EXPERTS_ENABLED, исправьте пожалуйста поскорей...

 
Rosh 01.11.2009 12:08
betmen писал(а) >>

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

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

Суть задачи следующая выдается список доступных в market watch инструментов далее собирается массив из имен этих инструментов плюс по каждому инструменту заводятся по 9 мувингов. Для наглядности результаты выкладываются в виде массива кнопок в окне вызвавшего их инструмента.

Как правильно написать этот код на MQL5 без использования Sleep?


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

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

  • обеспечение достаточной глубины данных на заданном таймфрейме/символе;
  • расчет значений индикатора на этих данных

Да уж пожалуйста дайте пример получения достаточной глубины всех необходимых таймфреймов в начале работы эксперта, чтобы не было сообщения об отсутствии данных. Я сейчас для этого вывожу в OnInit графики всех используемых в советнике таймфреймов, хотя эсперт навешен только на одном из них.

Нельзя-ли сначала закачать все данные, а уж потом позволить эксперту работать дальше (всё в программе естественно).

 

Еще два старых вопрос о главном:

1. Поддерживает ли MT5 и MQL5 в своем текущем состоянии общение с DLL и как это правильно сделать?


Просто пробовал переписать свои библиотеки и подключить их при помощи mqh-файла, не вышло :(

При компиляции секции выскакивает следующая ошибка (DLL лежит в каталоге Libraries).


unexpected end of program
no executable file produced


Точно такой результат получается если обращаться к системным DLL из состава Windows XP или ex5-файлам...


Вот такой код вроде в 4 работает, а в 5 не хочет....

#import "LibName.dll"
.........
#import


2. Доступно ли в текущий момент работа при помощи DDE (что-то не найду даже намеков на это)?

 

В советнике использовались следующие функции: IsDemo, IsTesting, IsOptimization и IsStopped.

Как их теперь реализовать?

 
Interesting >>:

Как и ожидалось MQL5 в упор не видит TERMINAL_EXPERTS_ENABLED, исправьте пожалуйста поскорей...

Этой константы больше нет, так в MQL5 кнопка "Запретить/разрешить эксперта" относится именно к совершению торговых операций (а не к запрету работы эксперта), сам эксперт в любом случае получает все тики и продолжает работу.

 
Erm955 >>:
Rosh 01.11.2009 12:08

Да уж пожалуйста дайте пример получения достаточной глубины всех необходимых таймфреймов в начале работы эксперта, чтобы не было сообщения об отсутствии данных. Я сейчас для этого вывожу в OnInit графики всех используемых в советнике таймфреймов, хотя эсперт навешен только на одном из них.

Нельзя-ли сначала закачать все данные, а уж потом позволить эксперту работать дальше (всё в программе естественно).

Можно, пример будет выложен завтра.

 
betmen писал(а) >>

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

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

Суть задачи следующая выдается список доступных в market watch инструментов далее собирается массив из имен этих инструментов плюс по каждому инструменту заводятся по 9 мувингов. Для наглядности результаты выкладываются в виде массива кнопок в окне вызвавшего их инструмента.

Как правильно написать этот код на MQL5 без использования Sleep?

Работает и без слип, время выполнения - 0 миллисекунд.

 
Interesting >>:

2. Доступно ли в текущий момент работа при помощи DDE (что-то не найду даже намеков на это)?

Про DDE говорили - его не будет. :-(

А жаль...

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