ProRealCode - Trading & Coding with ProRealTime™
Grazie mille !!!
mi hai dato delle informazioni preziosissime… non ci sarei mai arrivato da solo.
vado immediatamente a provare e poi ti dico.
solo due conferme:
Grazie ancora.
stavo facendo una ulteriore riflessione, proprio perché voglio capire in modo costruttivo le tue indicazioni 🙂
le righe 50 e 51 dicono al programma che quando il prezzo è arrivato a metà strada tra il tradeprice (quello vero iniziale) ed il takeprofit bisogna spostare lo SL al valore del tradeprice (sempre quello vero iniziale). E fin qui mi sembra di aver appurato che tutto funziona come si deve e non ci sarebbe bisogno di ulteriori modifiche.
le righe 53 e 54 dicono al programma che quando il prezzo è arrivato al 80% della strada tra il tradeprice (quello vero iniziale) ed il takeprofit bisogna spostare lo SL a metà strada tra tradeprice (quello vero iniziale) ed il takeprofit, proprio per mettere al sicuro almeno una parte degli utili già “maturati”
solo le righe 56 e 57 dicono al programma che DA LI IN POI (ecco perché ho messo PercStop2+0,1 ovvero dal pip successivo al 80% del mio obiettivo) bisogna far partire il Trailing Stop. Ecco perché ero e sono convinto (forse sbagliando) che solo qui si debba sostituire il tradeprice iniziale con il mytradeprice per far digerire al programma un nuovo punto di partenza dal quale dare il via al trailing. E visto che alla riga 62 io vendo al Breakeven, io dovrei solo alla riga 57 dire al programma che breakeven=Mytradeprice. Ma a questo punto come fa il programma capire che da li in poi deve partire il trailing e che il valore dello SL messo a metà strada tra tradeprice e takeprofit deve iniziare a salire man mano che il valore HIGH aumenta ?? (portandosi dietro proprio lo SL che diventerebbe a tutti gli effetti “dinamico”).
Sto dicendo una stupidaggine o il mio ragionamento è in qualche modo corretto ?
Ti ringrazio molto.
Perdonami, ma sono oltre 5 ore che sto cercando di applicare i tuoi suggerimenti senza però riuscirci ed adesso sto purtroppo andando per tentativi, mosso solo dalla disperazione per non aver ancora raggiunto nessun risultato. 🙁
potresti cortesemente riscrivermi tu le righe da 50 a 57 ?
anche se io (in base a tutte le verifiche che ho fatto fin’ora) ero convinto che le righe da 50 a 54 fossero già sistemate in modo definitivo.
poi non ho capito come può convivere il concetto di Breakeven con quello del MyTradePrice. Pensavo che dopo l’ 80% fosse il Breakeven stesso a muoversi in qualità di trailingstop.
ho riletto 100 volte la spiegazione che ho trovato sul forum contenuta nell’articolo dal titolo “complete Trailing stop code function” ma vedo solo due passaggi. Il primo muove lo stop a Breakeven ed il secondo fa partire il trailing ed utilizza il concetto di “newSL” che dovrebbe corrispondere al “Breakeven” che mi avevi suggerito tu.
sono il primo a non essere contento di dover mendicare così l’aiuto di qualcuno, ma proprio non riesco in questo momento a capire come procedere. Per favore dammi una mano.
Grazie.
In effetti non è così semplice, perché dovresti sostituire TUTTE le volte che c’è TRADEPRICE con MYTRADEPRICE, tranne la prima volta che sei a mercato e basterebbe scrivere:
IF OnMarket AND Not OnMarket[1] THEN //la prima barra in cui sei a mercato
MyTradePrice = TRADEPRICE
ENDIF
e quando superi PercStop2 scriverai:
MyTradePrice = (TargetProfit * (PercStop2+0.1))*pipsize
Ovviamente, a parte la prima volta suindicata, dovrai sempre fare riferimento a MyTradeprice.
ciao,
seguendo i tuoi consigli ho cercato di applicare la soluzione che mi hai fornito e contemporaneamente ho cercato anche di “semplificare” il meccanismo di spostamento del Breakeven.
adesso il comportamento del sistema dovrebbe essere il seguente:
l’unico problema (non di poco conto) è che il sistema dopo essersi accorto che rispetto al massimo raggiunto si è tornati indietro di oltre il 30% del target, anziché chiudere immediatamente l’operazione aspetta di vedere il valore di apertura della candela successiva. Se tale valore è ancora inferiore al massimo raggiunto meno il 30% del target, allora chiude l’operazione vendendo al prezzo di apertura della candela. Invece il sistema dovrebbe chiudere l’operazione DURANTE la candela non appena rileva di essere tornato indietro di oltre il 30% rispetto al massimo raggiunto da quando ho aperto l’operazione.
da cosa potrebbe dipendere, secondo la tua esperienza ?
potresti cortesemente far girare il codice che ho allegato e vedere se anche a te emerge lo stesso problema ?
utilizzando EURUSD Daily prova per favore a vedere l’operazione del 6 giugno 2013. Te la chiude il giorno successivo (sbagliando) o la chiude il giorno stesso quando il prezzo torna indietro rispetto al suo massimo di giornata ?
attualmente non dispongo per i miei test della possibilità di effettuare un controllo “tick by tick” ma soltanto Daily. Potrebbe essere questo il motivo del problema in sede di verifica dei risultati ?
cosa ne pensi di come ho risolto il discorso del trailing alle righe da 49 a 55 ?
GRAZIE MILLE !
//PARAMETRI
//inserire qui sotto tutti i parametri BASE del codice
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
MioRischio = 100 //importo massimo in euro che voglio rischiare per ogni singola operazione
PercStop1 = 0.50 //attiva il pareggio al 50% del profitto
PercStop2 = 0.80 //attiva lo SL a metà del profitto quanto questo ragguinge la seconda %
PagoSpese = 0.0005 //numero di pips che aggiungo al breakeven per ripagarmi delle spese
//DEFPARAM FlatAfter = 220000 //Range orario DOPO il quale non bisogna più essere in posizione (eventuale)
//DEFPARAM FLATBEFORE = 090000 //Range orario PRIMA del quale non bisogna ancora essere in posizione (eventuale)
//INSERIRE EVENTUALE PARAMETRO DAY OF THE WEEK PER ULTERIORE FILTRO DA TESTARE
IF Not OnMarket THEN
BreakEven = 0
ENDIF
ONCE Flag = 0
IF OnMarket OR LOW < MinimoPat THEN
Flag=0 //Azzerare il prezzo serve a non inserire ancora l'ordine pendente...
ENDIF //... una volta entrato oppure quando non ci sono più le condizioni
//IF Not OnMarket THEN
//BreakEven = 0
//ENDIF
//CONDIZIONI
//inserire qui sotto tutte le condizioni che caratterizzano il pattern o la strategia da tradare
AO=Average[5](MedianPrice)-Average[34](MedianPrice)
Cond1 = AO[0]>0
Cond2 = AO[1]<0
CondTOT = Cond1 AND Cond2 //Condizione globale da tradare
IF CondTOT THEN
Flag = 1
ENDIF
//COMPORTAMENTI
//inserire qui sotto come si deve comportare la strategia quando è ONMARKET
IF CondTOT AND Not LongOnMarket THEN
TargetProfit = (HIGH - LOW)/pipsize //VALORE in PIPS del mio TARGET INIZIALE
Prezzo = HIGH //VALORE al quale si entra in posizione se vengono soddisfatte TUTTE le CONDIZIONI
StopLoss = (HIGH - LOW)/pipsize //VALORE in PIPS dello STOP LOSS INIZIALE
MinimoPat = LOW
ENDIF
Moltiplicatore = (MioRischio/(StopLoss/Prezzo)/pipsize) //QUANTITA' dello strumento da negoziare per avere in caso di perdita un valore
//corrispondente a MIORISCHIO (nei parametri iniziali)
IF not onmarket AND Flag THEN
BUY Moltiplicatore lots AT (Prezzo+0.0000) STOP //Ordine automatico di ENTRATA LONG in posizione con eventuale aggiunta di pips
ENDIF
//IF LongOnMarket AND ((close - Tradeprice) >= (TargetProfit * PercStop2)) THEN
//IF LongOnMarket THEN
//Breakeven = max(BreakEven,Tradeprice + (TargetProfit / 2)) //mettere al sicuro il 50% del profitto (è un BreakEven + metà profitto)
//ENDIF
//ENDIF
IF LongOnMarket THEN
IF Breakeven=0 AND ((High - Tradeprice) >= (TargetProfit * PercStop1)*pipsize) THEN
Breakeven = Tradeprice + PagoSpese
ENDIF
IF Breakeven>0 AND ((High - Tradeprice) >= (TargetProfit * PercStop2)*pipsize) AND High >= Breakeven + ((TargetProfit * (PercStop2 - PercStop1))*pipsize) THEN
Breakeven = Tradeprice + (TargetProfit/2)
ENDIF
ENDIF
IF OnMarket AND Breakeven>0 THEN
SELL AT Breakeven STOP
ENDIF
SET STOP pLOSS StopLoss
//SET TARGET pPROFIT TargetProfit
//SET STOP pTRAILING TargetProfit
graph Moltiplicatore
…francamente mi sembra molto strano che il sistema debba aspettare il completamento della candela in corso e l’apertura della successiva per capire se far scattare lo stop dato dal trailing.
probabilmente manca qualcosa che attualmente mi sta sfuggendo (avevamo addirittura detto che mettendo High anziché Close era sufficiente che il prezzo toccasse il valore impostato per far scattare il trail senza aspettare la chiusura…)
inoltre, nell’articolo “complete trailing stop code function” vedo che c’è un “tradeprice” seguito da (1) tra parentesi tonde ! cosa significa ? fin’ora ero abituato a vedere solo parentesi quadre per indicare valori cronologicamente precedenti 🙁
hai già avuto modo di vedere il mio codice ?
Ti ringrazio.
Il tuo codice non l’ho ancora visto.
TRADEPRICE, come DCLOSE ed altri, richiedono le parentesi tonde.
Non ne conosco il motivo.
Con CLOSE il prezzo deve chiudere oltre un certo punto per fare scattare il trailing stop, mentre con HIGH basta che il prezzo sia arrivato ad un certo punto, anche se alla chiusura non è più li.
Le strategie vengono eseguite solo alla chiusura di ogni barra, quindi è solo a quel punto che il trailing stop può partire.
In alternativa puoi usare il supporto MTF per entrare/uscire da TF inferiori.
nell’attesa che tu possa gentilmente visionare il mio ultimo codice e dirmi se adesso funziona tutto bene, ti ringrazio e vorrei condividere con te ancora una riflessione…
come è possibile che per gli ingressi si riesca ad aprire una posizione durante la formazione della candela, esattamente ad esempio al superamento di un certo livello di prezzo (cosa che con fatica sono riuscito a fare e funziona benissimo), mentre per le uscite si deve aspettare il completamento della candela per capire se si sono effettivamente verificate le condizioni di uscita ?
ma se io vado sulla piattaforma PRT ed inserisco un ordine manualmente impostando anche sin da subito il livello dal quale far scattare il trail (senza quindi passare da ProOrder o da altri automatismi), l’ordine di vendita mi scatterà immediatamente al verificarsi della condizione oppure si dovrà anche in questo caso aspettare il completamento della candela in corso ?
non vorrei essere io ad aver compreso male alcuni aspetti e ad aver conseguentemente programmato male il codice chiedendo al sistema di fare cose non possibili.
ho cercato, seguendo i tuoi consigli, di snellire al massimo la gestione delle posizioni aperte ed adesso gli step sono solo due e proprio il secondo è stato ulteriormente semplificato.
primo step righe 50 e 51: al raggiungimento della metà del target iniziale lo stop loss viene spostato al mio tradeprice (e funziona benissimo)
secondo step righe 53 e 54: al raggiungimento del 80% del target iniziale faccio partire subito direttamente il trailing, assegnando come punto di partenza il nuovo stop loss (ovvero il mio trade price, ovvero il 50% del target iniziale che è già stato raggiunto). Per questo secondo step attendo un tuo riscontro…
pensavo che almeno queste due condizioni cosi “banali” (anche se non c’è mai nulla di banale) potessero essere gestite molto più agilmente.
arrivati a questo punto vado a leggere il discorso del MTF per cercare di dire al sistema che, dopo aver spostato lo stop loss dal mio trade price al 50% del target, deve spostarsi sulle candele ad 1 minuto ed alla prima chiusura sotto il trailing deve chiudere la posizione aperta.
è corretto questo mio approccio al problema ?
Ti ringrazio tanto, come sempre.
E’ difficile capire se il tuo codice funziona bene, o meno. Dovrei mettermi a verificarlo operazione per operazione e non posso farlo. Segnalami tu lo strumento, il TF e l’ora in cui ti sembra ci sia qualcosa di errato ed io poi lo verifico.
Il discorso della candela NON è un errore, è così, punto. Nel senso che l’esecuzione avviene alla chiusura di ogni candela, non prima.
Nel tuo caso, alla riga 59 l’uscita sarà esattamente a quel prezzo (a parte l’evantuale slippage) perché alla chiusura della precedente candela hai piazzato quell’ordine pendente di STOP.
Ma la variabile BREAKEVEN per essere settata correttamente occorre attendere che un certo prezzo sia stato raggiunto alla chiusura, se hai usato CLOSE è necessario che sia CLOSE >= a quel prezzo, quindi anche se il prezzo è stato toccato ma è tornato indietro BREAKEVEN viene ignorato fino alla candela successiva, se hai usato HIGH, invece, anche se CLOSE è tornato indietro BREAKEVEN verrà settato correttamene. Con HIGH il comportamento è più simile (non uguale, perché ci sarà sempre un ritardo) al comportamento manuale.
L’utilizzo di MTF, come hai correttamente scritto, ti permette di verificare su un TF inferiore queste cose, per cui, anche se sulla candela ad un minuto la strategia viene eseguita sempre alla chiusura, è difficile (ma non impossibile!) che il prezzo venga toccato senza che BREAKEVEN sia settato.
ciao,
il sistema adesso dovrebbe funzionare bene perché sono io che, giustamente, sto controllando operazione per operazione e sto rilevando delle anomalie sempre simili che mi portano a pensare che tutto sia ok ma che ci sia sempre questo necessario slittamento alla candela successiva per concludere i ragionamenti…
utilizzando come esempio significativo il cambio EURUSD con tf Daily, prova per favore a vedere l’operazione del 6 giugno 2013. Te la chiude il giorno successivo (sbagliando) o la chiude il giorno stesso quando il prezzo torna indietro rispetto al suo massimo di giornata ?
secondo me il sistema non si accorge che in data 6 giugno 2013 dopo aver raggiunto il massimo di giornata il prezzo sta tornando indietro oltre il valore di trailing. All’apertura del 7 giugno il sistema però capisce immediatamente che il valore di tale apertura di candela (essendo sotto il valore di trailing precedentemente settato) ha fatto scattare lo stop e chiude subito l’operazione vendendo ad 1 pip in meno dell’apertura (che dovrebbe essere lo spread bid/ask). Peccato però che avrebbe dovuto chiudere l’operazione il giorno prima con tanti bei pips di guadagno in più 🙁
Potresti solo confermarmi che anche tu vedi (e interpreti) ciò che vedo io ?
GRAZIE !!
hai ragione sul discorso BREAKEVEN-CLOSE-HIGH, infatti io nel mio sistema utilizzo sempre “High – Tradeprice” proprio per seguire il tuo suggerimento e fare in modo che appena il prezzo raggiunge un determinato valore (senza aspettare la chiusura) venga immediatamente spostato il trailing.
E fin qui penso che stia funzionando bene.
Il vero problema però è che questo trailing spostato tempestivamente viene “verificato” dal sistema non immediatamente tick by tick come avviene per lo spostamento del trailing, ma soltanto a candela chiusa e se l’apertura della successiva è sotto il valore del trailing allora e solo in quel momento si procederà alla chiusura dell’operazione. Corretto ? (spero di sbagliarmi perché vorrebbe dire che magari c’è una soluzione ma ho paura che sia proprio che ho detto).
Sto leggendo delle cose sul MTF e spero di trovare lì una soluzione…
Grazie mille.
Io ho fatto il test con il codice di cui sopra e mi segnala cose strane, forse mancano delle aggiunte/variazioni. Breakeven ha un valore maggiore a 30!!!
Posta il codice aggiornato.
Richiesta aiuto per settaggio TARGET PROFIT
This topic contains 116 replies,
has 2 voices, and was last updated by
robertogozzi
6 years, 9 months ago.
| Forum: | ProOrder: Trading Automatico & Backtesting |
| Language: | Italian |
| Started: | 02/15/2019 |
| Status: | Active |
| Attachments: | 26 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.