Funzione per controllare Ordini Aperti

Sezione dedicata a metatrader (ed altre piattaforme) ed al suo linguaggio di programmazione per il trading automatico
Rispondi
Avatar utente
Planning
Messaggi: 65
Iscritto il: 25/07/2014, 20:19

Funzione per controllare Ordini Aperti

Messaggio da Planning »

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
Avatar utente
carlo10
Messaggi: 4261
Iscritto il: 08/05/2014, 21:17

Re: Funzione per controllare Ordini Aperti

Messaggio da carlo10 »

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?
Avatar utente
Planning
Messaggi: 65
Iscritto il: 25/07/2014, 20:19

Re: Funzione per controllare Ordini Aperti

Messaggio da Planning »

E' un EA trovato in rete, chi l'ha scritto ha optato per questa soluzione.
Comunque faccio delle prove come mi hai consigliato

Grazie
Avatar utente
carlo10
Messaggi: 4261
Iscritto il: 08/05/2014, 21:17

Re: Funzione per controllare Ordini Aperti

Messaggio da carlo10 »

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.
Avatar utente
Planning
Messaggi: 65
Iscritto il: 25/07/2014, 20:19

Re: Funzione per controllare Ordini Aperti

Messaggio da Planning »

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.
Avatar utente
carlo10
Messaggi: 4261
Iscritto il: 08/05/2014, 21:17

Re: Funzione per controllare Ordini Aperti

Messaggio da carlo10 »

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!
Avatar utente
Planning
Messaggi: 65
Iscritto il: 25/07/2014, 20:19

Re: Funzione per controllare Ordini Aperti

Messaggio da Planning »

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
Avatar utente
carlo10
Messaggi: 4261
Iscritto il: 08/05/2014, 21:17

Re: Funzione per controllare Ordini Aperti

Messaggio da carlo10 »

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.
Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti