Risposta

Dire all'EA di interrompere il trading per quel giorno se viene raggiunto un profitto o una perdita in pip?

14 risposte

birdy70

Abbonato, bbp_partecipante, comunità, 25 risposte.

Visita il profilo

11 anni fa #112314

Ciao Mark,

 

In quale blocco di strategia potrei inserire la regola per interrompere il trading per quel giorno, se il profitto o la perdita giornaliera sono raggiunti +/- 100 Pips per esempio?

 

Grazie per il vostro feedback,

Birdy70

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

11 anni fa #125178

Salve,

 

EA Wizard non dispone di una funzione che restituisce il PL per il giorno corrente, ma è possibile aggiungerla.

 

1. Aprite {EA Wizard}/code/CustomFunctions.mq4 e aggiungete il seguente codice:

 
double sqGetPLInPipsToday() {
   stringa todayTime = TimeToStr( TimeCurrent(), TIME_DATE);
   double plToday = 0;
 
   for(int i=0;i<OrdersHistoryTotal();i++) {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
            // salta gli ordini in sospeso
            continuare;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
            if(OrderType() == OP_BUY) {
               plToday += sqGetBid(OrderSymbol()) - OrderOpenPrice();
            } else {
               plToday += OrderOpenPrice() - sqGetAsk(OrderSymbol());
            }         
         }
      }
   }
 
   per (int cc = OrdersTotal() - 1; cc >= 0; cc-) {
      se (OrderSelect(cc, SELECT_BY_POS) && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
            // salta gli ordini in sospeso
            continuare;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
            if(OrderType() == OP_BUY) {
               plToday += sqGetBid(OrderSymbol()) - OrderOpenPrice();
            } else {
               plToday += OrderOpenPrice() - sqGetAsk(OrderSymbol());
            }         
         }
      }
   }
   
   restituire(plToday*gPointPow);
}
 
 
2. Poi nella regola si può chiamare questa nuova funzione, la regola potrebbe essere :
SE(le altre regole)
e (Funzione personalizzata: sqGetPLInPipsToday() < 100) <- questo significa che il PL di oggi è inferiore a 100 pip.
 
ALLORA

Marchio
Architetto StrategyQuant

0

birdy70

Abbonato, bbp_partecipante, comunità, 25 risposte.

Visita il profilo

11 anni fa #125205

Ciao Mark,

 

dove devo digitare questo codice? Se apro sul mio PC la cartella C:StrategyQuant/SQEAWizard/Code, trovo un file chiamato CustomFunctions.mql4. Se apro questo file, l'editor di MT4 si apre con la finestra CustomFunctions. Quando copio il vostro codice in quella finestra, ottengo 6 messaggi di errore dopo la compilazione del codice!

 

Per favore, aiutatemi.

 

Birdy70

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

11 anni fa #125244

Salve,

 

è necessario copiare questa funzione in questo file, ma non compilarlo, non è un EA completo.

Il contenuto di questo file viene aggiunto a ogni EA generato da EA Wizard, quindi è un luogo in cui è possibile inserire funzioni personalizzate.

 

Quindi basta aprire EA Wizard, caricare la strategia, aggiungere la funzione personalizzata ed esportare in EA. Poi dovrebbe essere compilato senza problemi.

Marchio
Architetto StrategyQuant

0

birdy70

Abbonato, bbp_partecipante, comunità, 25 risposte.

Visita il profilo

10 anni fa #126130

Ciao Marc,

 

Mi dispiace, ma non capisco! Nella mia cartella EAW ho trovato il file CustomFunctions.mql4. Ho potuto aprire questo file con l'Editor MT4 (in MT4) e ho potuto incollare le condizioni di trading che mi hai indicato all'inizio. Se apro i dettagli della mia strategia EAW, vedo nella finestra di dialogo sotto "Funzioni" il file "Funzione personalizzata"! Ma come si fa a digitare la regola di trading in questa finestra? 

 

Forse potresti dirmi passo per passo, come potrei usare questa regola in EAW o dirmi un'altra regola di trading, che dice all'EA "smetti di fare trading per quel giorno, dopo aver raggiunto un profitto o una perdita di 100 Pips o 100 Euro"!

 

Sarebbe davvero fantastico.

 

Sotto il pulsante "Opzioni di strategia" vedo alcune regole come:

Somma dei P/L chiusi (numero magico/conteggio ordini)

Profitti totali 

Perdite totali

P/L chiuso in pip (numero magico e operazioni effettuate)

P/L chiuso in denaro (numero magico e operazioni effettuate)

 

Non è possibile creare con queste opzioni una regola come:

 

SE

La somma degli ordini BUY/SELL chiusi è > 100 Pips o 100 Euro (per esempio)

 

Allora

Interruzione del trading per quel giorno

 

Grazie per il vostro aiuto! Spero che sia possibile creare una regola di trading come questa.

 

Cordiali saluti

Birdy70

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

10 anni fa #126137

Salve,

 

Quando si copia questa funzione nel file CustomFunctions.mq4, essa verrà allegata a ogni nuovo EA, in modo da poterla utilizzare nelle proprie condizioni.

 

Come fare: aprire normalmente la strategia in EA Wizard. Fate clic su Aggiungi nuova regola di trading, quindi andate su Funzioni -> Funzione personalizzata e nel campo Funzione scrivete: sqGetPLInPipsToday()

Aggiungere < 100 confronti e fare clic su OK per chiudere la finestra di dialogo.

 

Questo è tutto, ora salvate questa strategia come EA e dovrebbe funzionare.

Marchio
Architetto StrategyQuant

0

jastejp

Abbonato, bbp_partecipante, comunità, 8 risposte.

Visita il profilo

10 anni fa #129459

Ciao Marc,

 

Ho acquistato EA Wizard di recente, dopo averlo confrontato con altri costruttori di EA, e ne sono molto soddisfatto perché include molte funzioni precostituite da utilizzare - penso che questo lo distingua dai vostri concorrenti, quindi vi prego di continuare a lavorare bene.

 

Purtroppo non riesco a far funzionare la funzione personalizzata sqGetPLInPipsToday() dopo averci lavorato tutto il giorno. Il problema è che il trading continua anche dopo aver raggiunto il mio obiettivo di profitto giornaliero e non so perché dopo aver seguito attentamente le vostre istruzioni. Se si guarda il grafico allegato si può vedere chiaramente che il primo trade colpisce il target giornaliero di 20 pips, ma l'EA continua a fare trading per quel giorno. Potreste gentilmente dare un'occhiata ai file allegati per determinare il problema per favore.

 

Grazie mille.

Saluti,

 

Jamie

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

10 anni fa #129552

ok, ho trovato il problema, c'era un errore nella mia funzione, qui sotto c'è quella corretta.

 

 

double sqGetPLInPipsToday() {
   stringa todayTime = TimeToStr( TimeCurrent(), TIME_DATE);
   double plToday = 0;
 
   for(int i=0;i<OrdersHistoryTotal();i++) {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
            // salta gli ordini in sospeso
            continuare;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
         Log("Confronto ", TimeToStr( OrderOpenTime(), TIME_DATE), " = ", todayTime);
            if(OrderType() == OP_BUY) {
               plToday += OrderClosePrice() - OrderOpenPrice();
            } else {
               plToday += OrderOpenPrice() - OrderOpenPrice();
            }
         }
      }
   }
 
   per (int cc = OrdersTotal() - 1; cc >= 0; cc-) {
      se (OrderSelect(cc, SELECT_BY_POS) && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
            // salta gli ordini in sospeso
            continuare;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
            if(OrderType() == OP_BUY) {
               plToday += sqGetBid(OrderSymbol()) - OrderOpenPrice();
            } else {
               plToday += OrderOpenPrice() - sqGetAsk(OrderSymbol());
            }
         }
      }
   }
 
   restituire(plToday*gPointPow);
}

Marchio
Architetto StrategyQuant

0

jastejp

Abbonato, bbp_partecipante, comunità, 8 risposte.

Visita il profilo

10 anni fa #129560

Ciao Mark,

 

Grazie mille.

Proverò il nuovo codice e vi farò sapere i risultati. Spero che alcuni test dimostrino che il problema è il trading eccessivo e che lo script lo risolva.

 

Jamie

0

jastejp

Abbonato, bbp_partecipante, comunità, 8 risposte.

Visita il profilo

10 anni fa #129888

Ciao Mark,

 

Mi dispiace per il ritardo con cui sono tornato qui. 

 

Funziona e fa esattamente quello che voglio. Ottimo lavoro!

 

Posso suggerirvi di inserire codici utili come questo e altri in una discussione adesiva del forum, in modo da poterli trovare facilmente.

 

Grazie,

Jamie

0

Tetto Brignac

Abbonato, bbp_partecipante, comunità, cliente, 91 risposte.

Visita il profilo

10 anni fa #130754

Ho provato la tua stringa di cui sopra e ho fatto proprio come hai spiegato, ma continua a fare trading dopo il numero di pips raggiunto. Cosa sto sbagliando nella creazione di questa semplice ea?

0

Tetto Brignac

Abbonato, bbp_partecipante, comunità, cliente, 91 risposte.

Visita il profilo

10 anni fa #130768

Ragazzi,

  Ho letteralmente lavorato tutta la notte, come potete vedere dai miei pochi post, ma non riesco a ottenere questo risultato. Qualcuno può spiegarmi in dettaglio cosa sto sbagliando?

 

Tutto ciò che sto cercando è una semplice strategia da cui imparare. Diciamo di andare long quando EMA 10> EMA 20 E SHORT QUANDO EMA10 < EMA 20.. Tutto quello che voglio fare è fermare il profitto a $10 e iniziare la prossima giornata di trading.... Sono esausto di lavorare tutta la notte e apprezzerei se questo può essere fatto al più presto....

0

boraucak

Abbonato, bbp_partecipante, comunità, 14 risposte.

Visita il profilo

9 anni fa #135674

ciao, 

Prima di tutto, grazie per il grande supporto di EA Wizard,

 

questa funzione è fantastica e ne avevo disperatamente bisogno. 

Ma per questo codice è necessaria una piccola correzione. 

 

        if(OrderType() == OP_BUY) {
               plToday += OrderClosePrice() - OrderOpenPrice();
            } else {
               plToday += OrderOpenPrice() - OrderOpenPrice();
 
questo codice deve essere:
 
        if(OrderType() == OP_BUY) {
               plToday += OrderClosePrice() - OrderOpenPrice();
            } else {
               plToday += OrderOpenPrice() - OrderClosePrice();
 
Per favore, correggetemi se sbaglio, dato che non sono un coder e l'ho trovato provando (per un paio d'ore) :/
 
Grazie ancora per il sostegno. 
migliore 

0

tomas262

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

9 anni fa #135684

Sì, è corretto. Questo Prezzo di apertura dell'ordine() deve essere sostituito da Prezzo di chiusura dell'ordine()

0

Jack Archer

Cliente, bbp_partecipante, comunità, sq-ultimate, 6 risposte.

Visita il profilo

8 mesi fa #287831

Salve, esiste un modo per impostare un obiettivo di profitto giornaliero o uno stop loss giornaliero nell'StrategyQuant. Non riesco a trovare un'impostazione o un blocco personalizzato che possa fare al caso mio. Grazie!

0

Stai visualizzando 14 risposte - da 1 a 14 (di 14 totali)