MT5 e velocidade em ação - página 31

 
fxsaber:

Se você executar esta EA em uma conta sem posições ou ordens atuais.

e depois fechar manualmente a posição aberta pela EA, então haverá três posições abertas na sebe (na posição de rede de triplo volume).


É este o comportamento correto? Provavelmente não entendo bem o Terminal. Em seguida, por favor, esclareça.

Antes de mais nada, você deve ler a ajuda.

https://www.mql5.com/ru/docs/event_handlers/ontrade

Por favor, observe:

Обработчик OnTrade() вызывается после соответствующих вызовов OnTradeTransaction(). В общем случае нет точного соотношения по количеству вызовов OnTrade() и OnTradeTransaction(). Один вызов OnTrade() соответствует одному или нескольким вызовам OnTradeTransaction.

Simplificando, o manipulador OnTrade() pode ser chamado para cada comércio individual. A conseqüência do fechamento de uma posição pode ser a chegada de várias transações separadas.

Isto é facilmente verificado - basta adicionar Print() à OnTrade() de seu exemplo.

Além disso, quero chamar sua atenção para seu teste anterior que você em vão espera conhecer o ticket de pedido através da OrderSendAsync().

Документация по MQL5: Обработка событий / OnTrade
Документация по MQL5: Обработка событий / OnTrade
  • www.mql5.com
//|                                               OnTrade_Sample.mq5 | //|                        Copyright 2018, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Expert initialization function                                   |...
 
Anton:

Além disso, eu quero chamar sua atenção, de acordo com seu teste anterior, que você espera em vão descobrir o bilhete de pedido através de OrderSendAsync().

Parece que não está lá em nenhum lugar. Somente a HistóriaSelecciona os atrasos no OnTrade.

 
fxsaber:

Não parece estar lá em nenhum lugar. Somente os históricosSelect lags em OnTrade são mostrados.

if (PositionSelectByTicket(Result.order)) // Если позиция открыта - закрываем.
 
Anton:

A primeira coisa a fazer é ler a ficha informativa.

https://www.mql5.com/ru/docs/event_handlers/ontrade

Favor observar:

Обработчик OnTrade() вызывается после соответствующих вызовов OnTradeTransaction(). В общем случае нет точного соотношения по количеству вызовов OnTrade() и OnTradeTransaction(). Один вызов OnTrade() соответствует одному или нескольким вызовам OnTradeTransaction.

Simplificando, o manipulador OnTrade() pode ser chamado para cada transação comercial individual. A conseqüência do fechamento de uma posição pode ser a chegada de várias transações separadas.

É facilmente verificado - basta adicionar Print() à OnTrade() de seu exemplo.

É claro, eu fiz a impressão. A pergunta não era sobre o número de chamadas OnTrade, mas sobre o número de posições em aberto.

Após a primeira OnTrade, uma ordem de mercado é colocada. No próximo OnTrade, esta ordem de mercado não deve permitir a abertura de mais ordens pela condição. Mas no próximo OnTrade, a soma de OrdensTotal() + PosiçõesTotal() também é zero. É correto?

 
Anton:

Obrigado, eu não vi a peça de copiar-colar.

 
fxsaber:

Não parece estar lá em nenhum lugar. Somente a HistóriaExibe-se o atraso da seleção na OnTrade.

O cache das seleções de pedidos ainda hoje melhorado, será beta dentro de algumas horas.

 
Renat Fatkhullin:

O cache das seleções de pedidos ainda hoje melhorado, será beta dentro de algumas horas.

Você quer dizer HistorySelect? Apenas a ligação automática não leva à OrderSelect.

 
Nelson Wanyama:

Alguma idéia por que o mt5 não possui o separador "Comissões"? Eles só aparecem após o fechamento de um comércio.

Alguma idéia por que o mt5 não possui o separador "Comissões"? Eles só aparecem após o fechamento de um comércio.



 
fxsaber:

Fez a impressão, é claro. A questão não era o número de chamadas OnTrade, mas o número de posições em aberto.

Após a primeira OnTrade, uma ordem de mercado é colocada. No próximo OnTrade, esta ordem de mercado não deve permitir a abertura de mais ordens pela condição. Mas no próximo OnTrade, a soma de OrdensTotal() + PosiçõesTotal() também é zero. É correto?

Está tudo na ajuda: https://www.mql5.com/ru/docs/trading/ordersendasync

Успешное выполнение означает только факт отсылки, но не даёт никакой гарантии, что запрос дошел до торгового сервера и был принят для обработки.  Торговый сервер при обработке полученного запроса отправляет клиентскому терминалу ответное сообщение об изменении текущего состояния позиций, ордеров и сделок, которое приводит к генерации события Trade.
Portanto, OrdensTotal() pode, sem dúvida, ser nula. O mesmo pode acontecer com PositionsTotal(). Tudo depende das transações, de seu tipo e conteúdo.
Документация по MQL5: Торговые функции / OrderSendAsync
Документация по MQL5: Торговые функции / OrderSendAsync
  • www.mql5.com
"и режим вывода сообщений в журнал "Эксперты". По умолчанию выводятся все детали.\r\n" //| Expert initialization function                                   | //| Expert deinitialization function                                 | //| TradeTransaction function                                        |...
 
Anton:

Tudo está na ajuda: https://www.mql5.com/ru/docs/trading/ordersendasync

Успешное выполнение означает только факт отсылки, но не даёт никакой гарантии, что запрос дошел до торгового сервера и был принят для обработки.
Portanto, o OrderTotal() pode certamente ser nulo. O mesmo pode acontecer com PositionsTotal().

https://www.mql5.com/ru/docs/constants/tradingconstants/orderproperties#enum_order_state

Cada pedido tem um status que descreve seu status. Para obter informações, use a funçãoOrderGetInteger() ouHistoryOrderGetInteger() com modificador ORDER_STATE. Os valores válidos são armazenados na enumeração do ENUM_ORDER_STATE.

ENUM_ORDER_STATE

Identificador

Descrição

ORDEM_ESTADUAL_INICIADA

Ordem verificada quanto à exatidão, mas ainda não aceita pelo corretor



O estado inicial não ocorre após um OrderSendAsync bem sucedido?