Ошибки, баги, вопросы - страница 3199

 
Andrey Dik #:

1. Сабер схитрил, и прекрасно понимает это, сам он бесконечный цикл в своем боевом роботе использовать не будет. Либо просто придуряется, Либо в данном случае действительно не понимает проблемы. 

2. Спасибо, и Вам не хворать.

3. Пока не было никакой полезной информации от "простых смертных".

4. Именно засирают, замыливают глаз. На одно моё сообщение разработчикам куча бесполезного флуда наплодили.

5. Не видите причин горячиться? Хорошо, я попытаюсь объяснить на пальцах:

OrderSend () - асинхронная  синхронная* функция, это значит, что советник (или скрипт) будет остановлен до тех пор, пока торговый сервер не пришлет ответ на торговый приказ, и функция вернёт true или false в зависимости от успешности операции.

В структуре ответа торгового сервера содержится информация с результатами торговой операции, и вот тут то и кроется проблема: структура ответа заполнена торговым сервером некорректно, tradeResult.price равен 0.0, и это при том, что функция  OrderSend () вернула true!, причем сделка совершена и позиция открыта и тикет сделки есть в структуре ответа. Далее, вызываем PositionSelect (), если true то запрашиваем цену позиции PositionGetDouble (POSITION_PRICE_OPEN), которая возвращает 0.0!

И Вы до сих пор не видите причин горячиться? - налицо проблема, но всезнайки (при чем не умаляя их заслуг перед сообществом) пытаются убедить, что проблемы никакой нет. Зачем?

*синхронная, именно синхронная, это важно.


Перечитайте доку:

PS. И на Сабере нефига наезжать, хороший тестировщик знаете функционирование системы лучше разработчика.
 
fxsaber #:

Демо открывается за 20 секунд: File->Open an Account->скопировать название сервера в поле поиска->Find your company->Next->Open a demo account.


Результат работы скрипта на  ForexTimeFXTM-Demo01.

Result.price и Result.deal в нулях. И это правильно и логично. Причина многократно разбиралась на форуме.


В коде, как только PositionSelect возвращает true, сразу делается PositionGetDouble, который, конечно, ненулевой. Написал этот пост, чтобы можно было давать ссылку на него для быстрой демонстрации корректности работы MT5 в этой части.


ЗЫ Прослушивалка всех торговых операций.

  1. Запустите прослушивалку.
  2. Выставите ордер скриптом или руками.
  3. Закройте прослушивалку.
  4. Смотрите результат в \MQL5\Files\OnTradeTransaction.txt.
Это полная картина, что происходит внутри терминала.

Абсолютный бред! Некорректные данные в структуре ответа после вызова OrderSend () так же нелепы, как некорректные данные в структурах OnTradeTransaction ()!

Sergey Gridnev #:

PS. И на Сабере нефига наезжать, хороший тестировщик знаете функционирование системы лучше разработчика.

Буду наезжать, ибо нехфиг писать ересь.


 
Andrey Dik #:

Абсолютный бред! Некорректные данные в структуре ответа после вызова OrderSend () так же нелепы, как некорректные данные в структурах OnTradeTransaction ()!

Кусок из справки про OrderSend():

При отправке рыночного ордера (MqlTradeRequest.action=TRADE_ACTION_DEAL) успешный результат функции OrderSend() не означает, что ордер был выполнен (исполнены соответствующие сделки): true в этом случае означает только то, что ордер был успешно размещен в торговой системе для дальнейшего выполнения. Торговый сервер может в возвращаемой структуре результата result заполнить значения полей deal или order, если эти данные будут ему известны в момент формирования ответа на вызов OrderSend(). В общем случае событие или события исполнения сделок, соответствующих ордеру, могут произойти уже после того, как будет отправлен ответ на вызов OrderSend().

OrderSend() не может заполнить то, чего ещё не знает.

Сильно зависит от "брокера" и способа организации "торговли" у него, на сколько я понимаю. Но если OrderSend() для рыночного ордера сразу возвращает всю информацию о сделке - это скорее повод для задуматься откуда сервер МТ знает эту информацию.

 
Andrey Miguzov #:

Кусок из справки про OrderSend():

При отправке рыночного ордера (MqlTradeRequest.action=TRADE_ACTION_DEAL) успешный результат функции OrderSend() не означает, что ордер был выполнен (исполнены соответствующие сделки): true в этом случае означает только то, что ордер был успешно размещен в торговой системе для дальнейшего выполнения. Торговый сервер может в возвращаемой структуре результата result заполнить значения полей deal или order, если эти данные будут ему известны в момент формирования ответа на вызов OrderSend(). В общем случае событие или события исполнения сделок, соответствующих ордеру, могут произойти уже после того, как будет отправлен ответ на вызов OrderSend().

OrderSend() не может заполнить то, чего ещё не знает.

Сильно зависит от "брокера" и способа организации "торговли" у него, на сколько я понимаю. Но если OrderSend() для рыночного ордера сразу возвращает всю информацию о сделке - это скорее повод для задуматься откуда сервер МТ знает эту информацию.

Да, всё верно в справке написано, и задумайтесь немного, если получен тикет сделки, то разве неизвестна цена сделки? вы совершаете сделки на базаре не зная цену? - никто не совершает сделки без цены. И если есть тикет, значит сделка зарегистрирована, значит у неё есть цена. Вот если бы сервер выдал 0 тикет, то и не зачем интересоваться ценой этой сделки. Но раз тикет пришел, значит и цена есть у сделки. бл, я уже по тридцатому кругу объясняю, неужели непонятны такие простые вещи? 

Задумайтесь, как так могло случится, что брокер зарегистрировал сделку, но цену по которой выполнил сделку не сообщает?! Вы понимаете что это значит? Это умышленное поведение брокера, который заполняет цену сделки спустя некоторое время любым угодным брокеру значением. Меня забанят нахвиг, из за того, что приходиться объяснять вещи, которые должны были бы дойти до вас и без меня.


Дальнейшее дискутирование по этой теме не вижу целесообразным, и даже считаю опасным с точки зрения дальнейшего пребывания на этом ресурсе. Нужно дождаться ответа разработчиков. 

 
Andrey Dik #:

Да, всё верно в справке написано, и задумайтесь немного, если получен тикет сделки, то разве неизвестна цена сделки? вы совершаете сделки на базаре не зная цену? - никто не совершает сделки без цены. И если есть тикет, значит сделка зарегистрирована, значит у неё есть цена. Вот если бы сервер выдал 0 тикет, то и не зачем интересоваться ценой этой сделки. Но раз тикет пришел, значит и цена есть у сделки. бл, я уже по тридцатому кругу объясняю, неужели непонятны такие простые вещи? 

Задумайтесь, как так могло случится, что брокер зарегистрировал сделку, но цену по которой выполнил сделку не сообщает?! Вы понимаете что это значит? Это умышленное поведение брокера, который заполняет цену сделки спустя некоторое время любым угодным брокеру значением. Меня забанят нахвиг, из за того, что приходиться объяснять вещи, которые должны были бы дойти до вас и без меня.


Дальнейшее дискутирование по этой теме не вижу целесообразным, и даже считаю опасным с точки зрения дальнейшего пребывания на этом ресурсе. Нужно дождаться ответа разработчиков. 

Ответа разработчиков не будет. У них свое представление о синхронности. Возврат true и ненулевой тикет ордера не гарантируют наличия всей информации о сделке.

Ты вправе махать шашкой дальше, но это не конструктивно. Очевидно, что торговую модель не будут править сейчас, спустя столько лет. Нужно смириться, изучить ее, и научиться использовать. Либо переходить на "нормальный терминал".

 
Andrey Dik #:

Но раз тикет пришел, значит и цена есть у сделки. бл, я уже по тридцатому кругу объясняю, неужели непонятны такие простые вещи? 

Если есть тикет сделки, но нет цены - нужны комментарии разработчиков. Сам склоняюсь, что это баг, полностью с Вами согласен.

Если есть тикет ордера, но нет цены - то это норм.

Было бы классно, если бы Вы код fxsaber/аналогичный код выполнили на реальном счете и логи показали - это конкретное доказательство, что есть ошибки.

Поймите правильно - заводить реальный счет у брокера, чтобы проверить Ваши утверждения - это реально загон.

 
Andrey Khatimlianskii #:

Ответа разработчиков не будет. У них свое представление о синхронности. Возврат true и ненулевой тикет ордера не гарантируют наличия всей информации о сделке.

Ты вправе махать шашкой дальше, но это не конструктивно. Очевидно, что торговую модель не будут править сейчас, спустя столько лет. Нужно смириться, изучить ее, и научиться использовать. Либо переходить на "нормальный терминал".

Согласен с тобой по всем моментам.

Но, согласен ли ты с тем, что если известен тикет сделки, то должна быть известна и цена сделки? Простой вопрос, да или нет.

 
Andrey Miguzov #:

Если есть тикет сделки, но нет цены - нужны комментарии разработчиков. Сам склоняюсь, что это баг, полностью с Вами согласен.

Если есть тикет ордера, но нет цены - то это норм.

Было бы классно, если бы Вы код fxsaber/аналогичный код выполнили на реальном счете и логи показали - это конкретное доказательство, что есть ошибки.

Поймите правильно - заводить реальный счет у брокера, чтобы проверить Ваши утверждения - это реально загон.

ну, вот теперь я вижу нотки конструктива. но, только нотки. если нет возможности проверить на реальном счете, то какой смысл было начинать бодаться? то есть, все должны поверить на слово исключительно на авторитет Сабера (или кого либо ещё)?

вот в том то и дело, речь не о тикете ордера! а о тикете сделки.

мне нет смысла приводить логи, кроме разработчиков проверять это на реальном счете никто не будет. я описал предельно прозрачно свои шаги и результаты шагов, этого вполне достаточно что бы начинать думать тем кто прочитал моё сообщение. И да, нужны комментарии разработчиков, о чем я и говорил изначально, тут нет никакого смысла мериться авторитетом среди форумчан, только разработчик может пояснить за эту проблему.

 
fxsaber #:

ЗЫ Прослушивалка всех торговых операций.

  1. Запустите прослушивалку.
  2. Выставите ордер скриптом или руками.
  3. Закройте прослушивалку.
  4. Смотрите результат в \MQL5\Files\OnTradeTransaction.txt.
Это полная картина, что происходит внутри терминала.

Открытие маркет-ордера. Часть лога (в приложении).

2022.06.13 11:34:59.619
Trans.deal = 0
Trans.order = 0
Trans.symbol = 
Trans.type = TRADE_TRANSACTION_REQUEST (10)
Trans.order_type = ORDER_TYPE_BUY (0)
Trans.order_state = ORDER_STATE_STARTED (0)
Trans.deal_type = DEAL_TYPE_BUY (0)
Trans.time_type = ORDER_TIME_GTC (0)
Trans.time_expiration = 1970.01.01 00:00:00
Trans.price = 0.0
Trans.price_trigger = 0.0
Trans.price_sl = 0.0
Trans.price_tp = 0.0
Trans.volume = 0.0
Trans.position = 0
Trans.position_by = 0
Request.action = TRADE_ACTION_DEAL (1)
Request.magic = 0
Request.order = 


2269836084
Request.symbol = EURUSD
Request.volume = 1.0
Request.price = 0.0
Request.stoplimit = 0.0
Request.sl = 0.0
Request.tp = 0.0
Request.deviation = 0
Request.type = ORDER_TYPE_BUY (0)
Request.type_filling = ORDER_FILLING_FOK (0)
Request.type_time = ORDER_TIME_GTC (0)
Request.expiration = 1970.01.01 00:00:00
Request.comment = 
Request.position = 0
Request.position_by = 0
Result.retcode = 10008
Result.deal = 0
Result.order = 
2269836084
Result.volume = 0.0
Result.price = 0.0
Result.bid = 0.0
Result.ask = 0.0
Result.comment = 
Result.request_id = 23
Result.retcode_external = 0

Сразу после этого сообщения OrderSend вернул true.


2022.06.13 11:34:59.647
Trans.deal = 2259843812
Trans.order = 


2269836084
Trans.symbol = EURUSD
Trans.type = TRADE_TRANSACTION_DEAL_ADD (6)
Trans.order_type = ORDER_TYPE_BUY (0)
Trans.order_state = ORDER_STATE_STARTED (0)
Trans.deal_type = DEAL_TYPE_BUY (0)
Trans.time_type = ORDER_TIME_GTC (0)
Trans.time_expiration = 1970.01.01 00:00:00
Trans.price = 1.04783
Trans.price_trigger = 0.0
Trans.price_sl = 0.0
Trans.price_tp = 0.0
Trans.volume = 1.0
Trans.position = 


2269836084
Trans.position_by = 0
Request.action = ENUM_TRADE_REQUEST_ACTIONS::0 (0)
Request.magic = 0
Request.order = 0
Request.symbol = 
Request.volume = 0.0
Request.price = 0.0
Request.stoplimit = 0.0
Request.sl = 0.0
Request.tp = 0.0
Request.deviation = 0
Request.type = ORDER_TYPE_BUY (0)
Request.type_filling = ORDER_FILLING_FOK (0)
Request.type_time = ORDER_TIME_GTC (0)
Request.expiration = 1970.01.01 00:00:00
Request.comment = 
Request.position = 0
Request.position_by = 0
Result.retcode = 0
Result.deal = 0
Result.order = 0
Result.volume = 0.0
Result.price = 0.0
Result.bid = 0.0
Result.ask = 0.0
Result.comment = 
Result.request_id = 0
Result.retcode_external = 0

Сообщение о только что пришедшей сделке в Терминал.


В обоих сообщениях выделил желтым цветом время прихода сообщений. Отлично видно, что сделка пришла через 28 миллисекунд после успешного возврата из OrderSend.

А могла и вовсе не прийти - реджект маркет-ордера, например, через несколько секунд. Однако, маркет-ордер был выставлен, поэтому true от OrderSend и можно работать дальше.

Файлы:
 
Andrey Dik #:

Согласен с тобой по всем моментам.

Но, согласен ли ты с тем, что если известен тикет сделки, то должна быть известна и цена сделки? Простой вопрос, да или нет.

А вас не затруднит уточнить откуда известен тикет сделки?

И уточните пожалуйста, вы говорите о счёте hadge или netting?

Причина обращения: