(MT4) Chiusura parziale in un EA

 

Publi

(MT4) Chiusura parziale in un EA

 

Publi

Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 10 di 12

Discussione: (MT4) Chiusura parziale in un EA

  1. #1
    Ciao a tutti,

    Ho cercato di imparare da solo mql4 e a tal fine ho realizzato un interno personalizzato.

    Ora sto cercando di trasformarlo in un EA, ma ho difficoltà con la sintassi.

    Attualmente ho:

    Codice inserito if(OrdersTotal() == 0) { if(Ask==HighLineValue ccigt;=90) { OrderSend(Symbol(), OP_BUY, lotti, Ask, slippage, LowLineValue, HalfHigh, 0); } if(Bid==LowLineValue ccilt;=-90) { OrderSend(Symbol(), OP_SELL, lotti, Bid, slippage, HighLineValue, HalfLow, 0); } } Quello che vorrei fare è chiudere il 70% dei lotti e spostare lo SL al pareggio quando viene soddisfatta un'altra serie di criteri, quindi chiudere l'ultimo 30% con una serie finale di criteri.

    Ho le variabili ”lots70” e ”lots30” che calcolano già il numero appropriato di lotti, ma non so come ottenere in modo affidabile questa chiusura parziale. Sto immaginando di dover creare una sorta di bandiera per indicare che un'operazione è in corso in una direzione particolare e quindi creare un'altra dichiarazione ”se” per la chiusura parziale. Tuttavia, non sono davvero sicuro della sintassi per questo.

    L'altro problema che ho è che le variabili cambiano col passare del tempo ma vorrei utilizzare i valori delle variabili al momento dell'ordine. I buffer sono l’unico modo per raggiungere questo obiettivo?

    Molte grazie in anticipo per qualsiasi aiuto che possa essere offerto.

    (mi scuso per quanto sia rudimentale, ma sto ancora imparando!)

  2. #2
    1 Allegato(i) Allego l'UPDATE STOPS EA, il modo in cui puoi impostare i tuoi livelli è molto carino ma funziona su ogni coppia individualmente, sto cercando un EA che chiuderà una percentuale del carrello completo, coppie che sono in profitto e le coppie in perdita hanno la stessa percentuale su tutta la linea. Qualsiasi aiuto sarebbe apprezzato. Grazie.
    https://www.forexmad.com/attachments...1593867873.mq4

  3. #3
    Ciao a tutti! Sono un basket trader e sto cercando un EA per chiudere parte del paniere. Esempio: diciamo che sto scambiando un paniere di 10 o 14 coppie e il profitto raggiunge un certo livello superiore a 100 pips, ora voglio chiudere parte del paniere, diciamo metà del paniere, ma metà del paniere su tutte le coppie, non metà del paniere coppie. Dopo il resto lo lasciamo salire ad un altro livello preimpostato di pip. Esiste qualcosa del genere? Qualsiasi aiuto sarà molto apprezzato.
    Grazie.

  4. #4
    Citazione Originariamente Scritto da ;
    Ho pubblicato un post incrociato con te: sembra che entrambi abbiamo preso strade diverse per raggiungere lo stesso posto!
    congratulazioni

  5. #5
    Ho pubblicato un post incrociato con te: sembra che entrambi abbiamo preso strade diverse per raggiungere lo stesso posto!

  6. #6
    OK, penso di essere riuscito a convincere l'EA a eseguire una chiusura parziale e ad aggiornare SL e TP nel resto dell'operazione: l'operazione viene aperta con un TP superiore a quello che intendo essere il mio TP iniziale (nel mio caso, ho aprirlo con il mio TP finale). Al momento dell'apertura dell'operazione, la dimensione del lotto viene trasferita a una variabile statica e il 70% e il 30% di tale cifra viene calcolata e trasferita a variabili statiche. Quando il prezzo supera quello che intendo essere il mio TP iniziale (tenendo presente che il TP effettivo depositato presso il broker è più alto), l'EA invia un OrderClose() per il 70% dei lotti e un OrderModify() per modificare la SL per il restante 30%. Se necessario, anche qui è possibile modificare il TP. Sembrava comportarsi bene, ovvero senza messaggi di errore, quando l'ho eseguito su una demo

  7. #7

    Citazione Originariamente Scritto da ;
    Ho trovato un modo per chiudere parzialmente un'operazione in 3 passaggi quando vengono soddisfatte condizioni diverse.
    Alla fine sono riuscito a decifrarlo. Ecco il codice senza errori e funziona perfettamente, almeno per il mio EA: Codice inserito/--- ACQUISTA ORDINECHIUDI PRE-CONDIZIONI double Close1=0; if((Bid-OrderOpenPrice())gt;=1000*Punto OrdineLotti()gt;1.6) Chiudi1=1; if(Chiudi1==1) NuoviLotti=Lotti1; if((Bid-OrderOpenPrice())gt;=2000*Punto OrdineLotti()gt;1.1) Chiudi1=2; if(Chiudi1==2) NuoviLotti=Lotti2; if(trendlt;0 trendprevlt;0) Chiudi1=3; if(Chiudi1==3) NuoviLotti=OrdinaLotti();/--- CONDIZIONI ORDERCLOSE { if(Close1==1 OrderLots()gt;1.6) { OrderClose(OrderTicket(),NewLots,Bid,3,Violet);/chiude la posizione return(0);/esce } if(Close1==2 OrderLots()gt;1.1) { OrderClose(OrderTicket(),NewLots,Bid,3,Violet);/chiude la posizione return(0);/esce } if(trendlt;0 trendprevlt;0) { OrderClose(OrderTicket(),NewLots,Bid,3,Violet);/chiude la posizione return(0);/Uscita } }

  8. #8
    Grazie mille per le risposte!
    Citazione Originariamente Scritto da ;
    1. Non fare mai un confronto di uguaglianza tra il prezzo e un'altra variabile come hai fatto tu (Ask==HighLineValue). Funzionerà, nella maggior parte dei casi, ma che dire della situazione in cui i numeri hanno cifre non arrotondate nell'ennesima cifra decimale? Ciò accade con la maggior parte delle variabili predichiarate MT4 come High, Low, Bid, Ask. Meglio fare Askgt;=HighLineValue.
    Ottimo punto che non avevo considerato prima. Ho aggiunto un intervallo per il trigger.
    Citazione Originariamente Scritto da ;
    2. Per quanto riguarda il mantenimento del valore di una variabile da un tick a quello successivo, utilizza variabili statiche. Sono dichiarati al di fuori dell'ambito di tutte le funzioni come gli extern.
    Modifica: ho seguito questo consiglio e ho dichiarato le variabili prima di start(), quindi da quanto ho capito dovrebbero mantenere i loro valori tra i segni di spunta.
    Citazione Originariamente Scritto da ;
    3. Non hai indicato se la condizione di ingresso viene controllata ogni tick o ogni barra. Consiglio vivamente di eseguire questo tipo di controlli solo all'apertura di ogni barra. Ecco il codice che utilizzo. Ricordarsi di dichiarare barStart come Datetime var statico.
    Questo è probabilmente qualcosa che dovrò rivisitare, credo. Lavoro su M15 che fa sì che ogni barra si apra (o chiuda) troppo tardi per il mio stile di trading. Posso chiederti perché consigli di fare questi controlli sull'apertura di ogni barra anziché su ogni tick?
    Citazione Originariamente Scritto da ;
    La chiusura dell'ordine è semplice. Usa una dimensione del lotto = 0,7 o qualsiasi altra cosa. Ovviamente è necessario scrivere una logica per garantire che il valore sia un multiplo valido della dimensione del lotto più piccola, ma dai tuoi commenti sembra che sia stato fatto. Una volta chiuso il vecchio ordine, MT4 apre un nuovo ordine per l'importo rimanente dell'operazione, diciamo 0,3. Il problema è che il nuovo ordine ha un ID biglietto diverso. Se hai gestito l'operazione tramite un ID ticket, devi acquisire il nuovo ID ticket. Credo dal tuo codice che devi tenere traccia solo di uno aperto ...
    Mi piace questa idea e penso che questo sia ciò che proverò inizialmente. Sto solo cercando di capire come posso ottenerlo. -Modifica: ripensandoci, se lo faccio in questo modo rimango punto con 2 spread che preferirei non fare. Ma l’idea è valida se apro due operazioni all’inizio
    Citazione Originariamente Scritto da ;
    Ho trovato un modo per chiudere parzialmente un'operazione in 3 passaggi quando vengono soddisfatte condizioni diverse.
    Interessante: terrò d'occhio le risposte alla tua domanda!

  9. #9
    Ho trovato un modo per chiudere parzialmente un'operazione in 3 passaggi quando vengono soddisfatte condizioni diverse. In questo esempio vengono aperti 2 lotti. Quando viene raggiunto il profitto di 100 pips, viene chiuso il lotto 0,5 (Lots1). Lo stesso quando vengono raggiunti i 200 pips, viene chiuso un altro lotto da 0,5 (Lots2). Infine il restante 1 Lotto, verrà chiuso all'ultima condizione. Codice Inserito/ORDINECHIUDI CONDIZIONI Nuovi Lotti Doppi; if((Bid-OrderOpenPrice())gt;=1000*Punto OrdineLotti()gt;1.6) NuoviLotti=Lotti1; if((Bid-OrderOpenPrice())gt;=2000*Punto OrdineLotti()gt;1.1) NuoviLotti=Lotti2; if(trendlt;0 trendprevlt;0) NuoviLotti=OrdinaLotti(); { NuoviLotti=NormalizzaDoppio(NuoviLotti,Cifre); Print(Lotti=,NuoviLotti); ChiusuraOrdine(BigliettoOrdine(),NuoviLotti,Offert a,3,Viola);/chiude la posizione return(0);/exit } Funziona come previsto, tuttavia, una volta aperto un ordine ricevo il seguente messaggio di errore, anche se nessuna delle condizioni è soddisfatta: Inserted Code MaxTrader V0.xx1 EURUSD,H4: OrderClose error 4051 MaxTrader V0.xx1 EURUSD ,H4: numero di lotti non valido per la funzione OrderClose MaxTrader V0.xx1 EURUSD,H4: NewLots=0 Penso che questo abbia a che fare con il fatto che la funzione OrderClose è pronta a chiudere l'ordine immediatamente, ma al momento non è specificata la dimensione del lotto. Ancora una volta, l'EA chiude i lotti specificati come previsto senza problemi, ma vorrei eliminare l'errore OrderClose. Qualsiasi suggerimento è benvenuto.

  10. #10
    Dal codice che hai pubblicato, hai molta strada da fare. Permettimi di darti alcune indicazioni. 1. Non fare mai un confronto di uguaglianza tra il prezzo e un'altra variabile come hai fatto tu (Ask==HighLineValue). Funzionerà, nella maggior parte dei casi, ma che dire della situazione in cui i numeri hanno cifre non arrotondate nell'ennesima cifra decimale? Ciò accade con la maggior parte delle variabili predichiarate MT4 come High, Low, Bid, Ask. Meglio fare Askgt;=HighLineValue. 2. Per quanto riguarda il mantenimento del valore di una variabile da un tick a quello successivo, utilizza variabili statiche. Sono dichiarati al di fuori dell'ambito di tutte le funzioni come gli extern. 3. Non hai indicato se la condizione di ingresso viene controllata ogni tick o ogni barra. Consiglio vivamente di eseguire questo tipo di controlli solo all'apertura di ogni barra. Ecco il codice che utilizzo. Ricordarsi di dichiarare barStart come Datetime var statico. Codice inserito if (barStart lt; Time#91;0#93/inizio nuova battuta { barStart = Time#91;0#93;;/codice qui } Per ora è sufficiente, proverò a rispondere alla tua domanda sulle chiusure parziali più tardi.

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Il sito di forexmad utilizza cookie
Il sito di forexmad utilizza cookie, alcuni dei quali già installati. Per avere maggiori informazioni sui nostri cookie ti preghiamo di cliccare qui. Ti preghiamo di cliccare sul bottone a destra per accettare i nostri cookie. Se continui a navigare sul sito di forexmad assumeremo che sei d'accordo ad utilizzarli.