Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Без проблем, angevogeur
Изначально код был таким:
Я просто изменил его до этого:
Как вы можете видеть, я не менял "мясо" функций. Я просто сделал изменения, необходимые для соответствия новой функциональности. Одна вещь, о которой я все еще немного туманен, это переход от start() к OnStart() или OnTick(), в зависимости от того, что это (я забыл на данный момент, но я все еще использую start() без проблем. Следует отметить, что это пользовательский индикатор. Еще одна вещь, которая меня раздражает, - это ограничения на то, что вы можете использовать в зависимости от того, кодируете ли вы советника, индикатор или скрипт. Есть некоторые вещи, которые имеют смысл (например, запрет на реализацию сделок, если вы не программируете советника), и другие, которые не имеют смысла (например, запрет на использование MessageBox в индикаторе). Еще одна вещь, которая меня очень раздражает, это отсутствие событий для таких вещей, как открытие и закрытие сделок. Это было бы очень полезно для того, что я сейчас создаю.
Пример того, к чему я клоню своим последним утверждением, следующий: Я хочу иметь возможность отображать сигнал на покупку, если выполняются определенные критерии, отображать сигнал на закрытие сделки на покупку, если выполняются определенные критерии, но я также хочу, чтобы мой пользователь мог отменить сигнал на покупку и ждать другого, если он хочет, и то же самое для сигнала на закрытие. Если пользователь решит закрыть сделку, я хочу, чтобы сигналы на покупку и закрытие сделки на покупку исчезли, а индикатор следил за критериями входа для другой сделки. Части отмены работают отлично, но я не могу обнаружить события Open и Close, потому что MQL4 не предоставляет для этого сообщений.
Если вы посмотрите мой профиль, то увидите, что я далеко не начинающий программист. Просто язык не предоставляет всей той функциональности, которую профессионал ожидает и требует от современной платформы разработки. И еще одно замечание: я не могу заставить отладку работать, что является моей основной проблемой. Я следовал документации, но когда я попытался привести отладчик в движение, я получил график, на котором появился диалог свойств для инициализации моего индикатора, но когда я нажал "Окей", чтобы завершить настройку индикатора, график исчез, и на этом все закончилось. Возможно, что-то теряется при переводе с русского на английский, и я что-то упускаю, или, возможно, "пирог" еще не испечен. Как профессионал, я знаю, насколько это грандиозная задача - создать такой язык и среду разработки. Мои замечания носят скорее характер FYI для сотрудников отдела разработки, а не жалоб.
Prof
Без проблем, angevogeur
Изначально код был таким:
Prof
Если у вас не объявлены переменные, которые я задаю, а также не объявлены и не проработаны методы, которые я вызываю, это не скомпилируется. Это невозможно. Я ожидал, что вы это знаете. Я опубликовал то, что, как я думал, вы просили - решение, которое устранило мою проблему. В любом случае, если вы работаете с MetaQuotes и пытаетесь понять, что происходит с MetaTrader и исправить это, я опубликовал больше информации ниже. Закомментируйте блок if в init(), объявите MA_Display_Time_Frame глобально как целое число и добавьте эти методы :
Поскольку это коммерческий продукт, это далеко не весь код индикатора, но он должен скомпилироваться и потенциально вызвать проблему при использовании оригинальных методов init() и deinit(). Этого достаточно для создания пары меток и кнопок. Как отметил один из авторов, сбой был периодическим. Однако он был связан с любым действием, которое могло вызвать деинициализацию индикатора, например, изменение свойств индикатора, смена таймфреймов или остановка и перезапуск терминала. Если вы хотите проверить изменение свойств, добавьте эти экстерны в глобальные файлы:
Если вы добавите внешние компоненты, нет необходимости комментировать блок if, который ссылается на них. Этого должно быть достаточно, чтобы вы смогли скомпилировать программу и попытаться воспроизвести проблему. Проблема не возникала с тех пор, как я изменил старые функции инициализации и деинициализации и перешел на новые версии. Если вам понадобится что-то еще, дайте мне знать. Я буду следить за этой темой.
У меня была похожая ситуация, инди работал нормально при падении на график.
Он работал нормально после изменения параметров, он работал нормально после сдвига Tf.
После закрытия MT4 и перезапуска, инди не появился.
Он был в списке индикаторов на графике, но не работал.
После открытия окна параметров и нажатия кнопки OK, indi сразу же исчез из списка.
Я перепробовал все уловки, включая описанные в постах выше, ничего не помогло.
Оказалось, что это проблема деления на 0!
Простое условие if(x!=0) решило проблему.
Ага, у меня только что возникла такая же проблема с другим инди.
Без "if" при каждом запуске платформы у инди возникает проблема деления на 0,
в новом MT4, похоже, не сохраняется информация, пока не будет поставлена галочка.
Другим решением было бы использовать OnCalculate() вместо start() или OnStart(), я полагаю?
Но об этом можно пожаловаться в MetaQuotes.
Вы должны использовать прием return (0).
Если есть интерес, кто-нибудь расскажет подробнее.
Вы должны использовать трюк с возвратом (0).
Кто-нибудь расскажет об этом подробнее, если будет интерес.
Ну, старые индикаторы, которые вы можете найти везде в интернете, не получают свой код, измененный автоматически.
Если кто-то умеет настраивать коды и понимает проблему, он может сделать это самостоятельно.
Все остальные просто будут испытывать дискомфорт от того, что не видят свои инди каждый раз, когда открывают MT4.
Если у них есть шаблон, они могут использовать его для восстановления инди, но это означает делать это каждый раз.
Шаблоны - это другая история, в новом Built 625.
Ребята,
Вы все не в теме. То, что вы описываете, - это проблема синхронизации, которая всегда была проблемой. Вы можете решить эту проблему очень просто:
Любая ошибка деления на ноль, которую вы получаете, связана с тем, что вы пытаетесь произвести вычисления до того, как сервер успокоился. Если вы делаете вычисления в функции инициализации - НЕ ДЕЛИТЕСЬ! Поместите приведенный выше код в start() или OnStart() и ТОГДА делайте то, что вам нужно. Дадас, попытка сделать все так просто, как ты делаешь, обернется для тебя большими неприятностями. Вам повезло с инди.
Когда indi исчезает, у вас сбой инициализации. Если вы посмотрите на свои журналы, вы увидите "сбой глобальной инициализации". Вам нужно выяснить, почему у вас это происходит, и устранить это. Если вы этого не сделаете, все, что вы сделали, это наложили пластырь на порез, на который нужно было наложить швы, и это вернется к вам.
Мне кажется, что эта ошибка не имеет никакого отношения к OnInit(), а описание ошибки вводит в заблуждение.
Всего одна строка кода
Он выдаст ошибку array out of range.
Смените таймфрейм и получите Global initialisation failed и индикатор будет удален с графика.