Salve buongiorno…ringrazio anticipatamente per aiuto!!!
Non sono pratico… ma grazie ai vostri forum, ho cercato di buttar giù la mia idea.
Purtroppo non riesco a chiedergli quello che vorrei fare.
Dove sbaglio!!
Esempio di cosa vorrei fargli fare:
buy se il prezzo corrente è 20 pip sopra EMA 200 a 5 min.
sellshort se il prezzo corrente è 20 pip sotto EMA 200 a 5 min.
stop loss 20
Se vado sopra di 20 pip il mio stop loss diventa il mio ingresso.
Se vado sopra di 35 pip il mio stop loss diventa ingresso+20 pip
Se vado sopra di 100pip il mio stop loss diventa ingresso+75 pip
Se vado sopra di 150pip il mio stop loss diventa ingresso+125 pip
….e cosi via..
Se non esco con gli step preimpostati di cui sopra, ma il prezzo corrente tocca la ema 200 (5min) uscire dal mercato.
In ogni caso si rientra a mercato solo quando la distanza dalla ema rientra sotto i 20 pip e poi si distanzia di nuovo di 20pip.
Ultima cosa che non sono riuscito a inserire nel codice perchè non ci arrivo proprio…. e questa ulteriore entrata:
Nel caso entro buy a mercato 10.000 punti… il mercato va sopra i 10.100 punti, riscende ed esco correttamente a +10.075 punti…..
Vorrei rientrare a mercato (nel caso non riscende nel range dei 20 pipsize dalla Ema)
al superamento dei 10.100 punti(stop loss sempre 20).
Grazieee
Allego file codice di prova
Va bene, dammi solo un pò di tempo e la metto a posto.
Buongiorno sig. Gozzi,
ho provato questa modifica, va un pò meglio ma comunque, nella maggior parte delle volte salta le chiusure
sia con l’incrocio con la media, sia quando arriva il nuovo stop loss.
Allego codice.
Grazie per aiuto.
Mi sembra funzioni come vorresti, però controllalo meglio:
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Impedisce al sistema di creare nuovi ordini per entrare a mercato o aumentare la taglia della posizione prima dell'orario specificato
noEntryBeforeTime = 000000
timeEnterBefore = time >= noEntryBeforeTime
// Impedisce al sistema di piazzare nuovi ordini per entrare a mercato o aumentare la taglia della posizione dopo l'orario indicato
noEntryAfterTime = 2359000
timeEnterAfter = time < noEntryAfterTime
// Impedisce al sistema di tradare in giorni specifici della settimana
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
TIMEFRAME (5MINUTE, UPDATEONCLOSE)
MEDIAEMA= EXPONENTIALAVERAGE[200] (close)
//incrocio del prezzo corrente con media esponenziale a 200
C1= (CLOSE CROSSES UNDER MEDIAEMA)
C2= (CLOSE CROSSES OVER MEDIAEMA)
//controlla l'ingresso solo se rientra sotto i 20 pipsize
MEDIAEMA1=MEDIAEMA+20*PIPSIZE
MEDIAEMA2=MEDIAEMA-20*PIPSIZE
TIMEFRAME (DEFAULT)
IF Not OnMarket OR (LongOnMarket AND ShortOnMarket[1]) OR (LongOnMarket[1] AND ShortOnMarket) THEN
NewSL = 0
Flag = 0
ENDIF
IF LongOnMarket AND Not (LongOnMarket[1]) THEN
EntrataLong = TradePrice
ENDIF
IF ShortOnMarket AND Not (ShortOnMarket[1]) THEN
EntrataShort = TradePrice
ENDIF
IF LongOnMarket AND low <= MEDIAEMA THEN
SELL AT MARKET
ELSIF ShortOnMarket AND high >= MEDIAEMA THEN
EXITSHORT AT MARKET
ENDIF
//controlla l'ingresso solo se rientra sotto i 20 pipsize
once conto=0
If not onMarket and onMarket[1] then
conto=conto+1
endif
if CLOSE < MEDIAEMA1 and close > MEDIAEMA2 then
conto=0
endif
//compra se il prezzo va sopra la ema da 20 pipsize in su
IF CLOSE >= (MEDIAEMA+20*PIPSIZE) AND Not OnMarket AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry AND CONTO=0 then
Buy 1 contract at market
ENDIF
//vende allo scoperto se il prezzo va sotto la ema di 20 pipsize in giù
IF CLOSE <= (MEDIAEMA-20*PIPSIZE) AND Not OnMarket AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry AND CONTO=0 then
Sellshort 1 contract at market
ENDIF
IF Not OnMarket AND (conto = 0) THEN
IF close > EntrataLong THEN
Buy 1 contract at market
ELSIF close < EntrataShort THEN
Sellshort 1 contract at market
ENDIF
ENDIF
SET STOP PLOSS 20
//************************************************************************
// Trailing Stop
//
IF OnMarket THEN
Profitto = PositionPerf * PositionPrice / PipSize
IF Flag = 0 THEN
IF Profitto > 20 THEN //Pareggio
NewSL = Tradeprice
Flag = 1
ENDIF
ENDIF
IF Flag = 1 THEN
IF Profitto > 35 THEN
IF LongOnMarket THEN //primo livello di Profitto (oltre il pareggio)
NewSL = TradePrice + 20*PipSize
ELSE
NewSL = TradePrice - 20*PipSize
ENDIF
Flag = 2
ENDIF
ENDIF
IF Flag = 2 AND Profitto > 100 THEN //livelli di profitto successivi al primo
Livelli50 = floor(Profitto / 50) - 1 //calcolare gli STEP di 50 punti (escluso i primi 50) oltre il pareggio + 25 punti
IF LongOnMarket THEN
NewSL = max(NewSL,Tradeprice + ((25 + (Livelli50 * 50))*PipSize))
ELSE
NewSL = min(NewSL,Tradeprice - ((25 + (Livelli50 * 50))*PipSize))
ENDIF
ENDIF
IF NewSL > 0 THEN
SELL AT MARKET
EXITSHORT AT MARKET
ENDIF
ENDIF
//************************************************************************
GRAPH newSL as "trailing" coloured(255,0,0,255)
GRAPH Profitto coloured(0,0,255,255)
GRAPHONPRICE newSL as "trailing" coloured(255,0,0,255)
Il trailing stop l’ho fatto nuovo, in quanto non era possibile adattare quello di Nicolas alle tue necessità.
L’ho provato su euro/usd utilizzando come time frame di default anche 5 min per avere più backtest.
Purtroppo c’è qualcosa che non va…. però non riesco a capire cosa
- non rispetta l’ingresso (buy a +20 da ema) e lo stesso con (vendita a -20 da ema)
- il traling stop non viene preso in considerazione
- Non riesco a capire se rispetta l’uscita da mercato in caso d’ incrocio con ema
C’erano 3 errori e li ho corretti, adesso i due errori che segnalavi (più un altro che ho notato) li ho corretti.
Le entrate però andavano bene, quindi verificale ulteriormente, ma entra alla chiusura della candela che OLTREPASSA i limiti +20 o -20 dalla media (li ho resi visibili in verde sul grafico, quando fai il backtest).
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Impedisce al sistema di creare nuovi ordini per entrare a mercato o aumentare la taglia della posizione prima dell'orario specificato
noEntryBeforeTime = 000000
timeEnterBefore = time >= noEntryBeforeTime
// Impedisce al sistema di piazzare nuovi ordini per entrare a mercato o aumentare la taglia della posizione dopo l'orario indicato
noEntryAfterTime = 2359000
timeEnterAfter = time < noEntryAfterTime
// Impedisce al sistema di tradare in giorni specifici della settimana
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
TIMEFRAME (5MINUTE, UPDATEONCLOSE)
MEDIAEMA= EXPONENTIALAVERAGE[200] (close)
//incrocio del prezzo corrente con media esponenziale a 200
C1= (CLOSE CROSSES UNDER MEDIAEMA)
C2= (CLOSE CROSSES OVER MEDIAEMA)
//controlla l'ingresso solo se rientra sotto i 20 pipsize
MEDIAEMA1=MEDIAEMA+20*PIPSIZE
MEDIAEMA2=MEDIAEMA-20*PIPSIZE
TIMEFRAME (DEFAULT)
IF Not OnMarket OR (LongOnMarket AND ShortOnMarket[1]) OR (LongOnMarket[1] AND ShortOnMarket) THEN
NewSL = 0
Flag = 0
ENDIF
IF LongOnMarket AND Not (LongOnMarket[1]) THEN
EntrataLong = TradePrice
ENDIF
IF ShortOnMarket AND Not (ShortOnMarket[1]) THEN
EntrataShort = TradePrice
ENDIF
IF LongOnMarket AND low <= MEDIAEMA THEN
SELL AT MARKET
ELSIF ShortOnMarket AND high >= MEDIAEMA THEN
EXITSHORT AT MARKET
ENDIF
//controlla l'ingresso solo se rientra sotto i 20 pipsize
once conto=0
If not onMarket and onMarket[1] then
conto=conto+1
endif
if CLOSE < MEDIAEMA1 and close > MEDIAEMA2 then
conto=0
endif
//compra se il prezzo va sopra la ema da 20 pipsize in su
IF CLOSE >= MEDIAEMA1 AND Not OnMarket AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry AND CONTO=0 then
Buy 1 contract at market
ENDIF
//vende allo scoperto se il prezzo va sotto la ema di 20 pipsize in giù
IF CLOSE <= MEDIAEMA2 AND Not OnMarket AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry AND CONTO=0 then
Sellshort 1 contract at market
ENDIF
IF Not OnMarket AND (conto <> 0) THEN
IF close CROSSES OVER EntrataLong THEN
Buy 1 contract at market
ELSIF close CROSSES UNDER EntrataShort THEN
Sellshort 1 contract at market
ENDIF
ENDIF
SET STOP PLOSS 20
//************************************************************************
// Trailing Stop
//
IF OnMarket THEN
Profitto = PositionPerf * PositionPrice / PipSize
IF Flag = 0 THEN
IF Profitto > 20 THEN //Pareggio
NewSL = Tradeprice
Flag = 1
ENDIF
ENDIF
IF Flag = 1 THEN
IF Profitto > 35 THEN
IF LongOnMarket THEN //primo livello di Profitto (oltre il pareggio)
NewSL = TradePrice + 20*PipSize
ELSE
NewSL = TradePrice - 20*PipSize
ENDIF
Flag = 2
ENDIF
ENDIF
IF Flag = 2 AND Profitto > 100 THEN //livelli di profitto successivi al primo
Livelli50 = floor(Profitto / 50) - 1 //calcolare gli STEP di 50 punti (escluso i primi 50) oltre il pareggio + 25 punti
IF LongOnMarket THEN
NewSL = max(NewSL,Tradeprice + ((25 + (Livelli50 * 50))*PipSize))
ELSE
NewSL = min(NewSL,Tradeprice - ((25 + (Livelli50 * 50))*PipSize))
ENDIF
ENDIF
IF NewSL > 0 THEN
SELL AT NewSL STOP
EXITSHORT AT NewSL STOP
ENDIF
ENDIF
//************************************************************************
GRAPH newSL as "trailing" coloured(255,0,0,255)
GRAPH Profitto coloured(0,0,255,255)
GRAPHONPRICE newSL as "trailing" coloured(255,0,0,255)
graphonprice MEDIAEMA1 AS "Media1" coloured(0,128,0,155)
graphonprice MEDIAEMA2 AS "Media2" coloured(0,128,0,155)
Ok… è perfetto!!.
Grazie infinite per la disponibilità!!!