Buongiorno a tutti, vorei inserire uno stop loos dinamico, mi spiego, la posizione una volta aperta funziona senza stop loos, se dovvesse raggiungere i 20 pip di guadagno lo stop loos si piazza al prezzo di acquisto, sia su posizioni long che short. Come posso scrivere il codice?
Grazie
Eccolo:
IF Not OnMarket THEN
StopLoss = 0
ENDIF
IF LongOnMarket THEN
IF (close - PositionPrice) >= 20 * PipSize THEN
StopLoss = max(StopLoss,PositionPrice)
ENDIF
IF StopLoss > 0 THEN
SELL AT StopLoss STOP
ENDIF
ELSIF ShortOnMarket THEN
IF (PositionPrice - close) >= 20 * PipSize THEN
StopLoss = min(StopLoss,PositionPrice)
ENDIF
IF StopLoss > 0 THEN
SELLSHORT AT StopLoss STOP
ENDIF
ENDIF
Grazie Roberto, sulle posizioni long funziona alla grande mentre non funziona sulle posizioni short
Hai ragione, perché non ho messo il controllo sullo zero iniziale dello StopLoss:
IF Not OnMarket THEN
StopLoss = 0
ENDIF
IF LongOnMarket THEN
IF (close - PositionPrice) >= 20 * PipSize AND (StopLoss = 0) THEN
StopLoss = PositionPrice
ENDIF
IF StopLoss > 0 THEN
SELL AT StopLoss STOP
ENDIF
ELSIF ShortOnMarket THEN
IF (PositionPrice - close) >= 20 * PipSize AND (StopLoss = 0) THEN
StopLoss = PositionPrice
ENDIF
IF StopLoss > 0 THEN
SELLSHORT AT StopLoss STOP
ENDIF
ENDIF
così dovrebbe andare bene (non l’ho priovato).
Ho provato, ma niente la posizione short non si chiude come dovrebbe
IF Not OnMarket THEN
StopLoss = 0
ENDIF
IF LongOnMarket THEN
IF (close - PositionPrice) >= 20 * PipSize AND (StopLoss = 0) THEN
StopLoss = PositionPrice
ENDIF
IF StopLoss > 0 THEN
SELL AT StopLoss STOP
ENDIF
ENDIF
IF ShortOnMarket THEN
IF (PositionPrice - close) >= 20 * PipSize AND (StopLoss = 0) THEN
StopLoss = PositionPrice
ENDIF
IF StopLoss > 0 THEN
EXITSHORT AT StopLoss STOP
ENDIF
ENDIF
Ho fatto delle modifiche cosi sembra che funzioni, mi puoi dare uno squardo se va tutto bene, grazie
Ciao a tutti, non riesco proprio a fare in modo che lo stop venga spostato a breakeven +5 quando il prezzo raggiunge il targhe price 1.
Ci tengo a sottolineare che nel backtest sembra che funzioni ma in reale succede che lo stop viene spostato al momento giusto ma alla barra successiva viene rispostato dov’era all’inizio.
allego il file che sto utilizzando.
Grazie a chi vorrà aiutarmi.
rem test spostamento stop loss a breakeven al raggingimento di TP1
DEFPARAM CumulateOrders = false // Posizioni cumulate
rem ********* INPUT ********
direzione=-1 //-1=SHORT +1=LONG
entry=6100 //prezzo entrata
TP1=6050 //prezzo targhet price 1
TP2=5900 //prezzo targhet price 2
SL=6180 //prezzo stop loss
tp1p=ABS(entry-TP1) //pip TP1
tp2p=ABS(entry-TP2) //pip TP"
slp =ABS(entry-SL) //pip SL
rem impostazione orario fine programma
if time >200000 and not onmarket then rem esco se non sono a mercato dopo le 20.00
quit
elsif counter=1 and not onmarket then rem esco se posizione è stata chiusa
quit
endif
rem ingresso
if onmarket and counter=0 then rem contatore voglio che venga aperta una sola operazione
counter=1
endif
rem -------- ingresso + targhet + stop loss
if direzione=1 and counter=0 then
buy 1 contract at entry limit
set stop ploss slp
set target pprofit tp2p
endif
if direzione=-1 and counter=0 then
sellshort 1 contract at entry limit
set stop ploss slp
set target pprofit tp2p
endif
rem ------- uscita a breakeven +5
if longonmarket and high>TP1 then
sell at (entry)+(5*pointsize) stop
endif
if shortonmarket and low<TP1 then
exitshort at (entry)-(5*pointsize) stop
endif
//graph counter
//graph tp1p
//graph tp2p
//graph slp
Perché gli ordini pendenti (Limit o Stop che siano) durano solo una barra e vanno piazzati nuovamente barra dopo barra, se ervono ancora.
Nel tuo caso tu non memorizzi lo SL in una variabile, ma piazzi l’ordine pendente SOLO se il prezzo < TP1 (tra l’altro non usi TP1P).
Inoltre la riga 38 calcola un presunto SL (che in realtà non è) in modo errato, infatti LOW < TP1 è già vero dalla prima candela, perché il prezzo d’entrata è sicuramente inferiore al LOW.
Devi rivedere un pò la logica di quel codice.