![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
И опять - код.. код.. Код - это хорошо.. но это ещё и - тактики, циклики.. ;)
Ну неужто в чарт не приходит мессидж о создании нового бара?? Ни в жисть не поверю..)))
А ивент из него слепить - проблемно? а переменную предопределённую хотя бы??
И вообще - события обрабатывать проще, чем наворачивать горы кода.. Да к тому же - с ошибками (ПРОГРАММ же БЕЗ ОШИБОК - НЕ БЫВАЕТ!!!)))))
абсолютно согласен с вами что новый бар это событие и оно может (и должно програмироваться) тут есть ветка https://www.mql5.com/ru/forum/1031 почитайте на досуге,а уже много лет бодаюсь...
З.Ы. Думаю после прочтения вам станет ясно что новый бар может ВООБЩЕ не появиться...дыра...
И опять - код.. код.. Код - это хорошо.. но это ещё и - тактики, циклики.. ;)
Ну неужто в чарт не приходит мессидж о создании нового бара?? Ни в жисть не поверю..)))
А ивент из него слепить - проблемно? а переменную предопределённую хотя бы??
И вообще - события обрабатывать проще, чем наворачивать горы кода.. Да к тому же - с ошибками (ПРОГРАММ же БЕЗ ОШИБОК - НЕ БЫВАЕТ!!!)))))
При тестировании выдает ошибку
CTrade::PositionClose::OrderCheck: Invalid stop(s) request
В советнике есть такие строчки
описание переменных (в процедуре)
CTrade m_trade;
..................
закрываю позицию
m_trade.PositionClose(_Symbol, eSlippage);
почему тут выходит ошибка ? CTrade::PositionClose::OrderCheck: Invalid stop(s) request
неправильный SL и/или TP
TRADE_RETCODE_INVALID_STOPS
при чем тут стопы при закрытии позиции? или я что то не понимаю?
абсолютно согласен с вами что новый бар это событие и оно может (и должно програмироваться) тут есть ветка https://www.mql5.com/ru/forum/1031 почитайте на досуге,а уже много лет бодаюсь...
З.Ы. Думаю после прочтения вам станет ясно что новый бар может ВООБЩЕ не появиться...дыра...
Рискнул заглянуть в ссылку.. Пожалуй, эт и правда надо почитать.. на досуге..;)
на З.Ы. В этом-то и причина пожелания иметь такое событие.. Нет бара - нет события
Вообще, как Вы себе это представляете ? 20 таймфреймов x число символов в 'Обзоре рынка' и по каждому генерируется событие OnNewBar ? А Вы каждое должны обработать, определить, к какому символу и таймфрейму оно относится ? Сейчас у Вас есть выбор: написать собственную функцию NewBar и в ней определить, какие именно Вы хотите получать новые бары: все периоды по символу,все символы по текущему периоду или какой то частный случай. Получается конкретная несложная функция. Это лучше, чем универсальная функция OnNewBar с множеством проверок.
20 таймфреймов.. для ulong параметра - этт не предел.. раз в минутку заполнить целую переменную - право, не сложно..
А что, ОнТик просматривает "х число символов в 'Обзоре рынка' и по каждому генерируется событие.."?????
А побитовая проверка - она, поверьте, штука довольно-таки очень быстрая..
И даже при наличии события
- никто не заставит меня его обрабатывать - без надобности..
- ничто не помешает _дополнительно или _вместо "написать собственную функцию NewBar и в ней определить, какие именно Вы хотите получать новые бары" - при надобности..
Да и сейчас это с легкостью делается, если конечно УМЕЛО все делать. Разработчики обещали переписать OnTrade(), добавить туда необходимые параметры. если сделают будет еще проще обрабатывать.
Никто не мешает обрабатывать подобные ситуации на месте, в OnTick() или OnTime() - по месту проведения торговой операции; либо в OnTrade(), если необходимо отловить действия пользователя или торговые операции не контролируемые на прямую из кода.
Легкость - понятие относительное, и для одного она измеряется в граммах, для другого в тоннах. Мне в эксперте пришлось сделать это УМЕЛО (если мой код можно назвать таковым), ибо вариантов с ПРОСТО сейчас в языке не существует, а очень даже могли бы существовать, имхо. И особой радости от того, что кода стало образно на сто строк больше, и он стал казаться сложнее, я не испытал.
Вообще сама проблема вот в чем:
приходит тик, индикатор показывает, что нужно закрываться, делаю закрытие
приходит следующий тик, индикатор показывает, что нужно закрываться, и я уже не знаю, что мне делать - позиция-то висит, и что с ней происходит в данный момент узнать, конечно же можно, но через пятую точку.
Я не понимаю, почему эта сложность здесь все еще присутствует? Я не понимаю, почему в событии onTrade() нам предлагают написать тонну кода, чтобы понять, что произошло?
Я - за простоту, и когда ее нет, становится грустно
Легкость - понятие относительное, и для одного она измеряется в граммах, для другого в тоннах. Мне в эксперте пришлось сделать это УМЕЛО (если мой код можно назвать таковым), ибо вариантов с ПРОСТО сейчас в языке не существует, а очень даже могли бы существовать, имхо. И особой радости от того, что кода стало образно на сто строк больше, и он стал казаться сложнее, я не испытал.
Вообще сама проблема вот в чем:
приходит тик, индикатор показывает, что нужно закрываться, делаю закрытие
приходит следующий тик, индикатор показывает, что нужно закрываться, и я уже не знаю, что мне делать - позиция-то висит, и что с ней происходит в данный момент узнать, конечно же можно, но через пятую точку.
Я не понимаю, почему эта сложность здесь все еще присутствует? Я не понимаю, почему в событии onTrade() нам предлагают написать тонну кода, чтобы понять, что произошло?
Я - за простоту, и когда ее нет, становится грустно
Сделал так, кода меньше чем сто строк...:) решение надежное и сразу для мультивалютников
Вместо периода на котором советник висит можно любой нужный указать. Т. е. ордера будут ставиться не чаще чем раз в периодНу и после любого торгового запроса нужно сделать задержку, запрещающую торговый запрос в течение 30сек(например). А то ордер может еще в истории не появиться на следующем тике.
Вообще, как Вы себе это представляете ? 20 таймфреймов x число символов в 'Обзоре рынка' и по каждому генерируется событие OnNewBar ? А Вы каждое должны обработать, определить, к какому символу и таймфрейму оно относится ? Сейчас у Вас есть выбор: написать собственную функцию NewBar и в ней определить, какие именно Вы хотите получать новые бары: все периоды по символу,все символы по текущему периоду или какой то частный случай. Получается конкретная несложная функция. Это лучше, чем универсальная функция OnNewBar с множеством проверок.
Если говорить о стандартном решении все должно выглядеть примерно так
1. Событие привязывается к открытому графику, к его периоду и символу. Событие должно возникать при появлении нового бара (дыры игнорируются).
2. Обработка событий как понимаю должна происходить в отдельном потоке терминала (или потоках).
PS
Как-то так. Конечно это грубое приближение, без учета множества особенностей...
Vladix:
Вообще сама проблема вот в чем:
приходит тик, индикатор показывает, что нужно закрываться, делаю закрытие
приходит следующий тик, индикатор показывает, что нужно закрываться, и я уже не знаю, что мне делать - позиция-то висит, и что с ней происходит в данный момент узнать, конечно же можно, но через пятую точку.
Я не понимаю, почему эта сложность здесь все еще присутствует? Я не понимаю, почему в событии onTrade() нам предлагают написать тонну кода, чтобы понять, что произошло?
Я - за простоту, и когда ее нет, становится грустно
Сделал так, кода меньше чем сто строк...:) решение надежное и сразу для мультивалютников
Вместо периода на котором советник висит можно любой нужный указать. Т. е. ордера будут ставиться не чаще чем раз в периодНу и после любого торгового запроса нужно сделать задержку, запрещающую торговый запрос в течение 30сек(например). А то ордер может еще в истории не появиться на следующем тике.
Поставить задержку - да, принимаю, сколько строк кода уйдет на это? А если речь о мультивалютнике, это нужно по каждому учитывать задержку, не так ли?
Я код, который это решает, написал. Только не нравится мне он, так же, как, простите, и ваш. И дело не в предвзятости, дело в том, что вариантов нет других, простых и элегантных.