[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 566
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Наверное я не правильно сформулировал, что нужно :(
Есть есть алгоритм открытия ордеров.
Нужно, чтобы при любом варианте закрытия последнего ордера, следующий открывался в другом направлении ( при появлении условий соответственно).
Все работает, но если закрылся по стоп лосс, например по sell, а условия на открытие по sell в данном направлении есть, то открытия продолжаются. А надо, что бы ждал условий на buy.
То есть, нужна проверка последнего закрытого ордера, что бы он не совпадал с открывающимся (чередование buy-sell-buy-sell). В работе только один ордер или ожидание сигнала.
Понимаю, что скорее всего надо через OrdersHistoryTotal(), но как это может выглядеть в работающем советнике ?
Спасибо.
Наверно где то так. Но если ордеров в истории много лучше использовать свой учет ордеров.https://www.mql5.com/ru/articles/1404 https://www.mql5.com/ru/articles/1390
Более строгий вариант
Наверное я не правильно сформулировал, что нужно :(
Есть есть алгоритм открытия ордеров.
Нужно, чтобы при любом варианте закрытия последнего ордера, следующий открывался в другом направлении ( при появлении условий соответственно).
Все работает, но если закрылся по стоп лосс, например по sell, а условия на открытие по sell в данном направлении есть, то открытия продолжаются. А надо, что бы ждал условий на buy.
То есть, нужна проверка последнего закрытого ордера, что бы он не совпадал с открывающимся (чередование buy-sell-buy-sell). В работе только один ордер или ожидание сигнала.
Понимаю, что скорее всего надо через OrdersHistoryTotal(), но как это может выглядеть в работающем советнике ?
Спасибо.
Если хотите научится программировать или разбирайте чужие коды (для этого предназначена CodaBase) или отталкивайтесь от алгоритма решения поставленной задачи. Просить написать код за Вас - самый безнадёжный способ научиться. Чаще всего Вы получите не самый лучший вариант кода в решении Вашей задачи, что-то на подобии (аллегорично), когда Ваш сосед ежеминутно звонит Вам в дверь и спрашивает "как Вас зовут" - это про не нужные (излишние) вычисления.
Алгоритм решения Вашей задачи может быть таким. Сначала убеждаетесь в отсутствии "своих" ордеров. Эта задача, если не для тестера (где можно ограничится условием if (OrdersTotal() == 0)), решается перебором ордеров с использованием фильтров на соответствие OrderMagicNumber() и Symbol(). Затем проверяете условие (по своей стратегии) на открытие ордера. Если есть сигнал, то по перебору OrdersHistoryTotal() (обычно это последний в списке) вычисляете OrderType() последнего закрытого ордера. Если сигнал на открытие и тип последнего закрытого ордера не совпадают, открываете по сигналу ордер.
Такой подход содержит минимум расчётов и значительно уменьшает время оптимизации советника в тестере.
Какое-то время назад я Вам давал алгоритм решения поиска последних позиций. А что потом с ними делать НЕ ВАЖНО: считать, удалять, модифицировать СТОПы. Если Вы не в состоянии писать код хотя бы "по образу и подобию", то это не Ваше (программировать)...
Да, согласен, программировать это не мое, поэтому я учусь и задаю здесь вопросы. Я пытался в Ваш алгоритм добавить закрытие позиции но не получилось (закрывались все buy позиции) поэтому решил подойти к проблеме с другой стороны и посмотреть решение закрытие двух последних buy позиции на готовом блоке закрытие что мне и предоставили и предложили.
И буду очень признателен если Вы на Вашем примере покажите как закрыть две последние buy позиции. Пойму где я допустил ошибку.
Если хотите научится программировать или разбирайте чужие коды (для этого предназначена CodaBase) или отталкивайтесь от алгоритма решения поставленной задачи. Просить написать код за Вас - самый безнадёжный способ научиться. Чаще всего Вы получите не самый лучший вариант кода в решении Вашей задачи, что-то на подобии (аллегорично), когда Ваш сосед ежеминутно звонит Вам в дверь и спрашивает "как Вас зовут" - это про не нужные (излишние) вычисления.
Полностью с Вами согласен. Вы правы на 100%. Это правильный путь и я честно пытался по нему идти. Но изучение MQL4 на уровне учебников и чтения без цели ни к чему не привело. По любому приходилось разбирать чужие коды, т. к. свои безумные идеи засунуть в рамки программы большей частью не получалось. Начал строить стратегию в ....excel (он мне ближе и понятнее). По отбивке основы стратегии очень даже удачно и наглядно (на истории разумеется). Честная математика показывает прибыль или убыток как есть. А вот дальше надо все таки принимать во внимание особенности торговли: спред плавающий, своп, особенности ДЦ, все это засунуть в формулы exel уже сложно. Вот и захотелось посмотреть какова разница между прибылью в excel и MQL. Честно - разница боольшая, не в мою пользу. Почему, пока не знаю, буду разбирать каждую позицию, может в советнике ошибка, но это уже я сам.
В любом случае, добрые люди с этого форума помогли в решении одной конкретной задачи, за что большое человеческое спасибо.
нет, проблема со сменой порядкового номера позиции при закрытии одной из них решена, я проверял не раз, думая, что может быть ошибка в этом, но там всё в порядке выбирается нужный ордер и стоплоз вычисляется для него правильно, но ордер не хочет модифицироваться..
Ошибка 1 выдается только если все параметры, передаваемые в функцию OrderModify( ), равны всем параметрам модифицируемого ордера, выбранного вами( по номеру тикета) или функцией OrderSelect() для модификации. Пример использования проверки:
Только "Полезные функции от KimIV".
Функция ModifyOrder() https://www.mql5.com/ru/forum/131859
Ошибка 1 выдается только если все параметры, передаваемые в функцию OrderModify( ), равны всем параметрам модифицируемого ордера, выбранного вами( по номеру тикета) или функцией OrderSelect() для модификации.
1 (ERR_NO_RESULT) - если ни один из параметров не был изменен или Нет ошибки, но результат неизвестен, скорее всего просто, по какой то причине ордер не модифицируется...
Да, согласен, программировать это не мое, поэтому я учусь и задаю здесь вопросы. Я пытался в Ваш алгоритм добавить закрытие позиции но не получилось (закрывались все buy позиции) поэтому решил подойти к проблеме с другой стороны и посмотреть решение закрытие двух последних buy позиции на готовом блоке закрытие что мне и предоставили и предложили.
И буду очень признателен если Вы на Вашем примере покажите как закрыть две последние buy позиции. Пойму где я допустил ошибку.
В общем случае так. Если же использовать "маразматический" вариант (я пользую именно его), то нужно запускать цикл: сначала отыскать последнюю открытую позицию BUY, затем её по тикету удалить и так повторить столько раз, сколько нужно.
P.S. Писать отдельно функции для BUY и SELL - это изначально криворукий вариант (ИМХО).
И функция, в таком случае, будет выглядеть не на много сложнее:
1 (ERR_NO_RESULT) - если ни один из параметров не был изменен или Нет ошибки, но результат неизвестен, скорее всего просто, по какой то причине ордер не модифицируется...
В общем случае так. Если же использовать "маразматический" вариант (я пользую именно его), то нужно запускать цикл: сначала отыскать последнюю открытую позицию BUY, затем её по тикету удалить и так повторить столько раз, сколько нужно.
P.S. Писать отдельно функции для BUY и SELL - это изначально криворукий вариант (ИМХО).
И функция, в таком случае, будет выглядеть не на много сложнее:
Спасибо, буду разбираться.