Funzione per controllare Ordini Aperti
Funzione per controllare Ordini Aperti
Ciao a tutti, rivedo MQL dopo qualche tempo
un EA scrive
if(!ExistPositions()) { compra o vendi.........
bool ExistPositions() {
for(int i=0;i<OrdersTotal(); i++) {
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderComment()==Name_Expert) return(True);
else return(false); } }
A me sembra corretto, sta di fatto che apre posizioni una dietro l'altra fino a consumare tutto il margine, se lo apro su un secondo grafico dopo il primo, e non mi è chiaro il perché.
Grazie
un EA scrive
if(!ExistPositions()) { compra o vendi.........
bool ExistPositions() {
for(int i=0;i<OrdersTotal(); i++) {
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderComment()==Name_Expert) return(True);
else return(false); } }
A me sembra corretto, sta di fatto che apre posizioni una dietro l'altra fino a consumare tutto il margine, se lo apro su un secondo grafico dopo il primo, e non mi è chiaro il perché.
Grazie
Re: Funzione per controllare Ordini Aperti
Ciao,
a vederla così sembra corretta ma il tutto si basa sul fatto che OrderComment e NameExpert devono essere effettivamente identici quindi come prima cosa farei delle stampe di queste due per verificarlo.
Solitamente si utilizza il Magic Number per fare questo tipo di controlli, come mai hai optato per il commento?
a vederla così sembra corretta ma il tutto si basa sul fatto che OrderComment e NameExpert devono essere effettivamente identici quindi come prima cosa farei delle stampe di queste due per verificarlo.
Solitamente si utilizza il Magic Number per fare questo tipo di controlli, come mai hai optato per il commento?
Re: Funzione per controllare Ordini Aperti
E' un EA trovato in rete, chi l'ha scritto ha optato per questa soluzione.
Comunque faccio delle prove come mi hai consigliato
Grazie
Comunque faccio delle prove come mi hai consigliato
Grazie
Re: Funzione per controllare Ordini Aperti
Chiaramente l'altra condizione per cui non apre altre posizioni è che le operazioni devono essere aperte sullo stesso cross su cui hai attaccato l'EA.
Facci sapere.
Facci sapere.
Re: Funzione per controllare Ordini Aperti
Premesso che l'EA è stato trovato in rete e non so cosa volesse fare precisamente chi l'ha fatto:
l' if strutturato come sopra ti fa prendere subito una decisione, togliendo l'ELSE la decisione viene presa o alla fine del FOR o se una condizione si avvera.
Quindi quando attacavo l'EA su un secondo grafico, trovando un false subito (il primo ordine aperto è del primo grafico) da sempre ok a aprire.
l' if strutturato come sopra ti fa prendere subito una decisione, togliendo l'ELSE la decisione viene presa o alla fine del FOR o se una condizione si avvera.
Quindi quando attacavo l'EA su un secondo grafico, trovando un false subito (il primo ordine aperto è del primo grafico) da sempre ok a aprire.
Re: Funzione per controllare Ordini Aperti
Non mi è chiarissimo nel senso che la funzione ExistPositions() a livello di logica mi sembra strutturata correttamente quindi mi aspetterei che aprisse una sola posizione e poi rimanesse in attesa che si chiudano per aprire la seconda posizione.
In ogni caso l'importante è che tu abbia capito!
In ogni caso l'importante è che tu abbia capito!
Re: Funzione per controllare Ordini Aperti
Premesso che non sono un esperto, quando ho debuggato ho constatato che la variabile i rimaneva sempre a zero (ci stavano altri ordini aperti).
Quindi subito si aveva il ritorno alla funzione chiamante che poteva aprire un nuovo ordine.
Da non programmatore (o meglio da programmatore della domenica), avevo modificato
bool ExistPositions() {
{int v_i = 0;}
for(int i=0;i<OrdersTotal(); i++) {
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderComment()==Name_Expert)
{v_i = 1;}
} return(v_i); }
E sembra che funzioni anche così.
Poi pensandoci ho capito che bastava togliere l'else, che fa la stessa cosa.
Spero di essere stato più chiaro
Quindi subito si aveva il ritorno alla funzione chiamante che poteva aprire un nuovo ordine.
Da non programmatore (o meglio da programmatore della domenica), avevo modificato
bool ExistPositions() {
{int v_i = 0;}
for(int i=0;i<OrdersTotal(); i++) {
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderComment()==Name_Expert)
{v_i = 1;}
} return(v_i); }
E sembra che funzioni anche così.
Poi pensandoci ho capito che bastava togliere l'else, che fa la stessa cosa.
Spero di essere stato più chiaro
Re: Funzione per controllare Ordini Aperti
Ti confesso che mi piaceva di più la funzione originale (che dovrebbe fare il suo lavoro, non mi spiego il fatto che non si comporti correttamente).
In ogni caso l'importante è che tu abbia trovato un modo per proseguire con i test.
In ogni caso l'importante è che tu abbia trovato un modo per proseguire con i test.
Chi c’è in linea
Visitano il forum: Nessuno e 0 ospiti