Minha EA faz uma entrada dupla - página 10

 
angevoyageur: Não tenho certeza se entendi o que você quer dizer. Esta questão que estamos falando neste tópico não é causada por uma má codificação, mas por um mau design em mql5 (é minha opinião, ou talvez seja simplesmente um bug?). O que você quer dizer com "múltiplos fios comerciais"?

Eu voltei e reli o que você considera mau desenho.

Dentro do antigo mt4, estas classes não existem. O método normal de verificação de Ordens_Favorecidas dentro é Ticket#===(-1) && GetLastError(). Nunca vi um caso em que seu pedido devolva um ticket# válido e GLE=0. Mas no próximo tick, seu OrderTotal() ainda retorna 0.

Agora tenha em mente que ainda não li toda a documentação do mql5. No entanto, se diz que a PositionSelect_Information só é atualizada mais tarde. E alguém está usando o PositionSelect para avaliar sua lógica de entrada. Então essa pessoa deve esperar até que PositionSelect_Information seja atualizada antes de sair da OrderSend Logic.

Para a coisa da thread... Eu estava falando de vários fios versus um único piso para o envio de pedidos. Como em ordens simultâneas abrindo ao mesmo tempo. Pode ou não ser relevante aqui.

 
Ubzen:

Eu voltei e reli o que você considera mau desenho.

Dentro da velha-mt4 estas classes não existem. O método normal de verificação de Pedidos_Sucedidos dentro é Ticket#===(-1) && GetLastError(). Nunca vi um caso em que seu pedido devolva um ticket# válido e GLE=0. Mas no próximo tick, seu pedidoTotal() ainda retorna 0.

Agora tenha em mente que ainda não li toda a documentação do mql5. No entanto, se diz que a PositionSelect_Information só é atualizada mais tarde. E alguém está usando o PositionSelect para avaliar sua lógica de entrada. Então essa pessoa deve esperar até que PositionSelect_Information seja atualizada antes de sair da OrderSend Logic.

Para a coisa da thread... Eu estava falando de vários fios versus um único piso para o envio de pedidos. Como em ordens simultâneas abrindo ao mesmo tempo. Pode ou não ser relevante aqui.

A documentação sobre o PositionSelect não diz nada sobre "não é atualizado até mais tarde". Ela só diz que mesmo que o PositionSelect seja verdadeiro, as informações sobre uma Posição podem estar desatualizadas, o que não está relacionado ao seu problema aqui.

Voureservar um tempo para fazer alguns testes quando o mercado for aberto para ter certeza de não dizer nada estúpido, uma resposta mais completa mais tarde.

 
angevoyageur:

A documentação sobre PositionSelect não diz nada sobre "não é atualizada até mais tarde". Ela só diz que mesmo que o PositionSelect seja verdadeiro, as informações sobre uma Posição podem estar desatualizadas, o que não está relacionado ao seu problema aqui.

Voureservar um tempo para fazer alguns testes quando o mercado for aberto para ter certeza de não dizer nada estúpido, uma resposta mais completa mais tarde.

K..... e btw, se o documento não disser nada, concordo totalmente com você.

A pergunta que vamos fazer ao Service_Desk é: "Por que você não pode atualizar as informações da Position_Information quando negociar. PositionOpen()==verdadeiro?

Eles provavelmente terão uma boa resposta para nós .

 
angevoyageur:

Não. Eu só estava pensando nisso... Seria provavelmente útil se todas as pessoas envolvidas escrevessem um bilhete para o ServiceDesk sobre este assunto. Entretanto, estou muito cético se a MQ estiver disposta a mudar este projeto. Mas nós podemos tentar.

As pessoas podem escrever para o ServiceDesk e relatar o ticket# aqui. O meu é

Erros, MetaTrader 5 MQL, Open, Start: 2013.12.23 19:08, #916435


Também informei a central de serviço, #933192 | 2014.01.19 14:44

 

A MQ realmente pode facilmente redesenhar isto para ter uma função de timeout?

Como se não houvesse resposta, então teremos um erro, algo assim?

 
doshur:

A MQ realmente pode facilmente redesenhar isto para ter uma função de timeout?

Como se não houvesse resposta, então teremos um erro, algo assim?


Eles fizeram exatamente o inverso. Quando o mql5 foi criado, havia um parâmetro de timeout para uma função como PositionSelect.

Mas eles o removem mais tarde, veja o ponto 9 aqui https://www.mql5.com/en/forum/53/page5#comment_14479

 

Concordo com os argumentos de um mau projeto, mas na minha opinião o principal problema com a MQL5 era adaptar um código de sucesso baseado em Forex para trabalhar como tal com as bolsas de valores (o que é realmente um ótimo material).

Por exemplo, várias bolsas de valores usam o protocolo FIX como padrão, e para mim este protocolo de comunicação não é fácil de adaptar qualquer código ou arquitetura.

De qualquer forma, acredito que os caras da MQ tiveram um desafio de tempo, e tiveram que criar MQL5 baseado em MQL4, e não do zero. Lembro-me que o Campeonato naquele ano foi suspenso para que eles tivessem mais tempo.

Portanto, talvez este tópico possa ser um grande conselho para a futura MQL6 e para uma arquitetura realmente nova a partir do zero, principalmente no que diz respeito à resiliência das transações e soluções agnósticas para trabalhar em qualquer mercado.

 
doshur:

A MQ realmente pode facilmente redesenhar isto para ter uma função de timeout?

Como se não houvesse resposta, então teremos um erro, algo assim?

Tradicionalmente, o timeout não significa que a ordem não vai se tornar uma posição. Você terá que esperar por um período prolongado de tempo ... verificando se ela se torna uma posição ... e acaba suspendendo a negociação caso a ordem não seja executada.

Acho que a MQ ficaria do lado do figurelli sobre isto ser um erro de programador. Porque as funções sobre as quais o PositionOpen é construído, diz claramente que você precisa verificar outras coisas.


****** (Adicionando Agenda pessoal ... você pode parar de ler neste ponto) *******

Esta é a razão pela qual não caço novos programadores sobre funções e seus valores de retorno ao ajudá-los no mql_forum. Não vejo sentido em dizer sempre faça o seguinte.

if( OrderSend()<0 ) { Imprimir( GetLastError() ); }

Isto é suposto ser um comerciante automatizado... você poderia estar longe... e o que ele faz é Print()?

Em minha mente, Error_Handling e Error_Reporting são 2_monstros muito diferentes. Tentar explicar as maneiras apropriadas de lidar com um Erro pode levar páginas e é muito pessoal para o Trader quantas vezes eles devem tentar novamente ou mesmo se eles devem terminar a negociação.

**** Agora eu não estou dizendo se um novato está codificando um EA e tem problemas para Negociar ... Que eles não devem imprimir( GetLastError(); ) <- Isto deve ser óbvio. Mas se eu vou dizer a eles para sempre GetLastError, então eu também deveria dizer a eles para sempre Handle_Error. *** Fim da Agenda. ****

 
angevoyageur:


Eles fizeram exatamente o inverso. Quando o mql5 foi criado, havia um parâmetro de tempo limite para funções como PositionSelect.

Mas eles o removem mais tarde, veja o ponto 9 aqui https://www.mql5.com/en/forum/53/page5#comment_14479

Está na hora de reanimá-lo?
 
doshur:
Está na hora de reavivá-la?

Acho que não. Uma solicitação comercial síncrona tem que ser síncrona em todos os aspectos. É tão simples quanto isso.

Aqui a solicitação é síncrona, mas depois você tem que gerenciar coisas assíncronas. E nada está documentado sobre isso.