Função OrderSendAsync()

 

A descrição diz quea função OrderSendAsync() foi concebida para realizar operações assíncronas sem esperar que o servidor responda ao pedido enviado. Na execução bem sucedida, o código de resposta na variável de resultado contém o valor TRADE_RETCODE_PLACED ( código 10008) - "order placed". Execução bem sucedida de . não nos dá qualquer garantia de que o pedido tenha chegado ao servidor comercial e sido aceite para processamento.

Por um lado, sabemos que o campo retcode contém o código de retorno do servidor comercial - ou seja, assume-se que este código é gerado pelo servidor, e não pelo terminal do utilizador. Por outro lado, o Manual de Referência afirma que paraOrderSendAsync() funciona um dos códigos a ser gerado pelo servidor (código 10008) pode ser devolvido, mesmo que o pedido de troca em si não tenha chegado ao servidor de troca.

Pergunta 1: Onde exactamente (em que fase) é gerado o código 10008 paraa função OrderSendAsync? [Assumindo que este código pode ser devolvido sem que o servidor comercial esteja envolvido].

Pergunta 2: O código 10008 é o código do servidor comercial ou este código é gerado no lado do terminal do cliente antes de o pedido comercial ser recebido pelo servidor?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 

1. terminal, em operação de expedição bem sucedida (a encomenda caiu com sucesso da aeronave, mas não sabemos o que se segue)

2. desculpas pela tautologia, mas vou responder da mesma forma: Sim, o código 10008 é o código de resposta do servidor comercial. Sim, este código é definido pelo terminal no momento de... próximo ponto 1.

Porque é que está a tentar encontrar entre linhas o que já está escrito explicitamente?

 

O modelo de ordem de comércio assíncrona envolve múltiplos eventos e estados de ordem:

Diagrama dos Estados de Ordem de Mercado

Diagrama dos Estados de Ordem Condicional

Actualmente em MT5:

  1. CREATED - o próprio facto da função OrderSendAsync e OrderSend ser chamada (este estado de ordem em MT5 não é de modo algum identificável do exterior).
  2. Se a encomenda for CANCELADA (o próprio terminal cortou-a através dos seus filtros). Por exemplo, o preço limite é pior do que o preço actual), a resposta é negativa por OrderSend e OrderSendAsync.
  3. OPENED é o resultado de TRADE_RETCODE_PLACED (a sua encomenda passa com sucesso pelos filtros internos do terminal e é enviada para o servidor) para OrderSendAsync.
  4. SUBMIT_OK - o servidor aceitou a sua ordem de troca. Se for uma ordem pendente, a OrderSend irá completar a sua execução. Se Mercado - continuar a esperar.
  5. FILLED - a sua encomenda está em estado de execução (por exemplo, enviou-a através de STP e está à espera de uma resposta). Continuar a esperar.
  6. FILL_OK - a sua encomenda foi executada. Se Mercado - OrderSend irá completar a sua execução.

Por favor, ver os diagramas acima para mais detalhes.

 
Rosh:

1. terminal, em operação de expedição bem sucedida (a encomenda caiu com sucesso da aeronave, mas não sabemos o que se segue)

2. desculpas pela tautologia, mas vou responder da mesma forma: Sim, o código 10008 é o código de resposta do servidor comercial. Sim, este código é definido pelo terminal no momento de... próximo ponto 1.

Porque é que está a tentar encontrar entre as linhas do que já está escrito explicitamente?

Não estou à procura de "entre as linhas", mas mais uma vez, estou a tentar compreender as fases de duas (agora) funções comerciais.

No seu comentário à função OrderSendAsync, diz que"a função é semelhante a OrderSend() em finalidade e parâmetros". Mas, a julgar pela sua resposta, a função OrderSendAsync não é exactamente a mesma que a função OrderSendAsync. Este último destina-se a verificar o pedido comercial no servidor, pelo que os códigos devolvidos por OrderSend() são os códigos gerados pelo próprio servidor, e não alguma outra substância. No caso de OrderSendAsync() o código de retorno é gerado pelo terminal, pelo que este código (código 10008) não pode ser considerado como código de retorno do servidor. Isto é "código gerado pelo terminal", mesmo que o inclua formalmente na lista de códigos do servidor.

Por outras palavras, as duas funções são duas abordagens: "Código gerado pelo servidor" versus "Código gerado pelo terminal". A este respeito, as funções não são as mesmas. Conhecer esta subtileza é necessário para compreender correctamente se o "código de retorno" está a vir do servidor ou do terminal.

 
hrenfx:

OPENED é o resultado de TRADE_RETCODE_PLACED for OrderSendAsync.

    Podemos concluir que TRADE_RETCODE_PLACED (10008) é de todo inútil em termos das suas expectativas quando se utiliza a função OrderSend original?

    Gracias para o diagrama!

    Como traduzir correctamente "Order condition gets met met"?

     
    Yedelkin:

    Podemos concluir que TRADE_RETCODE_PLACED (10008) é de todo inútil em termos das suas expectativas quando se utiliza a função OrderSend original?

    TRADE_RETCODE_PLACED não tem nada a ver com OrderSend sequenceSend.

    Como traduzir correctamente "Order condition gets met met"?

    O preço actual satisfaz a condição de encomenda. Em vez de FILLED pode ser CANCELADO, por exemplo, se não houver margem suficiente para executar a ordem.

    Mais uma vez, para trabalhar de forma assíncrona, precisamos de um poderoso sistema de eventos, onde à chegada há uma opção a receber:

    • A mensagem de texto do evento.
    • O tempo da sua criação.
    • A que ordem se refere.
    • O tipo de mensagem (notícias, ordem, estado da comunicação, etc.)

    A arquitectura da própria plataforma deve ser muito bem pensada. Se existem lacunas na fase de concepção da arquitectura, é extremamente difícil contorná-las a fim de se alcançar a universalidade.

    IMessage (JForex API 2.9.6.1 API)
    • www.dukascopy.com
    FRAMES    NO FRAMES
     

    hrenfx:

    Yedelkin:

    Podemos concluir que TRADE_RETCODE_PLACED (10008) é de todo inútil em termos das suas expectativas quando se utiliza a função OrderSend original?

    TRADE_RETCODE_PLACED não tem nada a ver com OrderSend sequenceSend.

    Pronto! Cheguei a isto intuitivamente há cerca de meio ano atrás, e vocês confirmam-no :) Já bom :)
     
    hrenfx:

    Mais uma vez, para trabalhar de forma assíncrona, é necessário um sistema de eventos poderoso onde seja possível recuperar à chegada:

    • A mensagem de texto do evento.
    • O tempo da sua criação.
    • A que ordem se refere.
    • Tipo de mensagem (notícias, ordem, estado da comunicação, etc.)
    Trata-se, entre outras coisas, da necessidade de detalhar o evento OnTrade?
     
    Yedelkin:
    Pronto! Cheguei a isto intuitivamente há cerca de meio ano atrás, e vocês confirmam-no :) Já bom :)
    Um homem fica sempre feliz quando alguém confirma a correcção do seu raciocínio. Não importa o quanto corresponda à realidade.
     
    Rosh:
    Uma pessoa fica sempre feliz quando alguém confirma a correcção do seu raciocínio. Não importa quão verdade seja.
    Bem, nos últimos oito meses nunca ninguém refutou a conclusão pública do homem. Nem teoricamente nem por resultados de testes. Mas obrigado por semear a dúvida :)
     

    Deve ser esclarecido:

    TRADE_RETCODE_PLACED for OrderSend é a resposta do servidor.

    TRADE_RETCODE_PLACED for OrderSendAsync é uma resposta terminal.

    Embora os códigos sejam idênticos, eles têm um significado bastante diferente. É muito provável que os criadores resolvam esta ambiguidade.

    É por isso que o deve compreender:

    TRADE_RETCODE_PLACED к последовательной OrderSend не имеет никакого отношения.

    deve ser compreendido no contexto apropriado.