Ciclo operatore 'per' domande - pagina 13

 

Simon,

"Il tuo ciclo while non ha trovato nessun biglietto . . . . ."

Non ha "possibilmente" trovato l'indice del biglietto nel pool della storia, l'ha trovato o le funzioni seguenti non sarebbero state eseguite :)


"un indice del pool != un numero di ticket, non ne abbiamo già parlato ?"

Mi spiego meglio,

Un numero di ticket d'ordine è il numero di ticket unico assegnato a un ordine una volta che la richiesta è stata inviata.

Un numero di posizione dell'ordine è la posizione di un ordine in un indice delpool di ordini(importante da capire) simile a un array.


"perché ti aspetti che l'ordine USDJPY chiuso finisca nella stessa posizione in un pool completamente diverso, lo History pool?"

Non dovrei perché è un pool separato.

Nel codice che ho presentato-

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
      
      Print(OrderCloseTime());
     }

questo è apparentemente selezionando l'ordine dal pool storico giusto? Almeno questo è quello che ho capito dalla documentazione. Inoltre ho recentemente provato ad aprire circa cinque ordini su coppie di valute separate, ne ho chiuso uno, poi ho acceso l'EA e ha ancora eseguito tutte le funzioni incluso Print(OrderCloseTime());.


Grazie.

 
WhooDoo22:

Simon,

"Il tuo ciclo while non ha trovato nessun biglietto . . . . ."

Non ha "possibilmente" trovato l'indice del biglietto nel pool della Storia, l'ha trovato o le funzioni seguenti non sarebbero state eseguite :)

Quali funzioni stai usando che usano un numero di biglietto? I tuoi OrderSelects sono tutti SELECT_BY_POS . . . POS che significa POSition, quindi ripeto, il tuo ciclo while non trova un biglietto ma un indice nel pool Order.


Quello che stai selezionando dal pool storico è l'ordine alla posizionei dell'indice come fai a sapere che l'ordine che hai appena chiuso è alla posizionei? la risposta è che non lo sai. . il valore dii è la posizione dell'ordine USDJPY nel pool degli ordini... i pool sono completamente separati e non sono collegati in alcun modo.
 

Simon,

"il tuo ciclo while non trova un biglietto, ma un indice nel pool di ordini".

Sì, credo di aver capito questo. Questo non dovrebbe essere un problema.


"I pool sono completamente separati e non sono collegati in alcun modo."

Questo è compreso, ma il blocco di codice della funzione OrderClose() sembra funzionare come previsto. Adatterò il blocco di codice per salvare il valore del numero del biglietto d'ordine in modo da continuare con quello che vuoi affrontare. D'accordo?

In primo luogo, farò questa domanda: Perché il numero di posizione storico di un ordine non dovrebbe essere lo stesso del suo numero di posizione attuale? Credo che questo numero sia lo stesso.


Grazie.

 
WhooDoo22:

Simon,

"il tuo ciclo while non trova un biglietto, ma un indice nel pool di ordini".

Sì, credo di aver capito questo. Questo non dovrebbe essere un problema.


"I pool sono completamente separati e non sono collegati in alcun modo."

Questo è compreso eppure il blocco di codice della funzione OrderClose() sembra funzionare come previsto.

Non c'è stata alcuna modifica alla chiamata OrderClose() quindi dovrebbe funzionare ancora.


Tuttavia, questo non funziona come previsto perché il concetto è fatalmente difettoso . . . finché non si capisce perché non ha senso continuare . . .

 if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))


   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
      
      Print(OrderCloseTime());
     }
 
WhooDoo22:


In primo luogo, farò questa domanda: Perché il numero di posizione del pool storico di un ordine non dovrebbe essere lo stesso del suo attuale numero di posizione del pool? Credo che il numero sia lo stesso.


Vai sul tuo conto demo con il quale stai facendo dei test... quanti ordini aperti hai? Quanti ordini hai nella cronologia nella scheda Cronologia del conto?
 

Simon,

'Storia del conto' ne contiene cinquantasei.

'Trade' (ordini aperti) ne contiene tre.


Sto aspettando che tu scriva: "Immagino che funzioni WhooDoo. :)"

Continua, ho controllato il numero di ticket della funzione Print() restituito e ha restituito un numero di ticket diverso da quello dell'ordine USDJPY.

Non funziona. Confermato. Sono contento di averci provato però, questa lezione valeva la pena di essere discussa.

Grazie.

 
WhooDoo22:

Simon,

'Storia del conto' ne contiene cinquantasei.

'Trade' (ordini aperti) ne contiene tre.

Se crei un nuovo ordine USDJPY ed esegui il tuo codice e trovi questo nuovo ordine i avrà un valore di 3, quale posizione nello History Pool assumerà il tuo ordine USDJPY quando lo chiuderai? ce ne sono già 56 quindi la posizione 3 è già occupata, così come la posizione 4, 5, 6, 7 . . . 55
 

Simon,

57.

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      int usdjpy_ticket_number=OrderTicket();
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(usdjpy_ticket_number,SELECT_BY_TICKET,MODE_TRADES)==true)
      
      Print("Ticket number for USDJPY = ",usdjpy_ticket_number);
      Print("Order close time = ",OrderCloseTime());
     }

Grazie.

 
WhooDoo22:

Simon,

57.

Grazie.

i è 3 quindi come si fa a selezionare l'ordine in posizione 3 nello History Pool per ottenere l'ordine in posizione 57 ? ?
 

Simon,

Non lo farà. L'ho riscoperto di recente.

Grazie.