Trading System con trailing stop su pullback
Forums › ProRealTime forum Italiano › Supporto ProOrder › Trading System con trailing stop su pullback
- This topic has 6 replies, 2 voices, and was last updated 3 years ago by robertogozzi.
-
-
01/05/2021 at 2:17 PM #156446
Buongiorno,
scrivo per chiedere aiuto per quanto riguarda un codice (trovato su un libro) che sto cercando di implementareL’idea è questa:
– l’allineamento di 3 medie mobili deve passare da discendente ad ascendente
– la durata dell’inversione deve essere rapida (es. max 3 barre)
– deve verificarsi un pullback ad una o più barre
– acquistare sopra il massimo della barra di pullback
– stop sotto al minimo della barra di pullback
– nel caso (sperato) che i prezzi riprendano a salire e avvenga un nuovo pullback, spostare lo stop sotto al minimo del nuovo pullbackPremessa: ho creato un indicatore, restituisce -1 se le medie sono allineate al ribasso, 0 se non sono allineate, 1 se sono allineate al rialzo.
1234567indicator = CALL "In Trend"[10, 0, 20, 1, 30, 1]inversione = indicator[3] = -1 AND indicator = 1pullback = high < high[1] AND low < low[1]IF inversione and pullback THENBUY 1000 CASH AT MARKETENDIFIl programmino sopra funziona ma non fa propriamente quello che voglio io:
– mi trova le inversioni nelle ultime 3 barre e i pullback nell’ultima. Io voglio che trovi l’ultima inversione, che può essersi verificata anche 5 o 10 barre fa(basta che l’indicatore, da allora, rimanga sempre 1) e un pullback successivo.Ho provato scrivendo qualcosa del genere ma non sono giunto a nessuna conclusione
12345678910111213141516171819202122//conta da quante barre il trend è positivocount = 0WHILE indicator[count] = 1 DOcount = count + 1WEND//verifica che ci sia stata un'inversione in meno di 3 giorniinversione = indicator[count+3] = -1//cerca il pullback più vicino a noi e setta entry e stopIF (inversione) THENi = 0indexBarPullback = -1WHILE (i < count AND indexBarPullback = -1) DOIF(high[i] < high[i+1] AND low[i] < low[i+1]) THENindexBarPullback = ientry = high[i]stopLoss = low[i]ENDIFi = i + 1WENDENDIF– L’entrata, da quanto ho letto, viene effettuata all’apertura della barra successiva…ma io voglio entrare quando il prezzo supera la mia “entry”! Come è possibile farlo?
– Lo stop è possibile modificarlo una volta inserito? Perchè guardando la documentazione del trailing, propone solo metodi “automatici” in percentuale o valore assoluto, che seguono il prezzo. Ma io vorrei settare lo un nuovo stop al minimo del successivo pullback, seguendo così i prezzi. E’ possibile?
Allego un’immagine di esempio
So che sto chiedendo molto, praticamente tutto, ma non vi chiedo necessariamente la pappa pronta. Mi vanno bene anche codici di esempi simili o idee da sviscerare o piccoli input da seguire.
Ogni commento è ben accetto, spero di essere stato chiaro e non aver dimenticato nulla.
Grazie
Mirco01/05/2021 at 2:43 PM #156453Cosa intendi per PULLBACK?
Di quanto deve essere?
01/05/2021 at 3:09 PM #156454Grazie per l’interessamento Roberto.
Per pullback intendo semplicemente che una barra ha un massimo ed un minimo inferiore alla precedente:1high < high[1] AND low < low[1]Il mio problema è che i pullback non sono necessariamente ad una barra.
Un pullback a due barre è definito come:1(high < high[1] AND low < low[1]) AND (high[1] < high[2] AND low[1] < low[2])E così via per 3,4…barre
Questo nei casi più semplici.
Nei casi più complessi un pullback a più barre potrebbe essere composto da:
– pullback ad 1 barra
– una barra di “assestamento” (che non ha requisiti di un pullback e allo stesso tempo non mi consente di entrare a mercato perchè non supera il massimo della barra precedente)
– un altro pullback
(non so se mi sono spiegato)01/05/2021 at 6:45 PM #156492Ok, più tardi ci darò un’occhiata.
01/06/2021 at 4:09 AM #156549Domanda “…ma io voglio entrare quando il prezzo supera la mia “entry”! Come è possibile farlo?”
Risposta Con un ordine pendente (STOP o LIMIT), esempi:
12BUY 1 Contract AT Entry STOP //se il prezzo d'entrata è peggiorativoBUY 1 Contract AT Entry LIMIT //se il prezzo d'entrata è migliorativoPer lo Stop Loss, puoi seguire il Pullback, metti lo stop loss in una variabile e lo aggiorni ad ogni nuovo pullback (facendo attenzione a che NON scenda sotto il valore precedente):
123456789101112IF MieCondizioni AND Not OnMarket THENBUY 1 Contract AT Entry STOPSET TARGET pPROFIT 500 //500 pips fissiSLexit = lowest[3](low) //Setta lo SL iniziale al minimo delle ultime 3 candeleSET STOP pLOSS abs(Entry - SLexit) / pipsizeENDIFIF NextPullBack AND PositionPerf > 0 THEN //al prossimo PullBack (se in guadagno)SLexit = max(PositionPrice,max(SLexit,MinimoPullBack))ENDIFIF LongOnMarket THENSELL AT SLexit STOP //piazza l'ordine di StopLoss (in sostituzione dello SL iniziale)ENDIFIn pratica setta uno SL ed un TP iniziale. Alle candele successive aggiorna lo SL, la prima volta mettendolo almeno in pareggio (PositionPrice, o anche TradePrice se non accumuli posizioni), poi aggiornandolo ad ogni nuovo PullBack, ma facendo in modo che NON scenda mai più sotto il pareggio).
Le ultime 3 righe piazzano un ordine STOP pendente ad ogni nuova candela, se a mercato, perché gli ordini pendenti hanno validità per una sola candela. Alla prima candela NON sarà piazzato perché per sapere di essere entrato a mercato ProOrder ha necessità che passi un’intera candela dopo un ordine BUY/SELLSHORT/SELL/EXITSHORT, per questo è stato messo lo SL iniziale con SET STOP pLOSS per essere sicuri di non entrare a mercato senza uno stop loss.
01/06/2021 at 8:38 PM #156666Grazie roberto per l’aiuto.
Intanto volevo chiederti…da quello che ho capito, suppongo che il prt “legga” il codice ad ogni nuova barra, è corretto?
Le variabili della barra precedente restano in memoria? (es. ad una barra setto una variabile. Alla barra successiva, quando il programma viene ri-eseguito, la variabile resta settata?)
Poi…qualcosa non mi torna:12345678910111213141516171819202122232425262728// Condizioni per entrare su posizioni longindicator = CALL "In Trend"[10, 0, 20, 1, 30, 1]//conta da quante barre il trend è positivo//count = indice prima barra dove non è in trendcount = 0WHILE indicator[count] = 1 DOcount = count + 1WEND//verifica che ci sia stata un'inversione in meno di 3 giorniinversione = indicator[count+2] = -1//-----------------------------------------------------------------////cerca il pullback più vicino a noi e setta entry e stopIF (inversione = 1) THENi = 0indexBarPullback = -1WHILE (i < count AND indexBarPullback = -1) DOIF(high[i] < high[i+1] AND low[i] < low[i+1]) THENindexBarPullback = ientry = high[i]stopLoss = low[i]ENDIFi = i + 1WENDENDIFQuesta è la routine che fa. Ho provato a farlo disegnare come indicatore e dovrebbe funzionare. Mi disegna sul grafico le righe giuste ed i dati giusti.
12345678910IF indicator = 1 AND indexBarPullback > 0 THENDRAWARROWUP(barindex[indexBarPullback], low[indexBarPullback]-1) coloured(255,0,0,255)DrawText(entry,barindex[indexBarPullback],low[indexBarPullback]-2) coloured(255,0,0,255)DrawText(stopLoss,barindex[indexBarPullback],low[indexBarPullback]-3) coloured(255,0,0,255)ENDIFIF(close > entry AND indexBarPullback > 0) THENDRAWARROW(barindex[indexBarPullback], entry) coloured(0,0,255,255)DrawText(entry,barindex[indexBarPullback],entry+1) coloured(0,0,255,255)ENDIFSe invece, anzichè disegnare, faccio fare gli acquisti, non compra niente.
123456IF indicator = 1 AND indexBarPullback > 0 AND Not OnMarket THENBUY 1 CONTRACTS AT entry STOPSET TARGET pPROFIT 500 //500 pips fissiSLexit = stopLoss //Lo stop è quello calcolato con la routineSET STOP pLOSS abs(Entry - SLexit) / pipsize //Questa istruzione non ho ben capito cosa fa >.<ENDIFNon so se ho sbagliato qualcosa. Ho modificato il tuo codice e ho concettualmente ricontrollato quello che fa.
Gli ordini li ho provati sia con BUY LIMIT che con BUY STOP, non funziona.P.S. Al controllo degli stop ancora non ci sono arrivato, se non compra nulla non posso testarli, però chiedo già.
La condizione di modifica dello stop io la farei semplicemente così
1234567IF stopLoss > SLexit AND POSITIONPERF > 0 THENSLexit = max(PositionPrice,stopLoss)ENDIFIF LongOnMarket THENSELL AT SLexit STOP //piazza l'ordine di StopLoss (durata 1 candela)ENDIF“Le ultime 3 righe piazzano un ordine STOP pendente ad ogni nuova candela, se a mercato, perché gli ordini pendenti hanno validità per una sola candela.”
Non si può ripiazzare uno stop “classico”?01/06/2021 at 10:02 PM #156674Le variabili restano in memoria con lo stesso valore finché non gliene assegni uno diverso.
Ad ogni nuova candela PRT mantiene le stesse variabili ed inizialmente anche lo stesso valore assegnandogli il BarIndex della nuova candela. Se, durante l’esecuzione del codice, un valore cambia allora aggiorna la variabile da quel momento in poi.
-
AuthorPosts
Find exclusive trading pro-tools on