Problema de entrada de pedidos múltiplos para conta ativa com um corretor específico - página 4

 
FinanceEngineer:

Olá

Eu sei que soa estranho. Quando verifiquei o valor retornado de OrderSend(pedido,resultado) no código anterior, tive um problema de pedidos múltiplos. Agora em meu novo código, eu não verifico o valor retornado de OrderSend(request,result) ( mas ainda assim atribuí o valor retornado a alguma variável para evitar erro na nova construção do terminal.


OláFinanceEngineer, exatamente o que eu lhe disse, você está apenas mascarando o verdadeiro problema, já que na minha opinião você está imprimindo isto (####) em seu código anterior (o código 10008 devolvido), e não a situação de pausa.

if(!OrderSend(request,result) || result.deal==0 )
      {
         Print("OrderSend Code: ",result.retcode); // You are printing this (###) -> 10008
         ...
 
figurelli:

Olá Alain,

Não está claro para mim o que você precisa saber, já que estamos apenas falando do novo código da FinanceEngineer, e um conselho para testar o código de retorno da OrderSend() que foi alterado em relação ao código original.

Note que ou seu código original e seu novo não têm o código 10010 teste, então se é relevante para você, por que você não perguntou desde o primeiro post dele?

De qualquer forma, você pode explicar por que você precisaria do teste do código 10010 para uma política de enchimento FOK?

Como esta não é a primeira vez que vejo você e outros Moderadores falando, você conhece alguns casos em que é realmente necessário este teste de código para pedidos FOK (Fill Or Kill), que você poderia compartilhar conosco?

Agradecemos antecipadamente.

Suponho que também posso fazer perguntas neste fórum, e não só tenho que responder sempre. Simplesmente isso.

Vemos muitos códigos aqui, testando o código retornado (MqlResult) contra 10008 ou 10009, mas alguém pode explicar qual é o verdadeiro significado desses códigos, qual é a diferença entre "Pedido Colocado" e "Pedido concluído" ? Como parece que são os únicos 2 códigos que não são códigos de erro, certo?

10010 é questionável, a documentação dizia:

10008

TRADE_RETCODE_PLACED

Pedido feito

10009

TRADE_RETCODE_DONE

Solicitação concluída

10010

TRADE_RETCODE_DONE_PARTIAL

Apenas parte do pedido foi completada

Mas o que isso significa "apenas parte do pedido foi completada". Você observou que com a política de enchimento FOK, isso provavelmente não pode ser a abertura de 0,5 lote se 1 lote for solicitado (por exemplo), mas é o único significado ?

Anteriormente você escreveu cerca de 10010 código :

Não considero este código prova de futuro e seguro o suficiente e este é apenas um exemplo sobre a falta de código de retorno, portanto, por favor leia novamente.

Qual pode ser o significado desta frase ? "Prova de futuro" ? "Suficientemente seguro" para ... ? "Falta de código de retorno", o que está faltando ? (e não tão importante, mas, "ler novamente" o que ?).

 
angevoyageur:

Suponho que também posso fazer perguntas sobre este fórum, e não só tenho que responder sempre. Simplesmente isso.

Vemos muito código aqui, testando o código retornado (MqlResult) contra 10008 ou 10009, mas alguém pode explicar qual é o verdadeiro significado destes códigos, qual é a diferença entre "Pedido Colocado" e "Pedido concluído" ? Como parece que são os únicos 2 códigos que não são códigos de erro, certo?

10010 é questionável, a documentação dizia:

10008

TRADE_RETCODE_PLACED

Pedido feito

10009

TRADE_RETCODE_DONE

Solicitação concluída

10010

TRADE_RETCODE_DONE_PARTIAL

Apenas parte do pedido foi completada

Mas o que isso significa "apenas parte do pedido foi completada". Você notou que com a política de enchimento FOK, isso provavelmente não pode ser a abertura de 0,5 lote se 1 lote for solicitado (por exemplo), mas é o único significado ?

Anteriormente você escreveu cerca de 10010 código :

Qual pode ser o significado desta frase ? "Prova de futuro" ? "Suficientemente seguro" para ... ? "Falta de código de retorno", o que está faltando ? (e não tão importante, mas, "ler novamente" o que ?).

Assim como a maioria das pessoas, eu aprendi a codificação MQL5 olhando para o código de outras pessoas. Estranho o suficiente para mim, até agora eu não vi nenhum código verificando o código 10010. No entanto, talvez valha a pena verificar. Só para prevenir.

Pelo que eu vi, quando verifiquei o código 10008 sozinho, recebi uma ordem de entrada dupla. E quando eu verifico o código 10009, recebi uma ordem de entrada dupla. Quando verifico tanto o código 10008 como o 10009, não recebi ordem de entrada dupla.

Mas estou apenas curioso em termos de ponto de vista prático, se você mesmo verificar o código 10010 em sua EA ? se o pedido foi realmente parcialmente concluído, então qual seria a maneira eficiente de lidar com este tipo de situação?

Eu provavelmente acho que a maioria deste problema de envio de pedidos poderia ser resolvido com a verificação do volume, tendo PositionGetDouble(POSITION_VOLUME) dentro de nosso loop. No entanto, não tenho certeza praticamente se isto é mais eficiente do que verificar o código 10008 ou 10009.

Se o servidor do corretor estiver ocupado, então as chances de não obter o volume certo é tão grande quanto as chances de não obter o código 10008 ou 10009.

Cordiais cumprimentos.

 
figurelli:

Olá Alain,

Não está claro para mim o que você precisa saber, já que estamos apenas falando do novo código da FinanceEngineer, e um conselho para testar o código de retorno da OrderSend() que foi alterado em relação ao código original.

Note que ou seu código original e seu novo não têm o código 10010 teste, então se é relevante para você, por que você não perguntou desde o primeiro post dele?

De qualquer forma, você pode explicar por que você precisaria do teste do código 10010 para uma política de enchimento FOK?

Como esta não é a primeira vez que eu vejo você e outros Moderadores falando, você conhece alguns casos em que é realmente necessário este teste de código para pedidos FOK (Fill Or Kill), que você poderia compartilhar conosco?

Agradecemos antecipadamente.

Bem, quando postamos no fórum da MQL5.com supomos que estamos falando com pessoas que podem ter vários tipos de necessidades enquanto codificam consultores especializados... então, neste caso, é óbvio que você pode simplificar tudo e pedir ao usuário que codifique um consultor especializado "mais simples", uma vez que suas necessidades não são tão "avançadas" como você poderia imaginar. Entretanto, até onde eu sei, há várias situações em que você não pode trabalhar com a política de enchimento FOK.

Deixe-me dar-lhe um exemplo muito simples: suponha que você esteja trabalhando com estoques e o volume escolhido seja de 10.000 estoques. Agora suponha que este mesmo consultor especializado trabalhe com "reversão", assim, em algum sinal aleatório, você pode ter que enviar uma ordem ao mercado com um volume igual a 20.000 ações para executar a chamada "reversão". Neste caso, mesmo as ações muito líquidas (por exemplo, as ações pesadas brasileiras PETR4 ou VALE5) podem não ter um volume de compra ou venda igual a 20.000 ações em um determinado momento. Então, neste caso, como você trataria isto dentro de seu consultor especializado? Você está realmente convencido de que a política FOK seria a melhor abordagem neste caso? Ou você tentaria considerar este código 10010 dentro de seu consultor especializado?

Como dito, quando você trabalha com lotes pequenos o tempo todo, então a política de enchimento da FOK poderia ser sua melhor solução. Entretanto, às vezes as pessoas têm necessidades mais "avançadas".

 
angevoyageur:

Suponho que também posso fazer perguntas sobre este fórum, e não só tenho que responder sempre. Simplesmente isso.

Vemos muito código aqui, testando o código retornado (MqlResult) contra 10008 ou 10009, mas alguém pode explicar qual é o verdadeiro significado destes códigos, qual é a diferença entre "Pedido Colocado" e "Pedido concluído" ? Como parece que são os únicos 2 códigos que não são códigos de erro, certo?

10010 é questionável, a documentação dizia:

10008

TRADE_RETCODE_PLACED

Pedido feito

10009

TRADE_RETCODE_DONE

Solicitação concluída

10010

TRADE_RETCODE_DONE_PARTIAL

Apenas parte do pedido foi completada

Mas o que isso significa "apenas parte do pedido foi completada". Você notou que com a política de enchimento FOK, isso provavelmente não pode ser a abertura de 0,5 lote se 1 lote for solicitado (por exemplo), mas é o único significado ?

Anteriormente você escreveu cerca de 10010 código :

Qual pode ser o significado desta frase ? "Prova de futuro" ? "Suficientemente seguro" para ... ? "Falta de código de retorno", o que está faltando ? (e não tão importante, mas, "ler novamente" o que ?).

Alain, sem problemas, você não tem que responder, pois provavelmente nunca encontrará um caso, já que isto é obrigatório em qualquer bom protocolo OMS.

Também não é preciso falar porque não perguntou depois do primeiro post, já que provavelmente isto está fora do tópico.

De qualquer forma, note que FOK é uma antiga política de preenchimento, que a MQ introduziu provavelmente para abordar a comunicação com OMS, então você a encontrará em todo bom protocolo OMS, como o FIX, por exemplo(como este tópico do fórum do ano 2009, antes da existência do MT5).

Portanto, na minha opinião, não vejo motivo para perguntar cerca de 10010 código de retorno para uma Ordem de Preenchimento ou de Morte, e este é o ponto, uma vez que esta regra é obrigatória e os corretores e provedores OMS devem respeitá-la.

FIX Trading Community: // Fill or Kill Order
FIX Trading Community: // Fill or Kill Order
  • General Q/A
  • www.fixtradingcommunity.org
Have doubt regarding FoK order type. In my view if order is not filled a reject message should be sent by an exchange instead of cancel. Can someone confirm this? No, rejections are to convey that the requested action was not carried out. A FoK order not being filled does not fall in this category, it is rather "works as designed". It is...
 
Malacarne:

Bem, quando postamos no fórum da MQL5.com supomos que estamos falando com pessoas que podem ter vários tipos de necessidades enquanto codificam consultores especializados... então, neste caso, é óbvio que você pode simplificar tudo e pedir ao usuário que codifique um consultor especializado "mais simples", uma vez que suas necessidades não são tão "avançadas" como você pode imaginar. Entretanto, até onde eu sei, há várias situações em que você não pode trabalhar com a política de enchimento FOK.

Deixe-me dar-lhe um exemplo muito simples: suponha que você esteja trabalhando com estoques e o volume escolhido seja de 10.000 estoques. Agora suponha que este mesmo consultor especializado trabalhe com "reversão", assim, em algum sinal aleatório, você pode ter que enviar uma ordem ao mercado com um volume igual a 20.000 ações para executar a chamada "reversão". Neste caso, mesmo as ações muito líquidas (por exemplo, as ações pesadas brasileiras PETR4 ou VALE5) podem não ter um volume de compra ou venda igual a 20.000 ações em um determinado momento. Então, neste caso, como você trataria isto dentro de seu consultor especializado? Você está realmente convencido de que a política FOK seria a melhor abordagem neste caso? Ou você tentaria considerar este código 10010 dentro de seu consultor especializado?

Como dito, quando você trabalha com lotes pequenos o tempo todo, então a política de enchimento da FOK poderia ser sua melhor solução. Entretanto, às vezes as pessoas têm necessidades mais "avançadas".

A explicação é cativante. Pensei a mesma coisa que a maioria de nós provavelmente negocia menos de 1 milhão de dólares americanos por cada comércio. No mercado de alta liquidez como o Forex, o cumprimento parcial da ordem pode ser algo raro. No entanto, nunca diga nunca. Estamos vivendo no mundo probabilístico. Nada é certo. Em termos de consideração prática, se algum corretor não conseguir preencher 1 lote a qualquer momento, eu prefiro encontrar outro corretor para negociar.

Cumprimentos.

 
Malacarne:

Bem, quando postamos no fórum da MQL5.com supomos que estamos falando com pessoas que podem ter vários tipos de necessidades enquanto codificam consultores especializados... então, neste caso, é óbvio que você pode simplificar tudo e pedir ao usuário que codifique um consultor especializado "mais simples", uma vez que suas necessidades não são tão "avançadas" como você pode imaginar. Entretanto, até onde eu sei, há várias situações em que você não pode trabalhar com a política de enchimento FOK.

Deixe-me dar-lhe um exemplo muito simples: suponha que você esteja trabalhando com estoques e o volume escolhido seja de 10.000 estoques. Agora suponha que este mesmo consultor especializado trabalhe com "reversão", assim, em algum sinal aleatório, você pode ter que enviar uma ordem ao mercado com um volume igual a 20.000 ações para executar a chamada "reversão". Neste caso, mesmo as ações muito líquidas (por exemplo, as ações pesadas brasileiras PETR4 ou VALE5) podem não ter um volume de compra ou venda igual a 20.000 ações em um determinado momento. Então, neste caso, como você trataria isto dentro de seu consultor especializado? Você está realmente convencido de que a política FOK seria a melhor abordagem neste caso? Ou você tentaria considerar este código 10010 dentro de seu consultor especializado?

Como dito, quando você trabalha com lotes pequenos o tempo todo, então a política de enchimento da FOK poderia ser sua melhor solução. Entretanto, às vezes as pessoas têm necessidades mais "avançadas".

Olá Malacarne,

Desculpe, mas isto é fora de tópico, pois como Moderadores não podemos confundir a realidade (o que o usuário realmente postou) e e se as condições.

Em outras palavras, se o usuário perguntar algo e publicar o código, e o código tiver a linha abaixo (como o primeiro e antigo), como Moderadores nossa mentalidade deve considerar que ele está usando FOK.

request.type_filling=ORDER_FILLING_FOK;

Você não acha que sim? Se não, acho que tenho que revisar meus conceitos de encontrar erros de código e análise de problemas.

Na verdade, se você não usar FOK, como seus casos brasileiros da BM&FBovespa, minha mentalidade mudará e 10010 códigos de retorno devem ser considerados, mas isto é absolutamente fora de tópico, e talvez uma melhor discussão para o Fórum Português.

De qualquer forma, obrigado por compartilhar isso.

 
FinanceEngineer:

A explicação é cativante. Pensei a mesma coisa que a maioria de nós provavelmente negocia menos de 1 milhão de dólares americanos por cada comércio. No mercado de alta liquidez como o Forex, o cumprimento parcial da ordem pode ser algo raro. No entanto, nunca diga nunca. Estamos vivendo no mundo probabilístico. Nada é certo. Em termos de consideração prática, se algum corretor não conseguir preencher 1 lote a qualquer momento, eu prefiro encontrar outro corretor para negociar.

Cumprimentos.

No meu exemplo, estava falando de volumes em torno de 200.000 dólares. Portanto, tanto quanto sei, vários de nós negociamos mais de USD 200.000 por comércio... :-)
 
FinanceEngineer:

Assim como a maioria das pessoas, eu aprendi a codificação MQL5 olhando para o código de outras pessoas. Estranho o suficiente para mim, até agora não vi nenhum código verificando o código 10010. No entanto, talvez valha a pena verificar. Só para prevenir.


OláFinanceEngineer, você não vê porque provavelmente estes casos são relativos à política de preenchimento deORDER_FILLING_FOK, como você também está usando, portanto, na minha opinião, isto não é necessário, como explicado em meus outros posts aqui.
 
figurelli:

Oi Malacarne,

Desculpe, mas isto está fora de tópico, pois como moderadores não podemos confundir a realidade (o que o usuário realmente postou) e se as condições.

Em outras palavras, se o usuário pergunta algo e publica o código, e o código tem a linha abaixo (como o primeiro e antigo), como Moderadores nossa mentalidade deve considerar que ele está usando FOK.

Não acha que sim? Se não, acho que tenho que revisar meus conceitos de encontrar erros de código e análise de problemas.

Na verdade, se você não usar FOK, como seus casos brasileiros da BM&FBovespa, minha mentalidade mudará e 10010 código de retorno deve ser considerado, mas isto é absolutamente fora de tópico, e talvez uma melhor discussão para o Fórum Português.

De qualquer forma, obrigado por compartilhar isso.

Obrigado por sua opinião... Não é minha intenção trazer "confusão" para a mente das pessoas.

Entretanto, não acho que seja fora de tópico porque se você não verificar o código 10010, seu consultor especializado poderá contornar esta possibilidade e enviar várias ordens (totalmente relacionadas ao tópico, não acha?)...

É isso que estamos "tentando" alertar desde os dois últimos posts sobre este mesmo tópico...