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

 
crossy:


Qui se Orderselect è FALSO come l'EA può tornare alla linea di codice: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )

???

Puoi andare al valore successivo nel ciclo usando continue. . . o uscire dal ciclo con break. . . cliccate sui link per la documentazione su ciascuno.
 
crossy:

Qui se Orderselect è FALSE come l'EA può tornare alla linea di codice: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )


???

Quel codice è sbagliato...

cnt deve iniziare da OrdersTotal() - 1 e diminuire fino a cnt >= 0 . . . . la prima voce è 0 non 1

Ecco perché ho chiesto di vedere il codice. . e tu hai mostrato abbastanza per identificare il problema . . probabilmente. ;-)

 
RaptorUK:

Quel codice è sbagliato . . .

cnt deve iniziare da OrdersTotal() - 1 e diminuire fino a cnt >= 0 . . . . la prima voce è 0 non 1

Ecco perché ho chiesto di vedere il codice. . e tu hai mostrato abbastanza per identificare il problema . . probabilmente. ;-)


Molto corretto. Grazie, Wizeman!
 
crossy:

Molto corretto. Grazie, Wizeman!


E un'altra idea:

Se ho molte condizioni, si può scrivere

Se( X>b && B>S && NB<F......)

{

BBB= 5;

}f.e.

Qui, l'EA deve calcolare ogni condizione all'interno della parentesi.

Ma, se stai cercando l'efficienza (4.000 linee di codice...) preferisco avere:

Se ( X>b )

{

mentre (B>S)

{

Mentre (NB<F..)

{

BBB=5;

}

break;

}

break;

}

Le 2 varianti sono le stesse?

Y.

 

crossy, quando scrivi il codice, per favore usa il pulsante SRC, sarà molto più leggibile

Così sarà mostrato come questo

   //--- first code
   If(X>b && B>S && NB<F......)
     {
      BBB=5;
     }
   
   // --- second code
   If(X>b)
     {
      while(B>S)
        {
         while(NB<F..)
           {
            BBB=5;
           }
         break;
         }
      break;
     }

Ecco la spiegazione del ciclo "if, while e for" in mql4 https://book.mql4.com/operators/assign

Sul secondo codice, è OK dal momento che si utilizza la pausa, tuttavia, questo è un lungo cammino solo per ottenere BBB = 5, preferisco il primo codice, usa meno risorse

 
crossy:


E un'altra idea:

Se ho molte condizioni, si può scrivere

Se( X>b && B>S && NB<F......)

{

BBB= 5;

}f.e.

Qui, l'EA deve calcolare ogni condizione all'interno della parentesi.

Ma, se stai cercando l'efficienza (4.000 linee di codice...) preferisco avere:

Usando while in questo modo ci si può trovare in un ciclo infinito.
 
Grazie a entrambi!
 
onewithzachy:

Usa il pulsante SRC per visualizzare il tuo codice per una migliore lettura, per favore :)

Il tuo OrderSelect() è codificato in modo sbagliato. Confronta il tuo codice con questo. Poi scrivi se hai ancora il problema o no :)


Un ringraziamento speciale a onewithzachy,

Non sapevo che l'ORDERSELECT migth non cattura, quindi potresti avere errori sconosciuti.

Il mio codice che era di 4016 linee di codice è diventato quasi 4500 linee - ma senza errori.

Grazie a tutti, amici.

Y.

 

Ciao amici,

Dopo un lungo viaggio qui, ho avuto un buon avanzamento con il mio EA, ma ho un altro problema, come segue:

Ho la seguente linea di codice:

CLOSE_Single_P(Pair1, "LONG",OrderT,OrderL);

come:

Pair1 è il simbolo,

"LONG" è il segno di un trade lungo,

OrderT è il numero del biglietto dell'ordine,

OrderL è la dimensione del lotto dell'ordine.

La funzione è la seguente:

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;
}
for ( int vvv = OrdersTotal()-1; vvv >= 0; vvv-- )
{
if ( OrderSelect(vvv, SELECT_BY_POS, MODE_TRADES) )
{
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);
if ( Check )
break;
}
}
}
return;
}

Il mio PROBLEMA è: L'EA a volte chiude il trade molto bene, ma a volte l'EA chiude la tarde MA continua a cercare il ticket per chiuderlo, anche se è già stato chiuso.

(Ricevo l'errore: "Numero di ticket sconosciuto...".

Penso di avere un errore di logica.

Grazie per il vostro gentile aiuto.

Y

 

Per favore. . . . .