Проблема перевода с МТ4 на МТ5. Или, точнее, невозможность без'ошибочного исполнения некоторых алгоритмов в МТ5. - страница 4
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
С OnCalculate() не проблема. Весь графический интерфейс работает через OnChartEvent() . Кнопок графического интерфейса более 400. Часть кнопок никаким образом не взаимодействует с таймсериями. Функции OnCalculate() и OnTrade() могут подождать и до следующего тика. Психологически это незаметно. А вот с OnChartEvent() сложнее. Здесь подключается психология человека. Пользователь программы нажимает на кнопку графического интерфейса. И не получает желаемого ответа. Какова его реакция? Одна из реакций - нажимает вторично на ту же кнопку. У меня сделано так, что второе нажатие на многие из кнопок отключает функционал, подключенной этой кнопкой. Предвижу Ваше предложение сделать отключение действия кнопки каким-то другим образом. Но есть эта же программа для МТ4. Там все работает нормально. Получится, что в МТ4 один алгоритм взаимодействия с графическим интерфейсом, а в МТ5 - другой. Такое поведение одной и той же программы вызовет только отторжение.
При переводе на МТ5 что-то подобное делал - включал выход из OnChartEvent(). Не хочу соврать, что именно из-за этого графический интерфейс просто умирал.
Да, и у меня обращение к таймсериям в OnTimer() происходит через 5 минут. Сделаю через 2 минуты. Проверю, что будет происходить.
Артем, Ваши предложения и ранее были полезными.
Нет, предложения изменять логику работы с графикой конечно же не будет - кроссплатформенный код должен работать одинаково.
Вполне может быть так, что когда пользователь нажал на кнопку, но не видит ничего, то на самом деле всё есть, только график не обновлён ещё (он сам обновится только с приходом тика)
Нет, предложения изменять логику работы с графикой конечно же не будет - кроссплатформенный код должен работать одинаково.
Единственное, что могу предложить для доработки кнопок - это то, что в любом случае, когда нужная таймсерия ещё не доступна, то всё равно нет возможности на её данных строить графику. В этом случае нужно ждать момента, когда данные станут доступны, а на время ожидания делать кнопки неактивными, например - делать их по подобию интерфейсов виндовс: если не доступно действие по кнопке, то кнопка серая. Такая логика может присутствовать для обеих платформ - чтобы не было различий в коде.
ChartRedraw() у меня задействуется при выходе из крупных блоков, например, из OnChartEvent() и из других. То есть с этой функцией все нормально.
Про всплывающие подсказки. Они являются только как бы индикаторами того, что при нажатии на номер или символ все сработает.
Если кликаешь мышью по номеру и символу, то должен сработать один из элементов OnChartEvent() - CHARTEVENT_OBJECT_CLICK. Он не срабатывает, если не появляется всплывающая подсказка. Здесь бы понять, почему так происходит. Не срабатывает CHARTEVENT_OBJECT_CLICK.
А за доступом к таймсериям буду следить плотно.
ChartRedraw() у меня задействуется при выходе из крупных блоков, например, из OnChartEvent() и из других. То есть с этой функцией все нормально.
Про всплывающие подсказки. Они являются только как бы индикаторами того, что при нажатии на номер или символ все сработает.
Если кликаешь мышью по номеру и символу, то должен сработать один из элементов OnChartEvent() - CHARTEVENT_OBJECT_CLICK. Он не срабатывает, если не появляется всплывающая подсказка. Здесь бы понять, почему так происходит. Не срабатывает CHARTEVENT_OBJECT_CLICK.
А за доступом к таймсериям буду следить плотно.
В самом начале обработчика событий графика выведите в журнал параметр sparam - тогда на любое действие будет выводиться информация. Далее начните ограничивать вывод - если есть событие щелчка по объекту (id== CHARTEVENT_OBJECT_CLICK), то выведите sparam в журнал. И так потихоньку дойдёте до причины.
В самом начале обработчика событий графика выведите в журнал параметр sparam - тогда на любое действие будет выводиться информация. Далее начните ограничивать вывод - если есть событие щелчка по объекту (id== CHARTEVENT_OBJECT_CLICK), то выведите sparam в журнал. И так потихоньку дойдёте до причины.
Чтобы не было проблем с привязкой к номерам и символам, необходимо повысить приоритет номеров и символов с помощью OBJPROP_ZORDER.
В МТ4 работает без этого. Но и в МТ4 на всякий случай повысил приоритет. Причем приоритет волновых символов сделал больше, чем у номеров.
С этим разобрался.
Дергание всех таймсерий через 2 минуты - подбираю разные варианты для наиболее гладкого выполнения этой задачи.
Процесс пошел...
Чтобы не было проблем с привязкой к номерам и символам, необходимо повысить приоритет номеров и символов с помощью OBJPROP_ZORDER.
В МТ4 работает без этого. Но и в МТ4 на всякий случай повысил приоритет. Причем приоритет волновых символов сделал больше, чем у номеров.
С этим разобрался.
Дергание всех таймсерий через 2 минуты - подбираю разные варианты для наиболее гладкого выполнения этой задачи.
Процесс пошел...
Гладкость тут никак :)
Тут тормоза.
Но приходится мириться с тем, что есть.
Необъятное обнять не возможно.)
Гладкость тут никак :)
Разносить нельзя. Если хотя бы по одному тф не будет обновлено, индикатор может некоторые граф. построения сделать некорректно.
С другой стороны, делал проверки доступности таймсерий перед функциями ОнКалькуляте и ОнЧартЕвент. Как предлагалось.
Обновление таймсерий и проверки доступности таймсерий вызывают сильные тормоза.
Все-таки получаются прерывания доступа к таймсериям. Как и говорил при создании ветки в одном из первых постов. Это подтверждает то, что приходится программно обновлять таймсерии.
Это первое.
Второе. Почему сделано так, что каждому разработчику приходится мучаться с организацией доступа к таймсериям?
Почему не создан какой-то дополнительный "механизм" исключающий эти мучения?
Если кому-то необходимы эти мучения, никто не запрещает использовать то, что сейчас есть. А для тех, кто считает, что универсальный альтернативный доступ к таймсериям устраивает, лучше, чтобы такой доступ был сделан разработчиками.
У меня несколько человек просили перевести с МТ4 на МТ5 программу. Перевел. Меня этот перевод не устраивает. Но пока, скачавшие программу, не жалуются. Может и их устраивает. Хотя сомневаюсь в этом.
От себя же добавлю. Прекращаю экспериментировать с оптимизацией доступа к таймсериям. Это непродуктивное использование времени. Есть и более интересные занятия. Пусть, кому это интересно, работают с МТ5. Единственное, что из МТ5 можно выгрызть - историю котировок. Для использования в обучении НС.
С другой стороны, делал проверки доступности таймсерий перед функциями ОнКалькуляте и ОнЧартЕвент. Как предлагалось.
Обновление таймсерий и проверки доступности таймсерий вызывают сильные тормоза.
Предлагалось делать это по таймеру раз в полторы минуты. А никак не перед каждым тиком, и тем более — не по событию чарта.
Доступ к таймсериям в МТ5 действительно не идеальный. Но если нужно решить задачу, а не найти оправдание, то это возможно.