Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я думаю причина в том, что MT5 в отличии от MT4, использует многопоточность. Из-за этого происходит данное рассогласование. Если упростить слегка ваш код (и кстати убыстрить), не считывая одну и ту же информацию два раза, то все заработает корректно. Причем, это даже алгоритмическая ошибка, т.к. вы считываете позицию курсора в разные моменты времени, но подразумеваете, что это одно и тоже значение. И в данном случае MT5 ведет себя даже более логично.
Было:
Стало:
спасибо, как то я немного с другой стороны подумал об этом видимо)
правда всё равно поведение разное в 4 фигуры синхронно движутся.. а в 5 этого нет
1) Это не ошибка.
В MetaTrader 5 у стандартных индикаторов мы убрали встроенные костыли с лишними параметрами. Кроме того, индикаторные iXXX функции в MQL5 стали конструкторами и потеряли возможность выдавать фактические данные, так как возвращают хендл.
Сами данные индикаторов извлекаются через массовые CopyBuffer функции с указанием хендла индикатора и требуемых буферов. Упор делается именно на возможность сразу извлечь большой массив (100, 1000, 1000) результатов, а не лазать затратно за каждым значением вглубь iXXX функций, как это делается в МТ4.
2) ADX вычисляется на основе +DI, -DI, которые в свою очередь фиксированны по логике вычислений (high, low, close) и не имеют возможности выбирать от чего считать.
В поставке MetaTrader 5 есть полный исходный код ADX в MQL5\Indicators\Examples\ADX.mq5
спасибо , у меня собственно один вопрос остался,
что выбрать в 4 в кнопке "приметь к ценам" что бы и в 5 и в 4 они строились одинаково.
я тут подумал , может я просто не занимался "кроссплатформенностью" целенаправленно отсюда такое отношение.
....
я вот всерьёз задумался а может и правда продумать все различия в языках и вписать на уровне препроцессора.
....
я так понимаю это нужно вписать в двух вариантах- организация предопределённых переменных, направлений массивов в индикаторах если нужно конечно (я привык как в 4), получение данных из индикаторов, функции которых нет в 5, и использование одинаковых торговых классов из библиотеки. и тогда будет кросс платформенный код, верно или что то ещё нужно? и не использовать функции ObjectGet то есть без типа в имени так как в 5 такой нет.
Лично я, как поклонник виртуальных интерфейсов - всегда весь код стараюсь обернуть именно в класс-наследник виртуального интерфейса.
При этом кроссплатформенность реализуется достаточно просто - пользователь обращается по утвержденному общему "протоколу", а его преобразование в конкретные платформозависимые действия - скрывается в реальном классе.
Вот, скажем, мой виртуальный интерфейс переносимой позиции (хорошая иллюстрация для применения кроссплатформенности):
В нем, как видите, все функции - приравнены к нулю, пользователь - не имет доступа ни к чему, что было бы платформозависимым. Реальный класс пронаследован именно от него, но все пользователи получают указатель именно на такой вот виртуальный интерфейс, и к его конкретной реализации - доступа не имеют.
Если надо - с помощью Select() выбирается текущая позиция, и затем - можно перебрать количество ее компонент, и запросить отдельную компоненту. Причем, эта самая отдельная компонента - также выдается с помощью виртуального интерфейса (в том же файле - и интерфейс исторической позиции, также виртуальный):
Конкретная реализация - скрыта в реальном классе CTradePosition, поддерживающий общий виртуальный интерфейс предка, который содержит непосредственно платформозависимые классы CMT4PositionInfo или CMT5PositionInfo (это существенно различные классы), разделенные через дефайны на МТ4 и МТ5:
Но, к логике работы эксперта - эта конкретная реализация отношения не имеет, и в результате из эксперта к ней нет никакого доступа.
Лично я считаю, что в любом месте программы должен быть доступ исключительно лишь к тем структурам, которые необходимы и достаточны. Все остальное - должно быть недоступно. Это очень существенно помогает избегать ошибок.
Лично я считаю, что в любом месте программы должен быть доступ исключительно лишь к тем структурам, которые необходимы и достаточны. Все остальное - должно быть недоступно. Это очень существенно помогает избегать ошибок.
Да нет же. Все как раз наоборот.
Доступ нужно иметь по всему периметру обработки данных, любая блокировка сулит трудноуловимые ошибки и потерю времени на отладку кода. В крайнем случае можно эту байду промежуточную интерфейсную потом приделать к конечной версии кода, но все равно нужно хранить и процедуральную версию на случай модификации алгоритма.
Да нет же. Все как раз наоборот.
Доступ нужно иметь по всему периметру обработки данных, любая блокировка сулит трудноуловимые ошибки и потерю времени на отладку кода. В крайнем случае можно эту байду промежуточную интерфейсную потом приделать к конечной версии кода, но все равно нужно хранить и процедуральную версию на случай модификации алгоритма.
Нет. Это ошибка. Как раз блокировка ограничивает тебя от этих самых ошибок.
Вот, гляди на мои интерфейсы - в них просто невозможно ошибиться. Любая функция - очень проста, чаще всего - безо всяких параметров.
Где тут по-твоему, место для ошибки ?
И сравни с реальными функциями выбора позиции, где запросто можно перепутать входные параметры, но компилятор этого не заметит, потому, что тип параметров - один. Прибавь еще и необходимость кроссплатформенности - и, по-моему, становится ясно, что гораздо лучше, когда ты имеешь доступ исключительно только к необходимым данным, а остальное - ничего тебе не доступно.
Нужна позиция ? Запросил, получил интерфейс, который тебе не дает ничего лишнего. Ты не имеешь доступа ни к объекту, который эту позицию содержит, ни к каким промежуточным буфферам, вобще ни к чему, кроме конкретно того, в чем заключался твой запрос. Ты даже не можешь сказать, на какой именно платформе работаешь, что конкретно у тебя открыто - то ли МТ4-ордер, то ли МТ5-Хедж-позиция, то ли МТ5-Нетт-позиция. Ты это можешь узнать, запросив соответствующие интерфейсы в другом месте, но там - ты не будешь иметь доступа к позициям.
Сам я когда-то тоже был сторонником прямого доступа к любым структурам данным программы. Однако, по мере роста проектов - я убедился в ошибочности такого подхода.
Считаю очень верным принцип: пользователь имеет доступ исключительно только к тому, что запросил, и ни к биту больше.
MT4 так популярен, потому что это был ПЕРВЫЙ терминал большинства трейдеров. MT5 же - не первый терминал большинства трейдеров. В этом и причина.
Разве были серьёзные проблемы с переходом на новый терминал? Проблемы - с переходом на новый язык MQL5. Представьте что первым был бы 5 - переход с него на MQL4 прошёл бы со свистом. Причина не в трейдерах, а в языке - эта революция не была ориентирована на масс-пользователя MQL или хотя бы адаптирована для него. Поэтому ущемлённый масс-пользователь и запищал
Разве были серьёзные проблемы с переходом на новый терминал? Проблемы - с переходом на новый язык MQL5. Представьте что первым был бы 5 - переход с него на MQL4 прошёл бы со свистом. Причина не в трейдерах, а в языке - эта революция не была ориентирована на масс-пользователя MQL или хотя бы адаптирована для него. Поэтому ущемлённый масс-пользователь и запищал
Да нету никаких проблем "с переходом на новый язык", поскольку все конструкции языка MQL4 - прекрасно работают в MQL5.
Разница - лишь в некоторых функциях, и в протоколах работы с торговыми приказами.
Разве были серьёзные проблемы с переходом на новый терминал? Проблемы - с переходом на новый язык MQL5. Представьте что первым был бы 5 - переход с него на MQL4 прошёл бы со свистом. Причина не в трейдерах, а в языке - эта революция не была ориентирована на масс-пользователя MQL или хотя бы адаптирована для него. Поэтому ущемлённый масс-пользователь и запищал
Мы говорим не про меня, и не про Вас. А про массового (среднего) пользователя. Который понятия не имеет об языках.
Если взять среднего пользователя QUICK, то он с большим скрипом пересядет на MT5. Потому что он УЖЕ знает QUICK, но ЕЩЕ не знает MT5. Всему причина лень, а не языки программирования.
И всякая аргументы, что вот в квике есть опционы, а в MT5 - нет. Поэтому не переходят. Эти аргументы ерунда. Причина в банальной лени.
Да нету никаких проблем "с переходом на новый язык", поскольку все конструкции языка MQL4 - прекрасно работают в MQL5.
Разница - лишь в некоторых функциях, и в протоколах работы с торговыми приказами.
Все зависит от уровня пользователя.
На самом деле, при переходе проблемы возникают на каждом шагу.
Я пытался переписать свой проект на МТ5, но получил столько предупреждений и ошибок, что временно оставил переход.
Иначе говоря, вся проблема в переходе на МТ5. Он оказывается слишком трудозатратным для большинства.
Все они рассуждают примерно так: "Да, мой код на МТ4 менее быстр и профессионален, и пусть в нем больше помарок и легких ошибок, но он работает! Что будет если я его перепишу? "
И задают схожие вопросы: "Зачем мне переходить если меня все устраивает? Что я получу, если перейду? Сколько времени займет переписывание кода? Будет ли код работать по прежнему?"
Кодо-база под МТ4 богаче. Для многих это очень важно, ведь это способствует их развитию.
Давай будем объективными и составим "портрет" среднестатистического форекс-трейдера.
Разве не будет он пользоваться тем инструментом, с которым можно легче и быстрее получить результат?
А если мы ему скажем: "Ты работаешь непрофессионально, и неправильно. Твой код написан примитивно. Переходи на другой язык, переписывай свои программы, учись и становись профессионалом.", то он может ответить следующее:
Все зависит от уровня пользователя.
На самом деле, при переходе проблемы возникают на каждом шагу.
Я пытался переписать свой проект на МТ5, но получил столько предупреждений и ошибок, что временно оставил переход.
Иначе говоря, вся проблема в переходе на МТ5. Он оказывается слишком трудозатратным для большинства.
Все они рассуждают примерно так: "Да, мой код на МТ4 менее быстр и профессионален, и пусть в нем больше помарок и легких ошибок, но он работает! Что будет если я его перепишу? "
И задают схожие вопросы: "Зачем мне переходить если меня все устраивает? Что я получу, если перейду? Сколько времени займет переписывание кода? Будет ли код работать по прежнему?"
Кодо-база под МТ4 богаче. Для многих это очень важно, ведь это способствует их развитию.
Давай будем объективными и составим "портрет" среднестатистического форекс-трейдера.
Разве не будет он пользоваться тем инструментом, с которым можно легче и быстрее получить результат?
А если мы ему скажем: "Ты работаешь непрофессионально, и неправильно. Твой код написан примитивно. Переходи на другой язык, переписывай свои программы, учись и становись профессионалом.", то он может ответить следующее:
+100!
К этому надо добавить, что если заниматься торговыми идеями ( а именно они потенциально приносят деньги), то банально не хватает время на изучение программирования. И более того, даже если владел программированием, то в этой ситуации остаются в голове самые примитивные навыки программирования.