[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 212

 
dzhini:

Grande, è tutto qui. Postato ieri sera, ma il thread è già andato abbastanza avanti con le spiegazioni di cosa è un mago e come si prepara )))

Per favore, datemi una risposta alla mia domanda.

Il mio EA imposta BUYLIMIT e SELLLIMIT in determinati momenti. Vorrei che cancellasse gli ordini pendenti (OP_BUY o OP_SELL) in una direzione quando l'ordine viene aperto.

Questa era la mia variante:


È meglio così:

void start(){
  .....

  for(int i=OrdersTotal() -1;i>=0;i--) 
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
     {
      if(CalculateCurrentOrders(Symbol())>0) {Alert(CalculateCurrentOrders(Symbol()));ClosePendingOrder(OP_SELLLIMIT);} // (1) 
      if(CalculateCurrentOrders(Symbol())<0) {Alert(CalculateCurrentOrders(Symbol()));ClosePendingOrder(OP_BUYLIMIT);} //(2) 
      if(TimeCurrent() - OrderOpenTime()>=HowManyHours*60*60) {ClosePendingOrder(OP_BUYLIMIT);ClosePendingOrder(OP_SELLLIMIT);} //(3) 
     } 
   ....

}

Senza entrare nella logica, l'assenza di parentesi graffe e l'organizzazione errata di OrderSelect() sono immediatamente evidenti

 
eddy:

perché non fare queste domande raggruppate tematicamente e aggiungere la possibilità di fare domande direttamente lì? sarebbe un normale questionario.

E se si aggiunge la possibilità di aggiungere non solo domande ma anche compiti, con codici/articoli come risposte, si ottiene ciò che propongo - una struttura diversa del sito che include tutto il suo contenuto esistente

Roman, il lavoro preparatorio è stato fatto per molto tempo, l'ideologia delle FAQ è stata precedentemente sviluppata e sarà pubblicata in un ramo speciale, la base tecnica è stata concordata con l'amministrazione.
Aspetta il rilascio del ramo per vedere come coincide con le tue idee e, se necessario, puoi sviluppare e implementare il tuo progetto se è in tuo potere.
 
Sergey_Rogozin:

È meglio così:

Senza entrare nella logica, la mancanza di parentesi graffe e l'organizzazione errata di OrderSelect() sono immediatamente evidenti

Potete spiegare cosa c'è di sbagliato in OrderSelect() . Perché, come ho scritto prima, se faccio la rimozione degli ordini in direzione di un commercio già aperto, tutto va senza problemi. Inoltre va senza problemi rimuovendo tutti gli ordini in un tempo strettamente definito.
 
dzhini:
Potreste spiegare cosa c'è di sbagliato in OrderSelect() . Perché, come ho scritto prima, se faccio la rimozione degli ordini in direzione di un commercio già aperto, tutto va senza problemi. Non abbiamo nemmeno problemi a rimuovere tutti gli ordini ad una certa ora.
Senza vedere il codice, è difficile dirlo con certezza. Forse OrderSelect() funzionerà così com'è, se non avete bisogno di selezionare per simbolo, mago, tipo di operazione, ecc.
 

Questo è essenzialmente un tentativo di fare una pratica per il futuro, per lavorare con diverse serie di ordini (non solo due).

Quando il ciclo di visualizzazione degli ordini è in esecuzione, l'EA funziona abbastanza bene fino all'allarme, ma non vuole lavorare correttamente con la funzione di cancellazione:

void ClosePendingOrder(int ORDERType)
{
 while(!IsTradeAllowed()) Sleep(100);
 if(OrderType()==ORDERType)
 {
 if(OrderSymbol()==Symbol())
 { 
 if(!OrderDelete(OrderTicket(),CLR_NONE))
   Print("Order close error",GetLastError());
return;
      }
    }
}
 
granit77:
l'ideologia delle FAQ è pre-progettata e la base tecnica è stata concordata con l'amministrazione.
vedere come corrisponde alle vostre idee e, se necessario, potete sviluppare il vostro progetto
Ho avuto la risposta: "tutto è già stato pensato e concordato con l'amministrazione (cioè, non c'è modo di cambiarlo), se qualcosa non corrisponde alle vostre idee, potete farne delle vostre"?
 
eddy:
Ho capito bene la risposta: "Tutto è già stato pensato e concordato con l'amministrazione (cioè non c'è modo di cambiarlo), se qualcosa non si adatta alle tue idee - puoi fare le tue"?
"Tutto è già stato rubato prima di te")))
 
dzhini:

Questo è essenzialmente un tentativo di fare una pratica per il futuro, per lavorare con diverse serie di ordini (non solo due).

Quando il ciclo di visualizzazione degli ordini è in esecuzione, l'EA funziona abbastanza bene fino all'allarme, ma non vuole lavorare correttamente con la funzione di cancellazione:

Sembra che tutto sia a posto. Non lo so.
 
Sergey_Rogozin:

Come funziona: ClosePendingOrder(OP_SELLLIMIT);} // (1) ?

Il suo codice.

Il codice della funzione per cancellare un ordine è dato nel messaggio stesso... Forse non ho capito la domanda, ma cercherò di spiegarla come l'ho capita io:

Un ciclo for imposta un'enumerazione di tutti gli ordini aperti e pendenti disponibili. ClosePendingOrder(OP_SELLLIMIT) - seleziona da questa lista quelli che corrispondono al simbolo della valuta e al parametro OP_SELLLIMIT . Non appena trova queste corrispondenze, cancella questo ordine in sospeso.

 
dzhini:

Ho dato il codice per la funzione di cancellazione dell'ordine proprio in quel messaggio... Forse non ho capito la domanda, ma cercherò di spiegarla come l'ho capita io:

Un ciclo for imposta un'enumerazione di tutti gli ordini aperti e pendenti disponibili. ClosePendingOrder(OP_SELLLIMIT) - seleziona da questa lista quelli che corrispondono al simbolo della valuta e al parametro OP_SELLLIMIT . Non appena trova queste corrispondenze, cancella questo ordine in sospeso.

L'ho già capito. L'ho solo guardato distrattamente all'inizio.

Non vedo l'errore.