Обновление платформы MetaTrader 4 build 670: виртуальный хостинг, web-запросы и работа с сигналами из MQL-программ - страница 43
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я немного не так делал, я вставлял принты при prev_calculated равном нулю и не равном нулю.
И вызывал на новых свечах и через равное количество тиков. Не в тестере.
Предлагаю скопировать из документации по MQL5 в справку статью про Bars.
Это удивительное слово работает в MQL4 и как переменная, и как функция, к тому же кажется аналогов второму варианту функции в MQL4 нет.
Предлагаю скопировать из документации по MQL5 в справку статью про Bars.
Это удивительное слово работает в MQL4 и как переменная, и как функция, к тому же кажется аналогов второму варианту функции в MQL4 нет.
оба варианта есть, скоро и в справку будет добавлено, полагаю. просто это не так приоритетно как устранение более серьёзных багов:
Ни одна из функций, работающая со списком ордеров, не осуществляет запрос данных с сервера. Поэтому суть вопроса неясна - для чего еще какие-то функции?
В общем вопрос снят. Все у меня нормально работает как оказалось. Сделал трассировку вызовов и увидел, что действительно обращение к указателям элементов списка происходит из метода Clear()->DeleteCurrent()->DetachCurrent(), который вызывается из деструктора класса CList. А т.к. в своей библиотеке SCL я уничтожаю сам все созданные объекты, то получаем ошибку invalid pointer access in 'List.mqh' (372,7) после окончания тестирования либо во время оптимизации после окончания очередного прогона параметров.
В общем стоит наверное делать проверку перед удалением указателя на список - пуст он или нет. Если не пуст, то пусть деструктор класса CList с ним работает.
В общем вопрос снят. Все у меня нормально работает как оказалось. Сделал трассировку вызовов и увидел, что действительно обращение к указателям элементов списка происходит из метода 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 сделать его активным, чтобы можно было сразу вводить текст (аналогично щелчку мыши на нем)?
Такой алгоритм не универсален, т. к. пользователь может поменять порядок сортировки в "Истории счета". Он подходит только для тестера.
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
Что сие означает?