Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 429

 
Trader7777:

Pessoal, por favor, verifiquem a função, eu tenho algumas dúvidas sobre isso


Bem, se estiver fechando, é melhor fazer um loop para trás.
 
splxgf:

Portanto, se houver um fechamento, é melhor retroceder.

Não, deve fechar da ordem antiga para a nova ordem
 
Trader7777:

não, deve fechar da antiga para a nova ordem

Se você mudar o pedido, ele será do antigo para o novo. Enquanto isso, do novo para o velho, e até mesmo através de um às vezes isso pode acontecer.
 
evillive:

Se você mudar o pedido, ele será do antigo para o novo. Por enquanto, do novo ao velho, e até mesmo através de um às vezes pode acontecer.

Se você fizer para (int i = OrderTotal()-1; i>0; i--) ele fechará de novo para velho!
 
evillive:

Se você mudar o pedido, ele será do antigo para o novo. Mas enquanto isso, do novo para o velho, e às vezes um após o outro, isso pode acontecer.

Não entendo, se você é preguiçoso demais para sugerir erros, por que me impor uma função que, de acordo com meu TS, não preciso?
 

Boa noite ...

este indicador https://www.mql5.com/ru/code/9767 no meu EA estará correto?

if(iCustom( NULL,0, "wave(MACD_FZR)",1,0)<Low[1] )

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green);

if(bilhete>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Imprimir("Pedido aberto : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError()));

retorno(0);

}

// verificar a posição curta (SELL)

if(iCustom( NULL, 0, "wave(MACD_FZR)",1,1)>High[1] )

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red);

 
Trader7777:

Não entendo, se você é preguiçoso demais para sugerir erros, por que você deveria me impor uma função que eu não preciso, de acordo com meu TS?

Então veja sua função, por exemplo, a primeira ordem é tomada e como se encaixa na condição ela é apagada... Seu lugar é ocupado pela segunda encomenda.

Durante o próximo loop, a terceira ordem é verificada e a segunda será pulada.

É por isso que apontamos que a enumeração está errada.

Se seu próprio pedido for realmente importante, podemos diminuir a variável de laço ao excluí-lo.

 
Trader7777:

Não entendo, se você é preguiçoso demais para sugerir erros, por que me impor uma função que, de acordo com meu TS, não preciso?

Eu lhe disse para fazer isso enquanto. Como (atualização 3):

void CloseHalfOrders(int otype) {
   int count = 0;
   double CTexisting = CountTrades(otype), nCloseOrdersCnt = NormalizeDouble(CTexisting/2,1), price;
   int i = 0;
   while (i < OrdersTotal()) {
      if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype) {
            if (otype == OP_BUY) price = Bid;
            else if (otype == OP_SELL) price = Ask;
            else return;//работаем только с OP_BUY/OP_SELL
            if (count < nCloseOrdersCnt) {
               OrderClose(OrderTicket(),OrderLots(),price,0,Lime);
               count++;
               Sleep(1000);
               i = 0;
               continue;
            } else i = OrdersTotal();
         }
      }
      i++;
   }
}
 

Ou

           OrderClose(OrderTicket(),OrderLots(),Bid,0,Lime);
           i--;
 
                    if (count<n)

Por que k e n são comparados com o número total de pedidos fechados?

Razão: