Ошибки, баги, вопросы - страница 3379
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Извините, это мой машинный перевод на русский, за которым следует английский оригинал:
Функция OnTradeTransaction () вызывается от 1 до 4 раз для одной и той же сделки, в зависимости от сделки. Согласно образцу советника (из MQ) с OnTradeTransaction() из https://www.mql5.com/en/docs/event_handlers/ontradetransaction , отдельные шаги бронирования в пределах торгового ордера суммируются советником (или ручной заказ), если они происходят в течение одной секунды:
Это сложно, очень сложно и фактически невозможно использовать в советнике, которому требуется только OnTradeTransaction() для подтверждения торговых приказов на сервер и реализованных значений:
за которым следует вызов с trans.Ord_State = STATE_STARTED, снова order=#2. Кто и как должен в этом разобраться?
Все это заставило меня искать более простое решение, вместо того, чтобы ждать, пока пройдут различные шаги и этапы, когда они могут произойти. Чтобы упростить работу советника (и написать об этом статью), я просто хочу использовать билеты ордера и/или позиции через PositionSelectByTicket(ulong Ticket) или OrderSelect(ulong Ticket) для запроса значений открывать позиции или отложенные ордера и обновлять их для дальнейших целей. Кроме того, время и билет сохраняются как статические переменные, поэтому дальнейшая обработка не происходит при повторном вызове OnTradeTransaction() в течение 1 секунды с тем же билетом.
Вот макет OnTradeTransaction() всего из 12 строк и пример других функций моей идеи:
Как уже было сказано, это будет работать ТОЛЬКО в том случае, если значения соответствующей открытой позиции или отложенного ордера больше НЕ изменяются между последующими вызовами OnTradeTransaction() в терминале. Другими словами: поступает ли измененная позиция/ордер до или с первым вызовом (после ORDER_STATE_STARTED – но даже это не первый вызов!) OnTradeTransaction() в терминале, или они все еще изменяются/обновляются после первого вызова OnTradeTransactio() относительно этого заказа ?
Sorry this is my Russian machine translation followed by the English original:
The OnTradeTransaction() function is called between 1 and 4 times for the same trade, depending on the trade. According to the Sample EA (from MQ) with OnTradeTransaction() from https://www.mql5.com/en/docs/event_handlers/ontradetransaction , the individual up to 4 booking steps within a trade order are summarized by an EA (or a manual order) if they occur within one second:
This is hard, very complicated and actually impossible to use in an EA that only needs OnTradeTransaction() to confirm its trade orders to the server and the values realized:
followed by a call with trans.Ord_State = STATE_STARTED, again order=#2. Who is supposed to get their head around this and how?
All this led me to look for a simpler solution instead of waiting for the various steps and stages to work through when they might occur. To simplify the whole thing for an EA (and to write an article about it), I just want to use the tickets of the order and/or position via PositionSelectByTicket(ulong ticket) or OrderSelect(ulong ticket) to query the values of the open positions or pending orders and update them for further purposes. Additionally, the time and the ticket are stored as a static variables, so that no further processing happens when OnTradeTransaction() is called again within 1 second with the same ticket.
Here is the layout of OnTradeTransaction() with only 12 lines and the sample the other functions of my idea:
As said, this would work ONLY if the values of the respective open position or pending order are NOT changed anymore between the subsequent calls of OnTradeTransaction() in the terminal. In other words: Does the changed position/order arrive before or with the first call (after ORDER_STATE_STARTED - but not even that is the first call!) of OnTradeTransaction() in the terminal or are they still changed/updated after the first call of OnTradeTransactio() concerning this order?
Ожидалось: "ABCD"
Результат: AB\'CD
А при обрамляющих кавычках был бы такой: AB'CD
Добрый день
Проверьте пожалуйста правильность работы вот такой конструкции
Добрый день
Проверьте пожалуйста правильность работы вот такой конструкции
Беззнаковое целое всегда больше или равно 0
Возможно так будет понятнее.
Цикл не завершается
Причем это только с типом uint, int отрабатывает правильно
Тип данных ulong тоже уходит в отрицательную зону, тоесть не завершается цикл. Вывод в журнал к сожалению выводить именно со знаком так как IntegerToStringIntegerToString
Принимает long
Да это я понимаю, просто цикл должен был отработать всего один раз и завершиться, а не уходить в "отрицательную зону", по сути в "бесконечность"
Если очень важно применить тип uint и такую конструкцию цикла, то можно сделать так
Да это я понимаю, просто цикл должен был отработать всего один раз и завершиться, а не уходить в "отрицательную зону", по сути в "бесконечность"
Почему цикл должен был отработать 1 раз?
Распишите хотя бы 2 итерации