drfbParticipant
Average
Scusate,
ho provato a cercare nel forum ma non sono riuscito a trovare nulla, circa la possibilità di spostate, oltre allo stop loss, anche il take profit, nel caso in cui la possibilità me lo permetta.
C’è una riga di comando apposita per farlo?
Per esempio,
if condizione then
newtp = newtp + 5
??????
endif
Grazie
Francesco
Puoi usare SET TARGET PROFIT o PPROFIT, a seconda che tu indichi una differenza espressa in prezzo o in pips rispetto al prezzo d’ingresso.
In alternativa puoi verificare quando il prezzo raggiunge il TP ed uscire a mercato.
sell at close limit // tp buy
exitshort at close limit // tp sell
sell at close stop // stop buy
exitshort at close stop // stop SELL
Buongiorno,
Sostituisci close con un altro valore
Buonasera
Mi riallaccio a questo topic visto che si parla più o meno della stessa cosa….
Il mio quesito è questo.
E’ possibile inserire una stringa che mi “sposti” lo stop loss ad una determinata soglia (entrata + 100 nel mio caso) se il guadagno supera un certo importo?
Ad esempio una cosa del genere (metto un riassunto del codice…)
newsllong = (close – TRADEPRICE) > 400
IF newsllong THEN
SELL AT (TRADEPRICE + 100) STOP
ENDIF
SET STOP PLOSS 720
>> Per chiarezza dei messaggi sul Forum di Prorealcode, separare le parti del vostro codice usando il pulsante “Insert PRT code”. <<
Grazie 🙂
Suggerisco di aggiungere * pipsize sia dopo 400 alla riga 1 che dopo 100 alla riga 4, per rendere il codice trasportabile da uno strumento all’altro.
Il tuo codice va bene, forse è meglio spostare in alto la riga 7, l’ultima, in quanto essendo equivalente ad un’uscita SELL (quando sei Long), potrebbe sovrascriverete l’ordine di uscita della riga 4.
Grazie per la risposta!
Ho modificato ma sembra non funzionare….
Il codice completo è questo…… Dove potrebbe essere errato?
Grazie
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
ONCE TradeLong = 1
ONCE TradeShort = 1
newsllong = (close - TRADEPRICE) > 400*pipsize
newslshort = (TRADEPRICE-CLOSE) >400*pipsize
// Condizioni per entrare su posizioni long
indicator1 = xxx
c1 = (indicator1 >= 100)
IF c1 AND TradeLong = 1 THEN
BUY 1 CONTRACT AT MARKET
TradeLong = 0
TradeShort = 1
ENDIF
// Condizioni per uscire da posizioni long
indicator2 = xxx
c2 = (indicator2 <= -10)
IF c2 THEN
SELL AT MARKET
ENDIF
IF newsllong THEN
SELL AT (TRADEPRICE + 100* pipsize) STOP
ENDIF
// Condizioni per entrare su posizioni short
indicator3 = xxx
c3 = (indicator3 <= -90)
IF c3 AND TradeShort = 1 THEN
SELLSHORT 1 CONTRACT AT MARKET
TradeLong = 1
TradeShort = 0
ENDIF
IF newslshort THEN
EXITSHORT AT (TRADEPRICE - 100* pipsize) STOP
ENDIF
// Condizioni per uscire da posizioni short
indicator4 = xxx
c4 = (indicator4 >= -6)
IF c4 THEN
EXITSHORT AT MARKET
ENDIF
//SET STOP pTRAILING 660
//SET STOP PLOSS 720
SET TARGET PPROFIT 950
Intanto l’ultima riga la sposterei alla 5 o alla 8.
Il problema principale è che gli ordini prendenti durano una sola barra e vanno reimmessi, se necessario, ad ogni nuova barra.
Nel tuo caso se in una barra lo stop alle righe 6 e 7 viene settato, se nella barra successiva scende a 399, viene disattivato, vanificando quanto fatto la barra precedente, per cui devi eseguire la riga 6 solo se newsllong=0 e la riga 7 solo se newslshort=0.
Ovviamente dovrai azzerare entrambe queste variabili quando non sei a mercato e devi farlo prima della riga 6.
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
ONCE TradeLong = 1
ONCE TradeShort = 1
SET TARGET PPROFIT 950
ONCE newsllong = 0
ONCE newslshort = 0
IF newsllong = 0 then
newsllong = (close - TRADEPRICE) > 400*pipsize
endif
IF newslshort = 0 then
newslshort = (TRADEPRICE-CLOSE) >400*pipsize
endif
// Condizioni per entrare su posizioni long
indicator1 = xxx
c1 = (indicator1 >= 100)
IF c1 AND TradeLong = 1 THEN
BUY 1 CONTRACT AT MARKET
TradeLong = 0
TradeShort = 1
ENDIF
// Condizioni per uscire da posizioni long
indicator2 = xxx
c2 = (indicator2 <= -10)
IF c2 THEN
SELL AT MARKET
ENDIF
IF newsllong THEN
SELL AT (TRADEPRICE + 100* pipsize) STOP
ENDIF
// Condizioni per entrare su posizioni short
indicator3 = xxx
c3 = (indicator3 <= -90)
IF c3 AND TradeShort = 1 THEN
SELLSHORT 1 CONTRACT AT MARKET
TradeLong = 1
TradeShort = 0
ENDIF
IF newslshort THEN
EXITSHORT AT (TRADEPRICE - 100* pipsize) STOP
ENDIF
// Condizioni per uscire da posizioni short
indicator4 = xxx
c4 = (indicator4 >= -6)
IF c4 THEN
EXITSHORT AT MARKET
ENDIF
//SET STOP pTRAILING 660
//SET STOP PLOSS 720
Innanzitutto grazie per il tuo aiuto….
Ma quindi una cosa del genere? Perchè se è così c’è qualcosa che non va visto che il backtesting è orrendo….
p.s.
scusa ma finchè si tratta di costruire indicatori me la cavo ma azzerare variabili sono in difficoltà….
Sostituisci la riga 11 con:
IF newsllong = 0 AND LongOnMarket then
e la riga 15 con:
IF newslshort = 0 AND ShortOnMarket then
Così va bene…. se il backtest è orrendo…. non preocuparti, ne scriverai decine o centinaia di strategie che dopo poco metterai nel cestino!
Non so cosa dirti perché non l’ho provata.
Non funziona…… Non fa mai quello che deve…. Non sposta mai lo stop…… boh
Deve spostare lo SL solo una volta, al superamento di 400 pips di guadagno lo sposta a pareggio + 100 pips. Poi resta li fermo.
Non sposta mai lo STOP a BE + 100……. nel backtest in modalità normale (senza BE+100) ho risultati soddiasfacenti….. mettendo l’istruzione BE+100 tutte le operazioni sono negative….. e mi pare impossibile…
Ma va qualche volta sopra i 400 pips?
Su quale strumento e TF lo usi?