Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 429

 
Trader7777:

Ragazzi, per favore controllate la funzione, ho alcuni dubbi su di essa


Beh, se si sta chiudendo, è meglio fare un loop all'indietro.
 
splxgf:

quindi se c'è una chiusura, è meglio fare un loop all'indietro.

No, dovrebbe chiudersi dal vecchio al nuovo ordine
 
Trader7777:

no, dovrebbe chiudere dal vecchio al nuovo ordine

Se cambiate l'ordine, sarà dal vecchio al nuovo. Nel frattempo, dal nuovo al vecchio, e anche attraverso uno a volte può succedere.
 
evillive:

Se cambiate l'ordine, sarà dal vecchio al nuovo. Per ora, dal nuovo al vecchio, e anche attraverso uno a volte può succedere.

Se fate for (int i = OrdersTotal()-1; i>0; i--) chiuderà dal nuovo al vecchio!
 
evillive:

Se cambiate l'ordine, sarà dal vecchio al nuovo. Ma nel frattempo, dal nuovo al vecchio, e a volte uno dopo l'altro, può succedere.

Non capisco, se siete troppo pigri per suggerire errori, perché impormi una funzione che, secondo il mio TS, non mi serve?
 

Buona sera...

questo indicatore https://www.mql5.com/ru/code/9767 nel mio EA sarà corretto?

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);

se(biglietto>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordine BUY aperto: ",OrderOpenPrice());

}

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

ritorno(0);

}

// controllare la posizione corta (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:

Non capisco, se sei troppo pigro per suggerire errori, perché dovresti impormi una funzione che non mi serve secondo il mio TS?

Bene, allora guarda la tua funzione, per esempio il primo ordine viene preso e siccome si adatta alla condizione viene cancellato... Il suo posto è preso dal secondo ordine.

Durante il prossimo ciclo, viene controllato il terzo ordine, e il secondo sarà saltato.

Ecco perché abbiamo sottolineato che l'enumerazione è sbagliata...

Se il proprio ordine è davvero importante, possiamo decrementare la variabile del ciclo quando lo cancelliamo.

 
Trader7777:

Non capisco, se sei troppo pigro per suggerire errori, perché impormi una funzione che secondo il mio TS non mi serve?

Ti ho detto di farlo mentre. Come (aggiornamento 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++;
   }
}
 

Oppure

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

Perché k e n sono rispetto al numero totale di ordini chiusi?

Motivazione: