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

 
crossy:

O.K. Ecco la versione modificata, che ho ottenuto lo stesso errore.

Y.

Non avete bisogno della Funzione per niente. . . . . . . . eliminatela.

 

Rifacciamo la parte 2 :(

 ...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         // Do the selection and OrderClose() INSIDE HERE ..., please
         
         
         /*
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
         */
      }   
      //if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... ) // this selection goes up there
    
         //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); // close it up there, and you have to rewrite the parameters
   }
   */
 

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

if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
   {
   Print("Trying to close Order: ", OrderTicket());                             // <---- tells you that the   if  returned true
   if ( ! OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Yellow)
      Print("OrderClose failed, error # ", GetLastError());                          // <------- reports the error if the OrderClose failed . . 
   } 

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

 
onewithzachy:

Rifacciamo la parte 2 :(


Voglio il vostro aiuto, per favore, perché ho una vacanza, quindi tornerò domenica sera.

Farò quello che avete suggerito e spero di riuscirci.

Grazie a entrambi.

Y.

 
crossy:


Voglio il vostro exuss, per favore, dato che ho una vacanza, quindi tornerò domenica sera.


OK, godetevi la vostra vacanza :-)
 
crossy:


Voglio il vostro exuss, per favore, dal momento che ho una vacanza, Quindi sarò di nuovo domenica sera.

Farò quello che mi avete suggerito e spero di riuscirci.

Grazie a entrambi.

Y.

Avere un buon tempo :D

Io ho F1 Monaco da guardare questa domenica :D

 
onewithzachy:

Avere un buon tempo :D

Io ho F1 Monaco da guardare questa domenica :D

E domani, FP3 e qualifiche ;-)
 
crossy:


Grazie onewithzachy,

Per prima cosa penso che tu abbia un piccolo errore con:

for(int cnt = OrdersTotal() -1 ; cnt >= 0; cnt--)

Devi aggiungere la correzione in verde e in grassetto.

Ma non capisco come la seguente linea possa aiutarci?

#include "..\libraries\stdlib.mq4"

Grazie, Y.

Trovo questo molto più semplice e funziona per me:

//---------------------------------------------+

void CheckForClose()
{
int i, res, order_id;

//-------+
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==falso) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continua;
order_id= OrderTicket();


//---trail e chiudi
se (OrderType() == OP_BUY)
{
if (Is_Close_Buy==true) //--il segnale di chiusura
{
RefreshRates();// Aggiorna i tassi
res= 0;
res= OrderClose(order_id,Lots,Bid,3,Gold);
while(IsTradeAllowed() == false) Sleep(100); //--attendere un po' per ottenere la risposta dal server
se (res>0){
PlaySound("cash_register.wav");} //-suono felice, si spera di fare soldi !!!!
se (res<0)
{
PlaySound("creak.wav");
Print("OrderSend failed with error #",GetLastError());
return(0);
}
return;
}
}//end chiudere il controllo degli ordini di acquisto
//---
se (OrderType() == OP_SELL)
{
if (Is_Close_Sell==true) //-il segnale di chiusura
{
RefreshRates();// Aggiorna i tassi
res= 0;
res= OrderClose(order_id,Lots,Ask,3,Gold);
while(IsTradeAllowed() == false) Sleep(100); //--attendere un po' per ottenere la risposta dal server
se (res>0){
PlaySound("cash_register.wav");}
if(res<0)
{
PlaySound("creak.wav");
Print("OrderSend failed with error #",GetLastError());
return(0);
}
return;
}
}//end chiudere il controllo dell'ordine di vendita
}//--------+
return;
}

//----------------------------------------------+

 
RaptorUK:
E domani, FP3 e qualifiche ;-)

@ 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, te lo chiedo educatamente, se non ti dispiace, potresti usare 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 veloce :D

 
skaboy:

Lo trovo molto più semplice e funziona per me:


Non funziona se avete più ordini da chiudere... leggete questo e imparate: Loop e chiusura o cancellazione di ordini
Motivazione: