Buongiorno, sto cercando di codificare un sistema di scalping che entri ad un prezzo limit pari al massimo della barra precedente se si sono verificate determinate condizioni, vorrei che lo stop sia il minimo della barra che ha determinato la condizione di entrata (in questo caso la precedente) poi vorrei che il sistema aggiorni lo stop con il minimo di ogni barra che segna nuovi massimi. ho provato a codificare qualcosa, ma il sistema non entra al prezzo giusto. Allego il codice ed anche una foto. @Robertogozzi @Nicolas se avete 10 minuti potreste aiutarmi?
DEFPARAM CUMULATEORDERS=FALSE
DEFPARAM PRELOADBARS = 1000
ema15 = exponentialaverage[15]
chanup = average[40](high)
//chandn = average[40](low)
timeon= time > 080000 and time < 220000
once signal=0
bull = ema15>chanup and summation[5](ema15>ema15[1])=5
if bull then
nuoviminimi = 1
signal=1
endif
IF nuoviminimi THEN
IF nuoviminimi = 0 THEN
nuoviminimi = low < low[1]
ENDIF
endif
if signal>0 then
if nuoviminimi then
entrata=high[1]+1*pipsize
sl= high-low
graphonprice entrata
graph sl
Cond = nuoviminimi
if Cond and timeon and Not OnMarket then
buy 1 contract at entrata limit
set stop ploss sl
signal=0
nuoviminimi=0
endif
endif
endif
if onmarket then
newsl=low[1]
if newsl>low[1] then
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
endif
Il problema è che aggiorni la “newsl” variabile con lo stesso valore che la stai confrontando, direttamente alla riga successiva! è per questo che il tuo stop loss non viene mai aggiornato! (righe 40 e 41)
newsl
OH GRAZIE! ed invece come mai il prezzo di entrata non viene rispettato?
Per un ordine di acquisto, il prezzo limite per l’ordine in sospeso deve essere inferiore. Dovresti essere sicuro che è il caso altrimenti l’ordine verrà lanciato direttamente sul mercato. Penso che questo sia il motivo per cui pensi che il prezzo di entrata non rispetti i tuoi calcoli.
ho verificato ce la barra apre sotto il prezzo che io voglio, avevo pensato a questo problema, ma ho verificato più volte che non è questo il caso.
Se si desidera acquistare sopra, è necessario utilizzare gli ordini STOP, se si desidera acquistare sotto utilizzare ordini LIMIT:
[attachment file=86405]
[attachment file=86407]
che ingenuo che sono, scusatemi e grazie.
Scusatemi, una info, se volessi che lo stop sia fisso, e cioè il minimo della barra che ha fatto scattare il segnale di entrata come dovrei codificarlo?
Cambia la riga 26:
sl = (entrata - low) / pipsize
IF NOT ONMARKET THEN
newsl=0
ENDIF
CandleSl=10
numberCandles = (BarIndex - TradeIndex)
if onmarket then
if low>low[1] and numberCandles>=CandleSl then
newsl=low[v1]
GRAPHONPRICE NEWSL
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
endif
Così va bene? ho messo che dopo 10 candele lo sl diventa ogni minimo
Non ho capito cosa sia V1 alla riga 8.
La logica del codice dovrebbe essere:
IF NOT ONMARKET THEN
newsl=0
ENDIF
CandleSl=10
numberCandles = (BarIndex - TradeIndex)
if onmarket then
if low>low[1] and numberCandles>=CandleSl then
newsl=low[v1]
endif
ENDIF
If NewSL > 0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
GRAPHONPRICE NEWSL
IF NOT ONMARKET THEN
newsl=0
ENDIF
CandleSl=10
numberCandles = (BarIndex - TradeIndex)
if onmarket then
if low>low[1] and numberCandles>=CandleSl then
newsl=low[1]
endif
ENDIF
If NewSL > 0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
GRAPHONPRICE NEWSL
Scusa avevo dimenticato di togliere la variabile l’ho riscritto.
Mi puoi spiegare la logica di If NewSL > 0 THEN ??
Serve per uscire solo se almeno una volta la linea 8 è stata eseguita.