Alerta: Pedido de Duplicação de Terminal MT4 Enviado por Peritos - página 6

 

Há uma diferença entre

bool Buy_Ticket = OrderSend(........)

e o que você está fazendo

bool Buy_Ticket = Ordersend > 0;   //SIMPLIFIED CODE FOR EASIER READING

no primeiro caso de uma ordem falhar um valor de -1 será devolvido, mas o bool interpretará isto como VERDADEIRO

no segundo, você está usando a condição (Orderend>0) para atribuir verdadeiro ou falso ao booleano.

 
GumRai:


Há uma diferença entre

e o que você está fazendo

no primeiro caso de uma ordem falhar um valor de -1 será devolvido, mas o bool interpretará isto como VERDADEIRO

no segundo, você está usando a condição (Orderend>0) para atribuir verdadeiro ou falso ao booleano.



Isso é verdade? Não sou capaz de testá-lo em uma conta demo (Live trade) agora, mas fiz uma verificação rápida em um backtest, interrompendo propositalmente o OrderSend() com stoploss inválido = pedir (preço de mercado) para uma negociação longa. O resultado é OrderSend() retorna um "-1" como esperado e meu bool var Buy_Ticket também retorna falso.


** EDITAR **

Você perdeu minhas condições "> 0" atrás da OrderSend()? Meu código original mostra:

bool Buy_Ticket = OrderSend(........) > 0;
 
BigFisherman:



Isso é verdade? Eu não sou capaz de testá-lo em uma conta demo (Live trade) agora, mas fiz uma verificação rápida em um backtest, interrompendo propositalmente OrderSend() com stoploss inválido = pedir (preço de mercado) para uma negociação longa. O resultado é OrderSend() retorna um "-1" como esperado e meu bool var Buy_Ticket também retorna falso.


** EDITAR **

Você perdeu minhas condições "> 0" atrás da OrderSend()? Meu código original mostra:


Desculpe, sim, eu perdi o >0.

Acho que é uma maneira tão estranha de fazer isso, que eu não percebi.

 

@ BigFisherman verifique o código abaixo

   bool Buy_Ticket;
   int TicketNo = 123456789;
   Buy_Ticket = TicketNo > 0;
   Alert(Buy_Ticket);

ver aqui

O operador de atribuição pode ser usado várias vezes em uma expressão . Neste caso, o processamento da expressão é realizado da esquerda para a direita:

y=x=3;

Primeiro será atribuído à variável x o valor 3, depois à variável y será atribuído o valor x, ou seja, também 3.

 
GumRai:


Desculpe, sim, eu perdi o >0.

Acho que é uma maneira tão estranha de fazer isso, que eu não percebi.


Não há problema.

Concordo que não é uma boa prática codificá-la dessa forma; codifiquei essa parte no estágio inicial do meu aprendizado do MQL, mas como me pareceu correto durante todo esse tempo, deixei que fosse até que este problema de comércio duplicado acontecesse. Mas aparentemente, agora "parece" que meu código original, embora confuso, parece válido, então ele volta ao tópico original deste tópico "Duplicate trades..."; este pode ser um bug "raro" sério e altamente indesejável no mt4, que infelizmente não sou capaz de reproduzir devido à sua aparência rara (1 em mais de 500 comércios).

Para informações de qualquer pessoa, devido a como eu codifiquei meu EA (consulte meu primeiro posto na pg5), SL & TP só foi designado após detectar OrderSend() (IMHO é bastante infalível até agora). E o que aconteceu com minha duplicata anterior foi que NUNCA fiz SL & TP por alguma razão desconhecida; além da OrderSend() retornando "-1" mas abrindo uma negociação de qualquer forma OU "it" abriu 2 negociações simultâneas em uma OrderSend() ** apenas minha própria especulação **. Felizmente, eu estava em situação de violação do meu PC quando isso aconteceu, então eu podia simplesmente fechá-lo manualmente; imagine o que aconteceria se eu estivesse de férias.

 
qjol:

@ BigFisherman verifique o código abaixo

   bool Buy_Ticket;
   int TicketNo = 123456789;
   Buy_Ticket = TicketNo > 0;
   Alert(Buy_Ticket);


Buy_Ticket retorna verdadeiro como esperado. O que você está tentando dizer?

 

não estou tentando dizer, estou dizendo!

se você o usa assim

bool Buy_Ticket = OrderSend(........) > 0;

é claro que você vai se tornar verdadeiro se a OrderSend() tiver sido executada

porque primeiro é examinado se o resultado da OrderSend é > 0

e depois foi passado para

Buy_Ticket

mas ainda não é a maneira correta de lidar com isso

 
qjol:

não estou tentando dizer, estou dizendo!

se você o usa assim

é claro que você vai se tornar verdadeiro se a OrderSend() tiver sido executada

porque primeiro é examinado se o resultado da OrderSend é > 0

e depois foi passado para

mas ainda não é a maneira correta de lidar com isso



Agora eu sei de quem é o posto a filtrar em mql4, obrigado de qualquer forma por sua contribuição.
 
y=x=3;
Eu tentei fazer isso, mas o MetaEditor sempre me pára sempre que tento compilar.
 
BigFisherman:


Agora eu sei de quem é o posto a filtrar em mql4,

nota: meu nome de usuário em mql5 é o mesmo