Buonasera Roberto, vorrei autorizzare il sistema ad entrare in Buy quando il prezzo supera di 5 pips il massimo della candela precedente (subito) senza aspettare la chiusura della candela in formazione è possibile farlo?
ti invio uno screen con 2 esempi di ingressi in Buy ci sono 2 freccette verdi ed una linea verde a livello degli ingressi inoltre le aree sono evidenziate con un rettangolo ed un triangolo.
se puoi dirmi la formulazione del codice per ottenere questo, ho provato a farlo ma non funziona. Grazie in anticipo. Ciao
Basta piazzare un ordine pendente:
BUY 1 CONTRACT AT high + 5*pipsize STOP
Questo è un esempio semplicistico, in realtà occorre, in reale (in backtest funziona sempre), verificare che il punto d’entrata sia almeno alla distanza minima richiesta del broker (assumiamo siano 6 punti):
Distanza = 6
Entrata = high + 5*PipSize
IF (close + Distanza) < Entrata THEN
BUY 1 CONTRACT AT Entrata STOP
ENDIF
Roberto in relazione all’ordine pendente di n pips per autorizzare l’ingresso in Buy del sistema ho inserito nel codice la modifica che hai indicato con la lettera b1 (per motivi che a1 indicava il passo del backtest) , in pratica avevo dato la condizione di entrare se non dopo il superamento del massimo candela precedente 25 pip più in alto ma non la rispetta …..ti posto sia codice sia screen candela che è del 10 maggio 2021 delle ore 5:00.
//-------------------------------------------------------------------------
// Codice principale : SsNasdaq 15min
//-------------------------------------------------------------------------
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
t1 = (OpenDayOfWeek = 1) AND (Time >= 010000) AND (Time <= 210000)
t2 = (OpenDayOfWeek = 2) AND (Time >= 010000) AND (Time <= 210000)
t3 = (OpenDayOfWeek = 3) AND (Time >= 010000) AND (Time <= 210000)
t4 = (OpenDayOfWeek = 4) AND (Time >= 010000) AND (Time <= 210000)
t5 = (OpenDayOfWeek = 5) AND (Time >= 010000) AND (Time <= 170000)
x1 = (OpenDayOfWeek = 1) AND (Time = 240000)
x2 = (OpenDayOfWeek = 2) AND (Time = 240000)
x3 = (OpenDayOfWeek = 3) AND (Time = 240000)
x4 = (OpenDayOfWeek = 4) AND (Time = 240000)
x5 = (OpenDayOfWeek = 5) AND (Time = 210000)
//
If OnMarket AND (x1 OR x2 OR x3 OR x4 OR x5) THEN
SELL AT MARKET
EXITSHORT AT MARKET
ENDIF
// Condizioni per entrare su posizioni long
L1 = t1 OR t2 OR t3 OR t4 OR t5
L2 = Not OnMarket
ONCE b1 = 25.0 * PipSize
c1 = (high > high[1])
indicator1 = EndPointAverage[20](close)
indicator2 = EndPointAverage[200](close)
c2 = (indicator1 CROSSES OVER indicator2)
IF (c1 OR c2) OR (L1 AND L2) AND high > (high[1] + b1) then
Buy 1 contract at Market //entrata a Mercato
Endif
//
Buy 1 contract at (high[1] + b1) STOP //entrata con ordine pendente STOP
// Stop e target
SET STOP LOSS 665
SET TARGET PPROFIT 350 //395
//
//trailing stop function
//************************************************************************
// trailing stop function
trailingstart = 30 //10 trailing will start @trailinstart points profit
trailingstep = 30 //5 trailing step to move the "stoploss"
//
//reset the stoploss value
IF NOT ONMARKET THEN
newSL=0
ENDIF
//manage long positions
IF LONGONMARKET THEN
//first move (breakeven)
IF newSL=0 AND HIGH-tradeprice(1)>=trailingstart*pipsize THEN //close --> HIGH
newSL = tradeprice(1)+trailingstep*pipsize
// new coding
IF newSL > close THEN //if current closing price is < new SL then exit IMMEDIATELY!
SELL AT MARKET
ENDIF
// end new coding
ENDIF
//next moves
IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
// new coding
IF newSL > close THEN //if current closing price is < new SL then exit IMMEDIATELY!
SELL AT MARKET
ENDIF
// end new coding
ENDIF
ENDIF
//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF newSL=0 AND tradeprice(1)-LOW>=trailingstart*pipsize THEN //close --> LOW
newSL = tradeprice(1)-trailingstep*pipsize
// new coding
IF newSL < close THEN //if current closing price is > new SL then exit IMMEDIATELY!
EXITSHORT AT newSL LIMIT
ENDIF
// end new coding
ENDIF
//next moves
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
// new coding
IF newSL < close THEN //if current closing price is > new SL then exit IMMEDIATELY!
EXITSHORT AT newSL LIMIT
ENDIF
// end new coding
ENDIF
ENDIF
//stop order to exit the positions
IF newSL>0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
//***************************************************************
ti posto anche screen candela 4 ore, mi ero dimenticato scusa.
l’ingresso sarebbe dovuto avvenire dove ho messo la freccetta verde ti mando screen ….. a non guardare la definizione in grigio del codice che ti ho postato prima , il backtest lo ho effettuato su timeframe H4.
Per forza, se acquisti ad prezzo più basso devi mettere LIMIT, non STOP.
no Roberto quell’ingresso in Buy non sarebbe dovuto proprio entrare , ti spiego io sarei dovuto entrare 25 pips sopra il massimo della piccola candela verde precedente , quindi essendo il massimo della candela prima 13758, l’ingresso sarebbe dovuto avvenire a 13883 e NON a 13758 come è successo…..perchè?
in pratica vorrei entrare in Buy SOLO dopo i 25 pips sopra il massimo della candela precedente. e quell’ingresso non doveva essere fatto perchè non erano stati superati i 25 sopra il massimo della candela precedente. il sistema opera SOLO in Buy.
ti posto un altro screen, intendo dire che entri 25 pips sopra il massimo della spike precedente.
intendo dire 25 pips sopra massimo della spike precedente.
Se piazzi un ordine sbagliato entra a mercato.
Roberto scrivendo open>high [1] + b1 entra dopo, dando la definizione ONCE b1 = 13.0*PipSize entra più in alto dopo il max della candela precedente.
Scusa, non avevo visto bene le righe di entrata. Tu hai messo due entrate:
- la prima AT MARKET alla riga 36; questa riga eliminala (o mettici o commentala)
- la seconda pendente STOP alla riga 39; questa mettila al posto della 36 (oppure sotto se l’hai lasciata come commento).
in questo modo esegue l’entrata SOLO se le condizioni sono verificate e al prezzo desiderato. Con il tuo codice piazzava SEMPRE un ordine pendente, in quanto NON subordinato alla verifica delle condizioni, oppure entrava A MERCATO quando le condizioni erano verificate.
Alla riga 43 aggiungi una P all’inizio di LOSS, come con PPROFIT. Con Nasdaq, DAX ed indici in generale, può non fare differenza, ma in altri casi si.