Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
есть интересные тонкости программирования (которые все в конечном итоге есть в документации по торговым операциям),
но есть просто базовые понятия программирования, это совсем другое.
----
совет - ловить отчет открытия в OnTrade/OnTradeTransaction - правильный.
но если у sanderz пробелы в знаниях именно в программировании, то надо это исправить чем раньше тем лучше.
Думаю, что в программировании я могу многим дать фору ;-) Однако mql мне не знаком, я пишу, можно сказать, с наскока. Мне не был ясен алгоритм взаимодействия с сервером. Теперь понятно, что выполнение программы не останавливается на период ожидания ответа сервера. Буду изучать примеры и переписывать. Спасибо :)
И, конечно, буду исправлять пробелы :)
Теперь понятно, что выполнение программы не останавливается на период ожидания ответа сервера.
не совсем. открытие ордера происходит в два этапа.
1. Отправка OrderSend/Async. На этом этапе терминал получает ответ от сервера про принятие заявки. То есть функция вам вернет напрямую ответ от сервера. Никаких пауз после вызова OrderSend/Async делать просто не имеет смысла. Она сама по себе уже подождала и дала вам ответ. (Если юзаете просто OrderSend - вам также вернется тикет ордера.)
После вызова OrderSend/Async программа может делать сразу все что угодно. Вам нужно просто перейти на второй этап -
2. Ожидание события в функции OnTrade/OnTradeTransaction. То есть ожидание отчета по сделкам или подтверждение установки отложек, по переданному вам вначале тикета ордера (или если пользовались Async, то косвенно определяете что нужный вам ордер принят и открыт).
Пока вы ждете ответ/подтверждения на втором этапе, то вы можете выполнять другие действия, вплоть до отправки новых ордеров (OrderSend/Async).
не совсем. открытие ордера происходит в два этапа.
1. Отправка OrderSend/Async. На этом этапе терминал получает ответ от сервера про принятие заявки. То есть функция вам вернет напрямую ответ от сервера. Никаких пауз после вызова OrderSend/Async делать просто не имеет смысла. Она сама по себе уже подождала и дала вам ответ. (Если юзаете просто OrderSend - вам также вернется тикет ордера.)
После вызова OrderSend/Async программа может делать сразу все что угодно. Вам нужно просто перейти на второй этап -
2. Ожидание события в функции OnTrade/OnTradeTransaction. То есть ожидание отчета по сделкам или подтверждение установки отложек, по переданному вам вначале тикета ордера (или если пользовались Async, то косвенно определяете что нужный вам ордер принят и открыт).
Пока вы ждете ответ/подтверждения на втором этапе, то вы можете выполнять другие действия, вплоть до отправки новых ордеров (OrderSend/Async).
Спасибо за исчерпывающий ответ! Теперь мне действительно всё понятно!
(а то приходилось стопы вручную за роботом ставить из-за своих кривых рук) :) :) :)
sanderz:
а то приходилось стопы вручную за роботом ставить
поясните что вы имеете ввиду? вы просто эксперту не доверяете выставление стопов или вы считаете, что выставление стопов экспертом невозможно?
Изучил тут статью:
https://www.mql5.com/ru/articles/481
Мне она показалась интересной, потому что я тоже использую класс CTrade.
1. Там для метода OrderSend() используется методы обертки (?) Buy и Sell. Так ведь можно сказать? Я посмотрел библиотеку, и, понимаю, что спокойно могу отказаться от использования голого OrderSend() в своей программе, заменив его методами библиотеки, верно?
2. В статье есть вот такая конструкция:
Я думаю переписать свои функции в одну рекурсивную функцию.
(я с помощью *** выделил в тексте вопросы, пожалуйста, помогите ответом) :)
Спасибо!
Функции проверки реткодов взял из сообщения https://www.mql5.com/ru/forum/12207#comment_505716
Еще один вопрос по работе с OnTrade()
Вводные. По каждому инструменту у меня позиция формируется только одним экспертом, даже если сигналов несколько. Правильно ли я понимаю, что для установки стоплосса мне достаточно:
1. При успешной отправке ордера на сервер заполнить значения двух общедоступных переменных, например:
PendingSL = 140000;
PendigTP = 145000;
2. В событии OnTrade() проверять, что эти переменные не равны нулю и то что есть позиция ( m_Info.Select(Symbol()) ) без SL
3. Модифицировать позицию соответствующими значениями PendinSL и PendingTP. Можно рекурсивно и отправляя Push-сообщения, если что-то не сработало.
4. Если всё успешно - сбрасывать значения PendinSL и PendingTP в ноль, чтобы в следующий раз алгоритм модицификации не вызывался.
Нормально? Или я что-то специфическое не учёл?