codice con trailing tp e contatore
Forums › ProRealTime forum Italiano › Supporto ProOrder › codice con trailing tp e contatore
- This topic has 4 replies, 2 voices, and was last updated 1 year ago by alessiopippo.
-
-
08/30/2023 at 11:31 PM #220097
Buongiorno, avrei bisogno di aiuto per un codice che sto cercando di scrivere, il sistema al verificarsi della condizione “acquisto” dovrebbe:
comprare due contratti al massimo della candela dove si è verificata la condizione
l’ordine deve rimanere valido per 5 candele
lo stop loss deve essere al minimo della candela di 2 periodi antecedenti il verificarsi della condizione.
poi il sistema dovrebbe uscire con un contratto al raggiungimento del tp1(prezzo di acquisro piu 10 punti),
il restante contratto deve venire gestito con un trailing che parte al prezzo di vendita del primo contratto e uno stop loss di 5 punti sempre dal prezzo di vendita del primo contratto.
ho provato a scrivere il codice ma non fa quello che vorrei, qualcuno può aiutarmi cosi da capire cosa e come modificare il codice?
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475DEFPARAM CumulateOrders = false// Impedisce al sistema di tradare in giorni specifici della settimanadaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0// Condizioni per entrare su posizioni longonce count=0count=count+1a = adx[14]>=20b= high[1]<highacquisto= a and bif acquisto thencount=0prezzoacquisto=highperdita = low[2]endifIF count<5 and not daysForbiddenEntry then // barindex-mybar<5 AND not daysForbiddenEntry THENBUY 2 CONTRACT AT prezzoacquisto stopENDIFtp1=24prezzovendita=prezzoacquisto+tp1*pointsizeif countofposition=2 and longonmarket thensell 1 contract at prezzovendita limitset stop price perditaendifif countofposition=1 thenperditaseconda=prezzovendita-5*pointsizeset stop price perditaseconda//trailing stop functiontrailingstart = 15 //trailing will start @trailinstart points profittrailingstep = 5 //trailing step to move the "stoploss"//reset the stoploss valueIF NOT ONMARKET THENnewSL=0ENDIF//manage long positionsIF LONGONMARKET THEN//first move (breakeven)IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THENnewSL = tradeprice(1)+trailingstep*pipsizeENDIF//next movesIF newSL>0 AND close-newSL>=trailingstep*pipsize THENnewSL = newSL+trailingstep*pipsizeENDIFENDIF//manage short positionsIF SHORTONMARKET THEN//first move (breakeven)IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THENnewSL = tradeprice(1)-trailingstep*pipsizeENDIF//next movesIF newSL>0 AND newSL-close>=trailingstep*pipsize THENnewSL = newSL-trailingstep*pipsizeENDIFENDIF//stop order to exit the positionsIF newSL>0 THENSELL AT newSL STOPEXITSHORT AT newSL STOPENDIFendif//************************************************************************GRAPHonprice prezzovenditagraphonprice perditaseconda//graph count //barindex-mybar08/31/2023 at 10:00 AM #220110Preciso questi punti:
- set stop price perdita è bene che venga messo al BUY iniziale, non all’uscita parziale
- le uscite parziali ProRealTime le accetta, quindi nel backtest funzionano, però IG non le ammette, quindi devi procedere con un’uscita a mercato (quindi solo DOPO che il prezzo ha superato prezzovendita)
- BUY 2 CONTRACT AT prezzoacquisto stop non è detto che si comporti correttamente LIVE (in backtest va bene), perché tra il prezzo corrente e l’entrata potrebbe non esserci la distanza minima richiesta dal broker, nel caso la richieda per quel determinato strumento
- dove c’è il primo BUY, dovresti aggiungere come condizione AND Not OnMarket, per evitare che comunque il codice venga eseguito, anche se non entra più a mercato dopo la prima volta, e che ti cambi lo STOP che hai messo nel trailing stop
- usi stop diversi, questo potrebbe creare conflitti LIVE, in quanto usi set stop price perditaseconda e, più sotto, SELL AT newSL STOP.
- nel trailing stop è opportuno usare una variabile FLAG per fare in modo che le righe perditaseconda=prezzovendita-5*pointsize e set stop price perditaseconda siano eseguite solo la prima volta, questo dovrebbe aiutare anche ad evitare conflitti tra i vari stop di uscita
- la riga if acquisto then va modificata in if acquisto and Not Onmarket then, altrimenti la variabili all’interno di IF…ENDIF le modifica anche quando sei già a mercato.
Questo è come l’ho modificato, fai le verifiche e fammi sapere:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475DEFPARAM CumulateOrders = false// Impedisce al sistema di tradare in giorni specifici della settimanadaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0// Condizioni per entrare su posizioni longonce count=0count=count+1a = adx[14]>=20b= high[1]<highacquisto= a and bif acquisto thencount=0prezzoacquisto=highperdita = low[2]endifIF count<5 and not daysForbiddenEntry and Not OnMarket then // barindex-mybar<5 AND not daysForbiddenEntry THENBUY 2 CONTRACT AT prezzoacquisto stopset stop price perditaflag = 0ENDIFtp1=24prezzovendita=prezzoacquisto+tp1*pointsizeif countofposition=2 and longonmarket thenif close >= prezzovendita thensell 1 contract at marketflag = 1endifendifif countofposition=1 thenif flag = 1 thenperditaseconda=prezzovendita-5*pointsizeset stop price perditasecondaflag = 0endif//trailing stop functiontrailingstart = 15 //trailing will start @trailinstart points profittrailingstep = 5 //trailing step to move the "stoploss"//reset the stoploss valueIF NOT ONMARKET THENnewSL=0ENDIF//manage long positionsIF LONGONMARKET THEN//first move (breakeven)IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THENnewSL = tradeprice(1)+trailingstep*pipsizeENDIF//next movesIF newSL>0 AND close-newSL>=trailingstep*pipsize THENnewSL = newSL+trailingstep*pipsizeENDIFENDIF//manage short positionsIF SHORTONMARKET THEN//first move (breakeven)IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THENnewSL = tradeprice(1)-trailingstep*pipsizeENDIF//next movesIF newSL>0 AND newSL-close>=trailingstep*pipsize THENnewSL = newSL-trailingstep*pipsizeENDIFENDIF//stop order to exit the positionsIF newSL>0 THENSELL AT newSL STOPEXITSHORT AT newSL STOPENDIFendif//************************************************************************GRAPHonprice prezzovendita coloured("Fuchsia")graphonprice perditaseconda coloured("LawnGreen")graphonprice NewSL coloured("Red")//graph count //barindex-mybar08/31/2023 at 2:04 PM #220133Grazie mille Roberto, il codice funziona.
per quanto riguarda il punto 3
BUY 2 CONTRACT AT prezzoacquisto stop non è detto che si comporti correttamente LIVE (in backtest va bene), perché tra il prezzo corrente e l’entrata potrebbe non esserci la distanza minima richiesta dal broker, nel caso la richieda per quel determinato strumento
Devo includere la distanza minima in prezzoacquisto?
esempio: distanza minima 4 punti allora prezzoacquisto=high diventa prezzoacquisto=high+4*pipsize? oppure bisogna fare una verifica prima per vedere se la distanza minima è già rispettata?
se si come si codifica?
grazie ancora
08/31/2023 at 3:32 PM #220135Io preferisco fare sempre una verifica sui possibli 3 casi (esempio LONG: prezzo Maggiore dell’entrata + distanza ed entro in LIMIT, prezzo Minore dell’entrata – distanza ed entro STOP, oppure è a rischio perché non c’è la distanza e tralascio fino alla prossima candela oppure entro a Mercato):
12345678910Distanza = 6 * pipsize //distanza usuale per il DAXIF count<5 and not daysForbiddenEntry then // barindex-mybar<5 AND not daysForbiddenEntry THENIF close >= (prezzoacquisto + Distanza) THENBUY 2 CONTRACT AT prezzoacquisto LIMITELSIF close <= (prezzoacquisto - Distanza) THENBUY 2 CONTRACT AT prezzoacquisto STOPELSE//BUY 2 CONTRACT at MarketENDIFENDIFnell’entrata a Mercato ho messo i commenti, così non entra ed aspetta la prossima candela, nel caso ci siano ancora le condizioni ed il prezzo non sia così vicino. Se vuoi entrare basta che togli le due barre iniziali della riga.
Generalmente per il DAX sono 6 pip di distanza minima, ma durante il giorno può cambiare secondo la volatilità e non si può conoscere il valore. Io di solito metto tra 8 e 10 pips per cercare di essere sicuro. Chiaramente su un timeframe alto, 1 ora o più, 3-4 pip in più non fanno la differenza, mentre su timeframe piccoli possono farla.
La decisione spetta a te.
09/01/2023 at 8:59 PM #220198Grazie mille Roberto, funziona tutto e ho capito quello che mi hai spiegato sulla distanza, appena avro finito il codice lo posto completo cosi potete commentarlo dare consigli e se va bene anche usarlo
1 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on