OrdersTotal()-1 до безумия не надёжно. Потому и не говорил о таком варианте вообще.
А перебор ордеров тащит за собой кучу дополнительных условий. Дело в том, что однажды по одному сигналу открылось два одинаковых ордера. На реальном счёте, слава богу отложки и я был у компа. Хотя в логах экспертов запись одна. В обработке ошибок есть Print(i, " - я неудачная попытка открытия ордера"); Так, что на советник ну никак не могу грешить. Когда пытался выяснить причину меня так вежливо послали... на этот форум. Да ещё и сказали, что у них нет возможности проверить достоверность логов предоставленных мной. Но эту причину я выяснять не хочу. Сделал при открытии ордера запись файла с именем = тикету открытого ордера, а в переборе ордеров если ордер есть а файла нет, то его удалить. Вот и получается, что если закрыть часть ордера, то новый ордер откроется без записи файла и он будет закрыт. Либо сочинять условия его определения.
Чем я и занимаюсь.
Согласно документации функция OrderClose() возвращает TRUE при успешном завершении или FALSE. То-же самое и при частичном закрытии ордера, при этом закрывается весь объём и открывается новый ордер с лотом равным остатку. При этом время открытия и конечно цена остаются прежними. А тикет этого нового ордера остаётся строгой тайной и его можно узнать только перебрав ордера в цикле.
Вот и возник вопрос: А есть-ли вариант узнать этот тикет не прибегая к циклу???
Прочти следующее за выделенным предложение.
При этом дополнительный спред и откроется ордер не по той цене по которой был открыт тот, часть которого надо закрыть.
Основное, конечно-же желание оставить часть открытого ордера на том месте где он был открыт.
А что касается спреда, так это как в поговорке "курочка по зёрнышку клюёт, а весь двор в помёте".
Прочти следующее за выделенным предложение.
При этом дополнительный спред и откроется ордер не по той цене по которой был открыт тот, часть которого надо закрыть.
Есть масса вариантов решения и у каждого - свои издержки.
1. См.выше.
2. Открыть встречную позицию(лок).
3. Перебор открытых позиций,- отдельный, не удаляющий позицию при отсутствии файла.
4. Самый сложный, но и самый разумный, имхенько: решить вопрос передачи тикета с сервера ДЦ на терминал пользователя. Сервисдек в помощь.
при чём здесь вообще спред ? если я вхожу в рынок с целью от ста до семидесяти пунктов, какой спред может съесть твою прибыль ?
это как входной билет в игровой зал... отдал полтинник за вход... выиграл тысячи, проиграл тысячи... виноват полтинник за входной билет ? смешно...
если ты работаешь в диапазоне спреда - другое дело... ну и сиди с двумя-тремя полтинниками... и думай откуда свалилась неудача...
Есть масса вариантов решения и у каждого - свои издержки.
1. См.выше.
2. Открыть встречную позицию(лок).
3. Перебор открытых позиций,- отдельный, не удаляющий позицию при отсутствии файла.
4. Самый сложный, но и самый разумный, имхенько: решить вопрос передачи тикета с сервера ДЦ на терминал пользователя. Сервисдек в помощь.
Всю эту массу вариантов я представляю. За исключением выделенного. Самого разумного. Можно подробней об этом?
На форуме MQL5 можно обратиться к разработчикам в разделе сервисдек.
В-принципе, просьба о доработке - вполне обоснована,- собственник позиции имеет право на полную информацию о ней.
Время, правда, не лучшее,- старый MQL4 кончается(:
ЗЫ Если раньше не ходили на MQL5: Ваш ник и пароль там совпадают с форумом четверки на время создания форума MQL5.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Согласно документации функция OrderClose() возвращает TRUE при успешном завершении или FALSE. То-же самое и при частичном закрытии ордера, при этом закрывается весь объём и открывается новый ордер с лотом равным остатку. При этом время открытия и конечно цена остаются прежними. А тикет этого нового ордера остаётся строгой тайной и его можно узнать только перебрав ордера в цикле.
Вот и возник вопрос: А есть-ли вариант узнать этот тикет не прибегая к циклу???