Aiuto: Perché l'EA non chiude un trade - pagina 6

 
RaptorUK:

La funzione non ti serve affatto. . . . . . sbarazzatene.



Ciao Raptor,

Ho bisogno di questa funzione perché l'EA è molto complesso, e uso questa funzione con molte versioni di condizioni di chiusura.

Spero che tu mi capisca.

Y.

 
onewithzachy:

Rifacciamo la parte 2 :(


Grazie onewithzachy, ma come ho risposto prima, ho bisogno di questa funzione per chiudere con molte versioni di condizioni, quindi è troppo complesso mettere i comandi di codice di chiusura all'interno di ogni condizione, soprattutto che non è un comando di codice unico.

Grazie,

Y.

 
RaptorUK:

Fai questo . . . ( ripetuto da qui: https://www.mql5.com/en/forum/139543 )

. . . e non hai bisogno della Funzione per niente.


Raptor, ho bisogno di questa funzione per superare le situazioni di REQUATE, come potete vedere.

Y.

 
onewithzachy:

@ RaptorUK, sto pensando di indossare il casco di protezione così almeno posso pensare bene in avanti rispetto a quello che sto facendo ora. Non è che, quei piloti fanno, pensare bene avanti? :D


@ skaboy, sto chiedendo educatamente qui, se non ti dispiace, si prega di utilizzare il pulsante SRC per postare il tuo codice. Lo abbiamo chiesto troppe volte solo in questo thread.

@ crossy, È quasi una settimana dal tuo primo post. Certamente capisco che tu possa non avere la mente lucida ora alle prese con 4000 linee, in questo momento io stesso ho la mia anche qui. Se ancora non lo capisci, - ehm - puoi chiederci di scrivere quel codice Close per te. Comunque devi ancora scrivere il codice anche solo un po' - e mostrarcelo :D, il codice di RaptorUK appena sopra è più diretto del mio, pensaci e poi puoi andare avanti con il tuo EA.

Con il modo in cui scrivi il codice qui - troppo codice ripetuto non necessario - dovresti avere un po' di preoccupazione con le tue 4000 linee di codice che potrebbe rallentare il tuo EA e far perdere un tick al tuo EA. Va bene perdere un paio di punti, tuttavia cosa succede se si perde come 10 pips di distanza? e probabilmente le tue 4000 linee possono ancora essere ridotte a sole 400 linee. Chi lo sa ?, il tuo EA, diventa più leggero e più veloce :D


Grazie onewithzachy,

Il mio EA ha questo piccolo errore, che è:

1) Chiude il ticket pertinente e lo cerca anche.

2) Questo errore non appare in ogni ordine di chiusura, e a volte funziona bene.

Per quanto riguarda le altre 3.950 linee di codice, funzionano molto bene.

Allego le linee di codice rilevanti, di nuovo.

Y.

...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      Check = false;
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+
 
crossy:



Ciao Raptor,

Ho bisogno di questa funzione perché l'EA è molto complesso, e uso questa funzione con molte versioni di condizioni di chiusura.

Spero che tu mi capisca.

Y.

Non credo che tu abbia capito il codice che hai copiato e incollato da qualche altra parte... e no, non è per le requote. . non controlli nemmeno se un errore che ottieni è un requote.
 
RaptorUK:
Non credo che tu capisca il copia e incolla che hai fatto da qualche altra parte... e no, non è per le requote. . non controlli nemmeno se un errore che ricevi è un requote.


No Raptor, l'errore che ho ricevuto era: Il numero del biglietto non è stato trovato. E posso dirti che il reson è Il ticket era già stato chiuso un secondo prima.

Non capisco come si chiude il ticket e si continua a cercarlo...

 
crossy:


Non capisco come chiude il ticket e continua a cercarlo...

È a causa del ciclo che ho detto che non ti serve . . . nella funzione che non ti serve.

"Perché hai un ciclo nella funzione Close_Single_P? " dal 3° post a pagina 1

"Perché il ciclo?" da pagina 4, 2° post

 

Mi sbaglio o questa funzione non chiude mai gli ordini SHORT?

...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);
                               ^^^^ - You always pass LONG to variable TREN, so variable PRC (below) is always equal taken from LONG, but NEVER from SHORT.

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      Check = false;
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         ^^^   Never executed
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+
 
Waidas:

Mi sbaglio o questa funzione non chiude mai gli ordini SHORT?


Waidas, hai ragione. Ma questo è solo un piccolo pezzo dell'EA, che chiude LONG e SHORT.

Grazie.

 
RaptorUK:

È a causa del ciclo che ho detto che non ti serve. . . nella funzione che non ti serve.

"Perché hai un ciclo nella funzione Close_Single_P? " dal 3° post a pagina 1

"Perché il ciclo?" da pagina 4, 2° post


Raptor, avevi ragione, e ho eliminato i loop, quindi la funzione è ora senza alcun loop.

La allego di nuovo qui.

Y.

...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+