Come controllare se un ordine è selezionato - pagina 9

 
Vinin:


Non ho chiesto a nessuno in particolare.

Ma avrà fatto bene a prenderla sul personale.

Non posso chiamarti stupido, ma sei sordo, questo è certo.

Non si sentono gli altri. Non sto parlando delle mie osservazioni, ma dei consigli che ti sono stati dati.

Avete mai scritto programmi interoperabili?

Quello che Ant_TL chiede è "interoperabilità", ma non può essere implementato in MQL.

 
PapaYozh:

Avete mai scritto un programma interoperabile?

Quello che Ant_TL chiede è "interoperabilità", ma non è fattibile in MQL.


Non è difficile da implementare. E c'è una soluzione di principio. Troppo pigro per leggere oltre
 
Una tale soluzione può essere praticabile per le posizioni chiuse, che non cambieranno più. Ma per le posizioni aperte, non vale la pena fare
 
Vinin:

Non è difficile da implementare. E c'è una soluzione. Troppo pigro per leggere oltre

Non sarete in grado di eseguire le operazioni con gli ordini e assicurarvi che l'ambiente non ne risenta.

È già stato detto diGetLastError(), non sarete in grado di ripristinare il codice che dovrebbe essere restituitodalla funzione GetLastError().

 
PapaYozh:

Non sarete in grado di eseguire operazioni con ordini ed essere sicuri che l'ambiente non sarà influenzato.

È già stato detto di GetLastError(), non sarete in grado di recuperare il codice che la funzione GetLastError() avrebbe dovuto restituire.


Puoi farlo se vuoi, avrà solo la sua propria funzione (intendoGetLastError())
 

Questa può sembrare una soluzione - OrderSelect() - MySelect() wrapper da usare nelle funzioni che cercano gli ordini per indice

int last_select=0; // mettilo da qualche parte prima di init e start

// ...... codice del programma

bool MySelect(int i,int mode=MODE_TRADES){ // selezione dell'ordine - restituisce True se l'ordine è selezionato e appartiene all'EA, False altrimenti
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
return(true);
else
return(false);
}
return(false);
}

bool TickSelect(int tick){ // Ordina la selezione direttamente per tick
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick;
else
return(false);
return(true);
}

void SomeFunc(){ // Un template di funzione che può interrompere la selezione dell'ordine e, di conseguenza, interrompere la logica del programma, se la selezione dell'ordine corrente non è conservata
int tick=last_select;

// ... eseguire le azioni richieste

if(tick>0)
TickSelect(tick);
}

 
Ant_TL:

Non può, a meno che non cambiate voi stessi questo stato nel programma.

Si presume che lo stato dell'ordine sia cambiato da MODE_TRADES a MODE_HISTORY. E il tuo Expert Advisor non ha fatto nulla con l'ordine. È lo stesso ordine o è diverso?

 
Mislaid:

Si è supposto che lo stato dell'ordine sia cambiato da MODE_TRADES a MODE_HISTORY. E il tuo EA non ha fatto nulla con l'ordine. È lo stesso ordine o è diverso?

È lo stesso ordine

 
Non vedo il problema. E c'è molto clamore... È necessario selezionare un ordine in una funzione principale A(), e in un'altra funzione B(), chiamata dalla funzione principale A(), elaborare l'ordine selezionato nella funzione A(). E dovremmo sapere con certezza nella funzione B() se l'ordine è ancora selezionato o no... Quindi passate alla funzione B() il biglietto dell'ordine selezionato nella funzione A(). Nella funzione B(), potete controllare da quale lista l'ordine è selezionato e poi decidere dove andare e cosa restituire alla funzione A()...
 
Ant_TL:

Questa può sembrare una soluzione - OrderSelect() - MySelect() wrapper da usare nelle funzioni che cercano gli ordini per indice

int last_select=0; // mettilo da qualche parte prima di init e start

// ...... codice del programma

bool MySelect(int i,int mode=MODE_TRADES){ // Selezione dell'ordine di cui abbiamo bisogno - ritorna True se l'ordine è stato selezionato e appartiene all'Expert Advisor; altrimenti, False
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
return(true);
else
return(false);
}
return(false);
}

bool TickSelect(int tick){ // Ordina la selezione direttamente per tick
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick;
else
return(false);
return(true);
}

void SomeFunc(){ // Un modello di funzione che può interrompere la selezione dell'ordine e quindi interrompere la logica del programma, se la selezione dell'ordine corrente non è curata
int tick=last_select;

// ... eseguire l'azione richiesta

se(tick>0)
TickSelect(tick);
}

Immaginiamo cosa succederà alla variabile last_select dopo il riavvio del terminale (i cattivi hanno spento la luce)
Motivazione: