Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 703

 
Zvezdochet:

SIM. É exatamente disto que se trata o livro de Sergei Kovalev. É o que está faltando muito no momento.

Não existe um livro de texto sobre mql5 como tal neste site, eu não sei sobre outros. Mas há muitos artigos, leia-os, talvez você consiga.

Статьи по MQL5
Статьи по MQL5
  • www.mql5.com
Статьи по программированию на языке MQL5
 

Cavalheiros programadores!

Por favor, ajude-me a resolver um problema com o qual tenho lutado durante um mês.

Meu TS às vezes não fecha encomendas por alguma razão.

É o que parece:

Os três primeiros pedidos - 44329646, 44330563 e 44337351 abrem e fecham multa.

E, na quarta ordem, a tragédia acontece:

e assim por diante até ao infinito...

Ou seja, um consultor especializado abre o pedido 44339156 e tenta fechar o pedido 44337351 que ele mesmo (!!!!) fechou com sucesso várias horas antes.

Você tem que fechá-lo manualmente; se não o fizer, às vezes você sofrerá com o mais profundo abatimento. Que desastre!

Como isso é possível?

O código do Expert Advisor é tão simples quanto possível:

здесь - условие открытия сделки
{
         RefreshRates();
         total_orders_NZDUSD=TotalOrders("NZDUSD.I");
         if(total_orders_NZDUSD==0)
         {
         Balance=AccountBalance();
         Lots=NormalizeDouble((Balance/(Ask*10.0))*0.01,2);
         double AskNorm=NormalizeDouble(Ask,Digits);
         ticket_buy_NZDUSD=OrderSend("NZDUSD.I",OP_BUY,0.01,AskNorm,0,0,0);
         }
      }
здесь - условие закрытия сделки
      {
         RefreshRates();
         if(OrderSelect(ticket_buy_NZDUSD, SELECT_BY_TICKET)==true)
         {
         total_orders_NZDUSD=TotalOrders("NZDUSD.I");
         ctm_ticket_buy_NZDUSD=OrderCloseTime();
         order_type_NZDUSD=OrderType();
            if(total_orders_NZDUSD>0)
            {
               if(ctm_ticket_buy_NZDUSD==0)
               {
                  if(order_type_NZDUSD==OP_BUY)
                  {
                  double BidNorm=NormalizeDouble(Bid,Digits);
                  OrderClose(ticket_buy_NZDUSD,0.01,BidNorm,0);
                  }
               }
            }
         }

Como um e o mesmo programa pode funcionar "vez após vez"? Eu não entendo...

 
Alexander_K2:

Cavalheiros programadores!

Por favor, ajude-me a resolver um problema com o qual tenho lutado há um mês.

Meu TS às vezes não fecha encomendas por alguma razão.

É o que parece:

Os três primeiros pedidos - 44329646, 44330563 e 44337351 abrem e fecham multa.

E, na quarta ordem, a tragédia acontece:

e assim por diante até ao infinito...

Ou seja, um consultor especializado abre o pedido 44339156 e tenta fechar o pedido 44337351 que ele mesmo (!!!!) fechou com sucesso várias horas antes.

Você tem que fechá-lo manualmente; se não o fizer, às vezes você sofrerá com o mais profundo abatimento. Que desastre!

Como isso é possível?

O código do Expert Advisor é tão simples quanto possível:

Como um e o mesmo programa pode funcionar "vez após vez"? Eu não entendo...

Leia a Ajuda para OrderSelect(). Em particular, leia a referência sobre a seleção por bilhete. Até mesmo uma ordem fechada é selecionada por bilhete. Já está fechada, e você está tentando fechá-la novamente.

Se 0, significa que ainda está no mercado, feche-o, se > 0, significa que já está fechado e não há necessidade de chutar novamente, não ganhará vida e não fechará.

 
Artyom Trishkin:

Leia a ajuda para OrderSelect(). Particularmente sobre a seleção por ingresso. Até mesmo uma ordem fechada é selecionada pelo bilhete. Já está fechada, e você está tentando fechá-la novamente.

Se for selecionado, verifique o tempo de fechamento - se 0, significa que ainda está no mercado - feche-o, se > 0, significa que já está fechado e não é preciso chutar novamente - não ganhará vida e não fechará.

Muito obrigado - vou tentar.

 
Alexander_K2:

Muito obrigado - vou tentar.

Seja bem-vindo. Não é preciso tentar, é preciso fazer...

 
Artyom Trishkin:

Por favor. Não é preciso tentar, é preciso fazer...

Artem, eu li a ajuda - tudo parece estar correto.

ctm_ticket_buy_NZDUSD=OrderCloseTime();
         ...
               if(ctm_ticket_buy_NZDUSD==0)
            ...

Estou verificando o horário de fechamento.

Aqui estão algumas informações da Referência MQL4:

Recomenda-se chamar a função OrderSelect( ) imediatamente antes de solicitar os últimos dados do pedido.

Isto também é verdade.

Então o que está errado?

 
Alexander_K2:

Artem, eu li a ajuda - tudo parece estar correto.

Estou verificando o horário de fechamento.

Aqui estão algumas informações da Referência MQL4:

Recomenda-se chamar a função OrderSelect( ) imediatamente antes de solicitar os últimos dados do pedido.

Isto também é verdade.

Então o que está errado?

Que tipo de função é essa?

total_orders_NZDUSD=TotalOrders("NZDUSD.I");
E depois de ter sido trabalhada, qual ordem é atribuída?
 
Alexander_K2:

Cavalheiros programadores!

Por favor, ajude-me a resolver um problema com o qual tenho lutado há um mês.

Meu TS às vezes não fecha encomendas por alguma razão.

É o que parece:

Os três primeiros pedidos - 44329646, 44330563 e 44337351 abrem e fecham multa.

E, na quarta ordem, a tragédia acontece:

e assim por diante até ao infinito...

Ou seja, um consultor especializado abre o pedido 44339156 e tenta fechar o pedido 44337351 que ele mesmo (!!!!) fechou com sucesso várias horas antes.

Você tem que fechá-lo manualmente; se não o fizer, às vezes você sofrerá com o mais profundo abatimento. Que desastre!

Como isso é possível?

O código do Expert Advisor é tão simples quanto possível:

Como um e o mesmo programa pode funcionar "vez após vez"? Eu não entendo...

qual a direção que você está olhando para a matriz de pedidos?

Se houver possíveis fechamentos/deleções durante a "revisão", é melhor olhar na direção oposta. De OrderTotal()-1 a 0 inclusive.

Caso contrário, você pode pisar nela :-)


 
Artyom Trishkin:

Qual é esta característica?

Esta característica foi-me dada gentilmente pela Goldtrader, pela qual sou sinceramente grato.

//+------------------------------------------------------------------+
//| Calculate Market Orders function                                 |
//+------------------------------------------------------------------+
int TotalOrders(string sy) {    // sy - Currency Pair
int orders=0;
   for (int i=0; i<OrdersTotal(); i++) {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
        if (OrderSymbol()==sy) {
           if (OrderType()==OP_SELL || OrderType()==OP_BUY) {
             orders++;
           }
         }
       }
     }
return(orders);
}

Ele permite abrir pedidos simultaneamente para diferentes pares de moedas.

:))) Na minha opinião, foi o que começou tudo isso, porque eu o habilitei há cerca de um mês... Sem ele eu não posso ver o Graal.

Há algo de errado com isso?

 

Há algo realmente errado, no entanto...

Quero dizer, façoOrderSelect uma e outra vez a partir da função Não faz sentido...

Razão: