Come codificare? - pagina 300

 

Prevenire l'overtrading

Ciao a tutti,

Ho testato il mio EA utilizzando il metodo all ticks su un grafico H4 usando un MACD cross per avviare gli ordini (tra gli altri) e il tester della strategia apre circa 200 posizioni nei primi minuti, quindi dopo aver fatto qualche lettura mi rendo conto che ho bisogno di limitare il numero di trade che piazza, sul mio sistema non dovrebbe piazzare più di 1 trade ogni 4 ore perché aspetto che la candela si chiuda prima usando iMACD(... PRICE_CLOSE...) e lo sfasamento per 0 per MACDMainCurrent & MACDSymbolCurrent e 1 per MACDMainPrevious & MACDSymbolPrevious.

Le mie variabili globali sono

string hasOrderedGV = "has_ordered_GV";

stringa barsGV = "bars_GV";

E ho inserito questo codice prima che il mio EA controlli le posizioni lunghe o corte:

//--- Determinare se l'ordine è già stato piazzato sul blocco orario H4

se ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Controlla la possibilità di posizione lunga (BUY)

se (GlobalVariableGet (hasOrderedGV, false))

{

se ... (qui è dove controllo effettivamente l'incrocio MACD tra altri indicatori).

Poi se l'ordine si è aperto con successo:

se (Ticket > 0)

{

GlobalVariableSet(hasOrderedGV,true);

{

se (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green);

etc etc.

Qualcuno può dirmi se sto procedendo nel modo giusto? Non so se c'è un modo più efficiente o accurato di farlo? Grazie.

 

...

Perché non conti semplicemente quanti ordini il tuo EA ha già aperto e se ha già aperto un ordine, non apri un nuovo ordine?

Solo un'idea (e un modo usuale e più semplice per limitare il numero di ordini aperti da un EA)

crsnape@btinternet.com:
Ciao a tutti,

Ho testato il mio EA con il metodo all ticks su un grafico H4 usando un MACD cross per iniziare gli ordini (tra gli altri) e il tester della strategia apre circa 200 posizioni nei primi minuti, quindi dopo aver fatto qualche lettura mi rendo conto che ho bisogno di limitare il numero di trade che piazza, sul mio sistema non dovrebbe piazzare più di 1 trade ogni 4 ore perché aspetto che la candela si chiuda prima usando iMACD(... PRICE_CLOSE...) e lo sfasamento per 0 per MACDMainCurrent & MACDSymbolCurrent e 1 per MACDMainPrevious & MACDSymbolPrevious.

Le mie variabili globali sono

string hasOrderedGV = "has_ordered_GV";

stringa barsGV = "bars_GV";

E ho inserito questo codice prima che il mio EA controlli le posizioni lunghe o corte:

//--- Determinare se l'ordine è già stato piazzato sul blocco orario H4

se ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Controlla la possibilità di posizione lunga (BUY)

se (GlobalVariableGet (hasOrderedGV, false))

{

se ... (qui è dove controllo effettivamente l'incrocio MACD tra altri indicatori).

Poi se l'ordine si è aperto con successo:

se (Ticket > 0)

{

GlobalVariableSet(hasOrderedGV,true);

{

se (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green);

etc etc.

Qualcuno può dirmi se lo sto facendo nel modo giusto? Non so se c'è un modo più efficiente o accurato di farlo? Grazie.
 

Solo perché il mio EA ha tipicamente diverse posizioni aperte in una sola volta; quindi non potrei usare, ad esempio,

se (ordini contati > 5)

Interruzione;

O qualcosa del genere, perché non so quante posizioni saranno aperte in qualsiasi momento. Ho bisogno di metterlo in relazione al tempo che sto pensando.

 

Ho allegato questo EA al mio conto mt4 a 5 cifre. Ma non apre nessun trade....

pls aiutarmi

File:
dipu_2.mq4  5 kb
 

Per favore, ho bisogno di modificare questo EA per spostare lo stoploss in 3 passi

questo EA ha già una capacità di pareggio, ma voglio che questo EA sposti il mio

stoploss dal suo primo punto di pareggio ad un altro +20 pips una volta che il mio profitto arriva a

+27pips e spostarlo di nuovo a +40pips quando arriva a +50pips e anche

più se possibile.

File:
 

Ciao Mladen,

Grazie per la segnalazione! Sono già riuscito a risolvere il problema.

A proposito, sai che funzione hanno MODE e SHIFT in iStochasticdo o c'è qualche posto che fornisce maggiori informazioni? Sto leggendo la documentazione sul sito di mql4, ma ancora non ha senso per me. La spiegazione che forniscono è troppo breve.

Per esempio

iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 0);

iStochastic(NULL, 0, 5, 3, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Current + 1);

Cosa fa la corrente + 0 ecc?

Grazie e saluti

Terrance

mladen:
Terrance Questa è una funzione. Inseriscila alla fine del tuo EA e posiziona le chiamate ad essa dove ritieni opportuno per controllare se un ordine è già aperto ad una barra corrente
 

Ciao, qualcuno potrebbe dirmi dove sto sbagliando qui, per favore? Sto ottenendo il codice di errore ')' il conteggio dei parametri sbagliati sulla linea evidenziata in rosso - ma tutti i parametri si sommano...

se ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Controlla la possibilità di posizione lunga (BUY)

se (GlobalVariableGet (hasOrderedGV, false)) Grazie

 

...

Terrance

MODE_MAIN significa che stai leggendo il valore della linea stocastica. MODE_SIGNAL significa che stai leggendo il valore della linea del segnale stocastico.

Per quanto riguarda SHIFT: è lo stesso per ogni indicatore (anche quelli personalizzati). Per esempio: SHIFT=0 significa il valore della barra corrente, SHIFT=1 significa il valore della prima barra chiusa e così via...

tkuan77:
Ciao Mladen,

Grazie per avermi avvisato! Sono già riuscito a risolvere il problema.

A proposito, sai che funzione hanno MODE e SHIFT in iStochasticdo o c'è qualche posto che fornisce maggiori informazioni? Sto leggendo la documentazione sul sito di mql4, ma ancora non ha senso per me. La spiegazione che forniscono è troppo breve.

Per esempio

iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 0);

iStochastic(NULL, 0, 5, 3, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Current + 1);

Cosa fa la corrente + 0 ecc?

Grazie e saluti

Terrance
 

...

L'errore è che GlobalVariableGet() ha un solo parametro (il nome della variabile). Non avete bisogno del secondo parametro (il"falso" che avete nella chiamata alla funzione)

crsnape@btinternet.com:
Ciao qualcuno sarebbe in grado di dirmi dove sto andando male qui per favore? Sto ottenendo il codice di errore ')' il conteggio dei parametri sbagliati sulla linea evidenziata in rosso - ma tutti i parametri si sommano...

se ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Controlla la possibilità di posizione lunga (BUY)

se (GlobalVariableGet (hasOrderedGV, false)) Grazie
 

Ho cambiato il codice in questo, ed è almeno privo di errori - va bene?

if (GlobalVariableGet (hasOrderedGV) == false)