Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Евгений, barabashkakvn скорее прав, чем не прав... нужно флиртовать с окружением МТ. Если в Ините что-то не выдаётся, то скорее всего окружение не подготовлено... нужно безусловно его подготовить при попытке получить какую-то инфу...
Я человек уже достаточно взрослый, флиртовал-то по-молодости только )) да и то с девушками... с программами не доводилось.
Ну что мне от окружения-то, ежели функция на 10-й запрос только выдает правильный ответ? что там неподготовленного? если бы только на запуске терминала или при переключении счета/сервера, то понятное дело.
Но когда история есть, терминал в работе, и на каждом перезапуске эксперта функция выдает чушь - не в окружении дело.
В реализации Tick Value 100% ошибка. Доказывать не собираюсь, и так много времени потратил, пока внаглую цикл не сделал. Заметь цикл без RefreshRates, синхронизации и т.п., а тупо вызов функции.
Володя всегда прав, на то он и модератор ))
В общем вот, что обнаружил: http://forum.mql4.com/ru/8336/page2#83875
Это не грабли, а принципиальный момент. Полностью рыночное окружение можно распознать только по приходу тика.
Сейчас не проверим это - выходные и тиков нет. Будем посмотреть завтра.
Ну дык оттуда и цитата Рената
В отличие от индикатора, функция init() эксперта(!) гарантированно вызывается при наличии всего полного рыночного окружения. Функция init() у эксперта вызывается не в момент прикрепления эксперта к графику, а после прихода первого ценового тика.
Я как раз эксперт и пишу, а не индикатор, поэтому рыночное окружение при OnInit уже готово (должно быть) по его словам.
На счет OnInit и первого тика, это не правда ИМХО, т.к. сейчас рынок закрыт, тиков нет, а OnInit вызывается. Другое дело что событие тика может быть послано MT4 самому себе для искусственного запуска OnInit. Это я еще понять могу.
Так что дело вовсе не в окружении.
Вот еще
Извините, тут я некорректно выразился. Функция init() эксперта вызывается не с приходом первого тика, а после загрузки рыночного окружения (списка символов и последних цен bid/ask, но без гарантии полной подгрузки исторических данных).
Так что окружение готово уже. Ренату вроде доверяю.
Значится так. Похоже удалось найти причину выскакивания числа вида -1.#IND. Это не число или это бесконечность. Пришлось ввести проверку - и я таки дождался получения верного значения. Иногда, правда, приходится ждать несколько секунд.
апр
Как воочию убедится, что проверка на корректность числа работает (напомню вся тема про МТ4):
- Оставить один открытый с проверяемым советником.
- В обзоре рынка через правую кнопку мышки "Удалить все символы".
- Перезагрузить MetaTrader 4.
Чтобы обнаружить ошибку иногда нужно перезагрузить раза два.Как воочию убедится, что проверка на корректность числа работает (напомню вся тема про МТ4):
- Оставить один открытый с проверяемым советником.
- В обзоре рынка через правую кнопку мышки "Удалить все символы".
- Перезагрузить MetaTrader 4.
Чтобы обнаружить ошибку иногда нужно перезагрузить раза два.Никогда не пользовался MathIsValidNumber()... Попробую вместо своей проверки.
Но вопрос таки остается. Какого художника SymbolInfoDouble выдает такие значения и даже не генерит ошибку чтобы обработать GetLastError...
В доках и намека нет на подобную ситуацию.
В плане бреда - а давайте любая функция будет такое вытворять, скажем OrderSend... не важно открыла ордер или нет, вернет когда захочет -1.#IND вместо номера тикета и не сгенерирует ошибку.
Я к тому что это ситуация не нормальная, выходит за рамки процесса информационного взаимодействия. )))
Володя, ты согласен?
Но вопрос таки остается. Какого художника SymbolInfoDouble выдает такие значения и даже не генерит ошибку чтобы обработать GetLastError...
В доках и намека нет на подобную ситуацию.
В плане бреда - а давайте любая функция будет такое вытворять, скажем OrderSend... не важно открыла ордер или нет, вернет когда захочет -1.#IND вместо номера тикета и не сгенерирует ошибку.
Я к тому что это ситуация не нормальная, выходит за рамки процесса информационного взаимодействия. )))
Подозреваю 2 ситуации при расчете TICK VALUE внутри терминала.
1. Деление на 0
2. Неверное обращение к индексу массива символов.
3. Вряд ли хотели вернуть "-1" в виде строки и не указали ASCIIZ типа "-1\x00"... хотя я уже ничему не удивляюсь.
Хотя по докам обязана вернуться ошибка:
Тезка, да конечно исправят, остается надеяться что поскорей. Не в первой прокладки лепить:) Главное что мы этот, мягко говоря недочет, уже знаем. Тестим далее, полет нормальный...
Жека, к тому времени как исправят, мы уже налепим таких обработок MathIsValidNumber на каждое число полученное от каждой функции терминала ))
И там уже пусть терминал возвращает хоть черта лысого, нас фиг проберешь этим ))
Жека, к тому времени как исправят, мы уже налепим таких обработок MathIsValidNumber на каждое число полученное от каждой функции терминала ))
И там уже пусть терминал возвращает хоть черта лысого, нас фиг проберешь этим ))