Обновление платформы MetaTrader 4 build 670: виртуальный хостинг, web-запросы и работа с сигналами из MQL-программ - страница 39

 
Y.A.K._:

Боюсь, мы с Вами не договоримся.

В общем-то я решил свою локальную задачу, тем не менее остаюсь при своём мнении, что фраза в справке

не соответствует действительности.

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

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

Интересует прописываемый путь. Вызов импортируемых функций

Поиск импортируемой библиотеки EX4 производится в следующей последовательности:

  1. Директория, путь к которой задается относительно директории импортирующего EX4 эксперта (скрипта, индикатора);
  2. Директория каталог_терминала\MQL4\Libraries;
  3. Директория MQL4\Libraries в общей директории всех клиентских терминалов MetaTrader 4 (Common\MQL4\Libraries).

Это первый пункт надо юзать? И как это должно выглядеть, если к примеру эксперт вызывает функции из индикатора?

 
Y.A.K._:

 И как это должно выглядеть, если к примеру эксперт вызывает функции из индикатора?


Так ведь речь идет о вызове функций из библиотеки. Кстати, не пробовал импортировать функции из индикатора. Разве можно?
 
Точно не знаю. Пока не вышло.
 
Scriptong:

Так ведь речь идет о вызове функций из библиотеки. Кстати, не пробовал импортировать функции из индикатора. Разве можно?

#import "имя_файла"
    func1 define;
    func2 define;
    ...
    funcN define;
#import

 
Импортировать из индикатора функции получилось, но для этого нужно кинуть индикатор в Libraries. К тому же сам себя из импортируемой функции по GetRelativeProgramPath() вызвать он не может, потому что возвращается местоположение не индикатора, а импортирующей функцию программы. Попробую вернуться к первоначальному варианту: внедрить в библиотеку индикатор и вызывать его оттуда. Первоначально не вышло, так как ресурс искался не в библиотеке, а в импортирующей программе, но повторное прочтение справки навело на мысли.
 

По WebRequest:

  1. Спасибо.
  2. Не работает с адресами с указанным портом. Типа http://site:1234/... . В список шаблон добавляется, но скрипт возвращает ошибку 4060.
  3. По-моему, обращения к localhost можно разрешить по умолчанию.
 

Подскажите, как отловить событие закрытия ордера по S/L или T/P.

 
_Konstantin_:

Подскажите, как отловить событие закрытия ордера по S/L или T/P.


Такое системное событие появилось в МТ5  OnTrade() , к сожалению аналога нет в MT4.

Ловить можно разными способами

  1)  вставить в таймер обработку ордеров - таймер запускать раз в секунду -  или чаще - этот метод плох тем что будет тормозить

  2)  на каждом тике конкретной пары - пробегать по ордерам - держа в памяти предыдущее состояние  ордеров - более оптимальный способ чем п1

      т е имеем массив ордеров типа

              moOrdersOpenPrice[]

             moOrdersOpenType[]

             moOrdersTP[]

             moOrdersSL[]

и т д

  если при очередной итерации ( приходе тика )  количество ордеров стало меньше - искать в истории ордер который сработал по ТП или SL

---


Но идеально , если разработчики добавят событие  OnTrade()  при изменении ордера - как это реализовано в МТ5

 
YuraZ:

Такое системное событие появилось в МТ5  OnTrade() , к сожалению аналога нет в MT4.

Ловить можно разными способами

  1)  вставить в таймер обработку ордеров - таймер запускать раз в секунду -  или чаще - этот метод плох тем что будет тормозить

  2)  на каждом тике конкретной пары - пробегать по ордерам - держа в памяти предыдущее состояние  ордеров - более оптимальный способ чем п1

      т е имеем массив ордеров типа

              moOrdersOpenPrice[]

             moOrdersOpenType[]

             moOrdersTP[]

             moOrdersSL[]

и т д

  если при очередной итерации ( приходе тика )  количество ордеров стало меньше - искать в истории ордер который сработал по ТП или SL

---


Но идеально , если разработчики добавят событие  OnTrade()  при изменении ордера - как это реализовано в МТ5


           

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

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

Видимо пока остается только способ анализа состояния цены по отношению к уровням S/L или T/P.

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