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

 

Я немного не так делал, я вставлял принты при prev_calculated равном нулю и не равном нулю.

И вызывал на новых свечах и через равное количество тиков. Не в тестере.

 

Предлагаю скопировать из документации по MQL5 в справку статью про Bars.

Это удивительное слово работает в MQL4 и как переменная, и как функция, к тому же кажется аналогов второму варианту функции в MQL4 нет.

 
Y.A.K._:

Предлагаю скопировать из документации по MQL5 в справку статью про Bars.

Это удивительное слово работает в MQL4 и как переменная, и как функция, к тому же кажется аналогов второму варианту функции в MQL4 нет.


оба варианта есть, скоро и в справку будет добавлено, полагаю. просто это не так приоритетно как устранение более серьёзных багов:


 
Scriptong:

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

В общем вопрос снят. Все у меня нормально работает как оказалось. Сделал трассировку вызовов и увидел, что действительно обращение к указателям элементов списка происходит из метода Clear()->DeleteCurrent()->DetachCurrent(), который вызывается из деструктора класса CList. А т.к. в своей библиотеке SCL я уничтожаю сам все созданные объекты, то получаем ошибку invalid pointer access in 'List.mqh' (372,7) после окончания тестирования либо во время оптимизации после окончания очередного прогона параметров.

В общем стоит наверное делать проверку перед удалением указателя на список - пуст он или нет. Если не пуст, то пусть деструктор класса CList с ним работает.

 
_Konstantin_:

В общем вопрос снят. Все у меня нормально работает как оказалось. Сделал трассировку вызовов и увидел, что действительно обращение к указателям элементов списка происходит из метода Clear()->DeleteCurrent()->DetachCurrent(), который вызывается из деструктора класса CList. А т.к. в своей библиотеке SCL я уничтожаю сам все созданные объекты, то получаем ошибку invalid pointer access in 'List.mqh' (372,7) после окончания тестирования либо во время оптимизации после окончания очередного прогона параметров.

В общем стоит наверное делать проверку перед удалением указателя на список - пуст он или нет. Если не пуст, то пусть деструктор класса CList с ним работает.


В общем приделал в библиотеке классов SCL костыль - при оптимизации объект класса CList созданный по указателю, не уничтожается в деструкторе класса. При тестировании и реальной работе, объект класса CList созданный по указателю уничтожается в деструкторе класса. Утечки памяти не наблюдается.
 
Кто подскажет как программно узнать имена работающих советников в одном терминале на других чартах при условии, что программа определяющая это работает на одном чарте, а нужно установить имена советников на соседних чартах и их количество не ограниченно?
 

Вопросы по MT4 build 670.

1. При вызове функции WebRequest(method, url, cookie, referer, timeout, data, data_size, result, headers) отправляется весь массив data[] независимо от параметра data_size. При значениях timeout отличающихся от 50 миллисекунд (например, 500), в некоторых случаях функция не выполняется, код ошибки 4024 (ERR_INTERNAL_ERROR), для возобновления работы функции WebRequest необходимо перезапустить торговый терминал. К сожалению, нельзя использовать в качестве параметра url IP адрес (например, "http://192.168.0.1" или зарегистрированные слова, такие как "localhost"), нельзя использовать другие порты, кроме 80 и, возможно, 443; невозможно формировать свои HTTP заголовки или вообще отказаться от них (если необходимо переслать "полезных" несколько байт, все равно пересылаются заголовки, размером в несколько сотен байт).

2. При изменении значения параметра "Notify of trade transactions" вкладки "Notifications" окна "Options" торгового терминала, новое значение начинает действовать не сразу, а через некоторое время (при снятии галочки терминал продолжает слать Push сообщения еще какое-то время).

3. При повторном запуске терминала MT4, а также, после компиляции программы в MetaEditor-е в дереве "Navigator" всегда развернута ветвь "Indicators", независимо от того, какая ветвь была развернута ранее.

 

P.S. Кто нибудь подскажет как из MQL программы (советника, скрипта) средствами языка MQL4 (без DLL):

1. Выбрать необходимый  интервал времени истории торговли (загрузить с торгового сервера список закрытых и удаленных ордеров для последующего доступа к ним с помощью функции OrderSelect(Index, SELECT_BY_TICKET, MODE_HISTORY) аналогично щелчку правой кнопкой мыши на вкладке Account History и выбора "All History" из контекстного меню)?

2. После создания объекта OBJ_EDIT сделать его активным, чтобы можно было сразу вводить текст (аналогично щелчку мыши на нем)?

 
Scriptong:
Такой алгоритм не универсален, т. к. пользователь может поменять порядок сортировки в "Истории счета". Он подходит только для тестера.

Я не имел в виду выбор ордера с индексом ХисториТотал-1, я имел в виду обратный цикл с проверкой времени закрытия (и дальнейшей обработкой только последней закрытой сделки).
 
zdd:

P.S. Кто нибудь подскажет как из MQL программы (советника, скрипта) средствами языка MQL4 (без DLL):

1. Выбрать необходимый  интервал времени истории торговли (загрузить с торгового сервера список закрытых и удаленных ордеров для последующего доступа к ним с помощью функции OrderSelect(Index, SELECT_BY_TICKET, MODE_HISTORY) аналогично щелчку правой кнопкой мыши на вкладке Account History и выбора "All History" из контекстного меню)?

2. После создания объекта OBJ_EDIT сделать его активным, чтобы можно было сразу вводить текст (аналогично щелчку мыши на нем)?

1. Никак.

2. Попробуйте вызвать для него OnClick() 

 

Win7x64. При запуске МТ4 (670) выдается надпись: 2014.09.05 16:37:37.192 Memory handler: cannot allocate 298618800 bytes of memory

Что сие означает?

 

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