Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 548

 
edutak:

Non vorrei mostrare il codice, visto che la prima versione si è dimostrata molto sopravvissuta. È sopravvissuto per 10 anni senza ottimizzazione. Ora voglio renderlo un po' più complesso e redditizio.

Il codice è molto semplice.

Ancora, gli ordini possono essere aperti su ogni tick a causa di un errore nella logica.

Controlla prima di aprire una posizione per vedere se è già aperta o no.
 
Vitalii Ananev:
Controlla prima di aprire una posizione per vedere se è già aperta o no.
Giusto?
for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
         kolpos++;
     }
 

Prima della chiusura è così.

 if(OrdersTotal()!=0)
         if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
            if(OrderType()==OP_BUY)
 
edutak:
Giusto?
   for(int pos=OrdersTotal()-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)  kolpos++;
   }

Va più o meno così.

È meglio trasformarlo in una funzione.

int CountOrder(string Smb,int Magik)
{
   int Total = OrdersTotal();
   if (Total==0) return(0);
   int kolpos = 0;
   for(int pos=Total-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Smb && OrderMagicNumber()==Magik)  kolpos++;
   }
   return(kolpos);
}
 
edutak:

Prima della chiusura è così.

Non hai un controllo per il magik e il simbolo prima della chiusura. Può chiudere i trade di un altro EA o i trade aperti manualmente.
 
Vitalii Ananev:
Va più o meno così.

No, il problema non è stato risolto. non è in questa unità.

Puoi spiegare la differenza tra la mia opzione e la tua?

 
edutak:

No, il problema non è stato risolto. non è in questa unità.

Puoi spiegare la differenza tra la mia opzione e la tua?

Allora state facendo qualcosa di sbagliato, elaborate il vostro codice.

Il mio è meglio :)

...

In questo modo non si perde nessun ordine. Nella tua versione, se in quel momento qualche posizione viene chiusa o un ordine viene cancellato, puoi saltare alcuni dei rimanenti.

 
Vitalii Ananev:

Quindi stai facendo qualcosa di sbagliato, occupati del tuo codice.

Il mio è meglio :)

...

In questo modo non si perde nessun ordine. Se la tua versione mostra che se in quel momento qualche posizione viene chiusa o un ordine viene cancellato, allora puoi saltare alcuni dei rimanenti.

L'ho dichiarato come variabile globale, ma mi dà un errore.

int CountOrder;
 
edutak:

L'ho dichiarato come variabile globale, ma dà un errore.

Quello che vi ho scritto è una funzione.

Ecco un esempio di come usarlo.

int Count = CountOrder(Symbol(),12345);

if (Count==0)
{
//можно открывать
}
 
Vitalii Ananev:

Quello che vi ho scritto è una funzione.

Ecco un esempio di come usarlo.

Confuso