Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1803
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В вашем коде при одной открытой позиции другая уже не откроется по противоположному сигналу. Т.е., сначала, при поступлении сигнала, нужно проверить есть ли противоположная позиция и закрыть её.
Но, повторюсь - всё такое сильно ограничивает возможности доработки стратегий.
Нужно уходить от привязки к наличию/отсутствию ордеров (особенно в четвёрке - там за ордера приняты и отложенные ордера (что верно), и позиции (что не правильно)).
Нет, иметь по рукой количество ордеров и позиций по их типам - правильно и нужно. Но опираться при сигналах только на отсутствие любых ордеров - такое себе...
Вообще, правильно - это иметь в наличии функции для подсчёта ордеров и позиций (одна функция, заполняющая структуру при изменении количества ордеров и позиций), функции открытия/закрытия позиций, функции установки ордеров и сигнальные функции. Плюс - уметь сравнивать данные позиции (открытой или закрытой) с какими-либо величинами.
Из этого набора можно составить любую стратегию.
Твой код
(Открылся бар и ордеров нет)
проверили сигнал - сигнала нет
... ждем следующий бар
Ты повторил ту же ошибку, что и прошлый раз
P.S.
это
должно выполняться после открытия ордераВообще мой код был предназначен для другого. Для робота, торгующего только по ценам открытия. Я просто взял его у себя и добавил к коду пользователя законопослушный гражданин и изменял его согласно замечаниям. Всех нюансов сразу нельзя учесть. Их видно только во время тестирования робота.
Но есть одно но. И ты тоже вроде всё учёл. Поступил сигнал, функция bSignalSell или bSignalBuy отправила команду в очередь на открытие ордера и вернула true (первый момент). Второй момент, это то что никакой ордер еще не открылся (команда ждет своей очереди в терминале). Далее, когда очередь команды подходит, она отправляется на сервер (это еще время). На сервере она выполняется. Или сервер отказывает в выполнении по одной из целого ряда возможных причин (подробнее смотри в документации). Или она не дошла (помехи, плохая связь и прочие баги сети). А твой робот думает, что открыл ордер и обновляет время открытия бара. Прекрасно. Но этого ордера в итоге не оказалось в списке открытых ордеров. Таким образом, представь, что у тебя в списке 0 ордеров, а робот "думает": всё в порядке я вошел в рынок. В итоге, на протяжении целого бара, после неудачного входа, есть сигнал но эксперт не "видит" его и ничего не делает. Возможна такая ситуация? Возможна! Так что и твой код не супер рабочий. Думай лучше. Или пусть законопослушный гражданин подумает. А я, к сожалению, сейчас не могу. Работаю над одним очень интересным проектом. Да и создавать правильного полностью рабочего эксперта со всеми механизмами имеет смысл только для хорошей, прибыльной, торговой системы. А просто погонять робота на тестере и убедиться что это очередной сливатор депозита можно хоть с моим, хоть с твоим, вариантом. Тут уже без разницы.
Я только сейчас заметил
Индекс 1.
В то время как MA у вас с индексом 0! То есть, она гуляет на протяжении всего бара и может выйти за пределы Open и Close. Поэтому, МА лучше сделать также с индексом 1
Тогда все сигналы будут браться исключительно на сформированном баре и робот будет полностью соответствовать торговой системе с сигналами по ценам открытия. Таким образом, роботу будет достаточно отследить момент открытия бара (данный код я уже добавил) и войти по самому новому сформированному бару. Он будет более надежным. И не нужно будет извращаться, как был вынужден сделать Makar из-за изначально неправильного алгоритма входа.
Я только сейчас заметил
Индекс 1.
В то время как MA у вас с индексом 0! То есть, она гуляет на протяжении всего бара и может выйти за пределы Open и Close. Поэтому, МА лучше сделать также с индексом 1
Тогда все сигналы будут браться исключительно на сформированном баре и робот будет полностью соответствовать торговой системе с сигналами по ценам открытия.
В этом и суть сигнала.
Текущая МА заходит в тело предыдущей свечи и в зависимости от того какая свеча(UP/DN) такой и сигнал.
В этом и суть сигнала.
Текущая МА заходит в тело предыдущей свечи и в зависимости от того какая свеча(UP/DN) такой и сигнал.
В таком случае MA следует брать с индексом 1 на младшем тайм фрейме. Тогда, не нужно будет извращаться. В пределах Open и Close старшего ТФ будет несколько (или множество) баров на младшем ТФ. Ты же знаешь, зачем придумали тайм фреймы? Если нет, то начни изучение данного вопроса с истории возникновения японских свечей. Скажу кратко, суть в упрощении технического анализа. А с приходом цифровой эры еще и упрощение дискретизации торговых систем.
В таком случае MA следует брать с индексом 1 на младшем тайм фрейме. Тогда, не нужно будет извращаться. В пределах Open и Close старшего ТФ будет несколько (или множество) баров на младшем ТФ. Ты же знаешь, зачем придумали тайм фреймы? Если нет, то начни изучение данного вопроса с истории возникновения японских свечей. Скажу кратко, суть в упрощении технического анализа. А с приходом цифровой эры еще и упрощение дискретизации торговых систем.
Я не пойму почему ты на меня взъелся. Человек пишет свою стратегию так, как он ее видит и этот человек не я.
Я лишь ответил на его вопрос: "Как избежать многократного открытия на одном баре?"
Что мне изучать я сам знаю, а если не знаю, то спрашиваю. Сейчас я никого ни о чем не спрашивал.
Я не пойму почему ты на меня взъелся. Человек пишет свою стратегию так, как он ее видит и этот человек не я.
Я лишь ответил на его вопрос: "Как избежать многократного открытия на одном баре?"
Что мне изучать я сам знаю, а если не знаю, то спрашиваю. Сейчас я никого ни о чем не спрашивал.
Странно. Я пытаюсь разобраться в вопросе, а ты говоришь о каком-то выяснении отношений. Я общаюсь исключительно по теме программирования. Если тебя что-то задело, не обижайся. Я уже 15 лет пишу программы. Ты говоришь, что мой код работает неправильно, по твоему мнению. Но я не обижаюсь, а пытаюсь объяснить тебе то как на самом деле всё устроено в автоматических торговых системах. Получается разговор исключительно технического характера. А ты мне о каких-то обидах говоришь ... :)
Странно. Я пытаюсь разобраться в вопросе, а ты говоришь о каком-то выяснении отношений. Я общаюсь исключительно по теме программирования. Если тебя что-то задело, не обижайся. Я уже 15 лет пишу программы. Ты говоришь, что мой код работает неправильно, по твоему мнению. Но я не обижаюсь, а пытаюсь объяснить тебе то как на самом деле всё устроено в автоматических торговых системах. Получается разговор исключительно технического характера. А ты мне о каких-то обидах говоришь ... :)
Я уже 15 лет пишу программы.
Есть предложение. Дай свой телеграмм в личку.
Так и я тебе объяснил, в чем твой код ошибочный(в данном случае), а ты говоришь надо советник переделывать)
В данном случае, его нужно переделать, чтобы не извращаться. Поскольку, код который я добавил как раз рассчитан на робота с сигналами по ценам открытия, как я уже говорил. Я подумал: странно получается. А потом нашел причину. Если всё изначально сделать правильно, то в будущем не будет особых проблем. Таким образом, всегда нужно искать причину а не бороться с её следствием.