Pattern di Gramza
Forums › ProRealTime forum Italiano › Supporto ProOrder › Pattern di Gramza
- This topic has 53 replies, 5 voices, and was last updated 6 years ago by volpiemanuele.
-
-
08/21/2017 at 4:34 PM #44312
Salve a tutti vi scrivo per chiedervi, gentilmente, aiuto per cercare di completare il seguente pattern che dovrebbe riproporre quello di Gramza. Mi servono due informazioni:
- Come impostare lo stop loss qualche punto sotto il minimo/sopra il massimo della candela subito precedente a quella di entrata in posizione
- Come impostare il trailing stop qualche punto sotto il minimo/sopra il massimo della candela successiva man mano che il trade guadagna
Es.: time frame 15 minuti: entro in posizione long alle 9:15 e lo stop è qualche punto sotto il minimo della candela delle 9:00. Incomincio a guadagnare e alle 9:30 lo stop si dovrà spostare qualche punto sotto il minimo della candela delle 9:15 e così via.
Grazie a chiunque mi aiuterà.
defparam flatbefore = 080000
defparam flatafter = 173000
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
Hammer = (Close<Open AND (Open-Low) >= 2*(Open-Close))
Hammer2 = (Close>Open AND (high-open) >= 2*(Close-Open))
ShootingStar = (close>open and (high-close)>=2*(close-open))
ShootingStar2 = (close<open and (close-low)>=2*(open-close))
Candelarossa = (open>close)
Candelaverde = (open<close)
s = high
t = high[1]
z = high[2]
stoploss = (close CROSSES UNDER low[1])
// Condizioni per entrare su posizioni long
IF NOT longOnMarket and s<t and t<z and (hammer or hammer2 or ShootingStar or ShootingStar2 or candelaverde) THEN
buy 1 CONTRACTS at high+1 stop
ENDIF
s = low
t = low[1]
z = low[2]
stoploss = (close CROSSES over high[1])
// Condizioni per entrare su posizioni short
IF NOT shortOnMarket and s>t and t>z and (hammer or hammer2 or ShootingStar or ShootingStar2 or candelarossa) THEN
sellshort 1 CONTRACTS at low-1 stop
ENDIF
// Stop e target
set stop ploss stoploss
SET TARGET pPROFIT 10
08/23/2017 at 2:35 PM #4445008/23/2017 at 3:42 PM #44476Per settare lo STOP LOSS iniziale:
12345678910IF close > open THEN //LONGMinLow = lowStopLoss = ((close - low) / pipsize) + 2 //2 pips sotto il minimoELSE //SHORTMaxHigh = highStopLoss = ((high - close) / pipsize) + 2 //2 pips sopra il massimoENDIF..SET STOP PLOSS StopLossPer il TRAILING STOP, basta confrontare il minimo/massimo di ogni barra con le variabili (di cui sopra) ed eventualmente aggiornarle ed inserire l’ordine di STOP con il nuovo valore:
123456789101112IF LongOnMarket THEN //per i LONGIF low > MinLow THEN //verificare che sia un MINIMO più altoMinLow = Low //aggiornare la variabileENDIFSELL AT MinLow STOP //aggiornare l'ordine di STOP ad ogni candelaENDIFIF ShortOnMarket THEN //per gli SHORTIF high < MaxHigh THEN //verificare che sia un MASSIMO più bassoMaxHigh = high //aggiornare la variabileENDIFEXITSHORT AT MaxHigh STOP //aggiornare l'ordine di STOP ad ogni candelaENDIFNon l’ho verificato, devi testarlo tu.
Gli ordini LIMIT e STOP (non quelli a mercato) vengono annullati automaticamente da ProOrder alla chiusura di ciascuna candela, in questo caso ogni 15 minuti, quindi vanno reinseriti di nuovo ad ogni candela, anche se non è stato fatto un nuovo massimo/minimo, questo per il trailing. Resta, invece, sempre valido l’rdine di STOP indicato inizialmente all’apertura dell’operazione.
Per la tua riga di codice
1stoploss = (close CROSSES over high[1])non va bene, in quanto mette nella variabile “stoploss” un valore logico (0 oppure 1), in quanto gli assegna il valore vero/falso del fatto che CLOSE abbia un incrocio rialzista col MASSIMO precedente.
Inoltre, sew ho ben capito cosa intendi per massimi/minimi precedenti, tu intendi quelli che precedono la candela d’entrata. Non c’è bisogno di mettere low [1] o high[1] o close[1], in quanto ogni strategia viene eseguita alla chiusura della candela (che quindi è quella corrente, non la precedente), ad esempio all 09:00 viene eseguita la tua strategia sul 15 minuti e le condizioni vengono testate sulla candela aperta alle 08:45:00, la precedente è quella delle 08:30:00. Il trade, se deve essere aperto, viene aperto SEMPRE all’apetrtura della candella a quella appena chiusa, quindi nell’esempio di cui sopra alle 09:00:00. E’ un pochino complicato all’inizio capire alcuni meccanismi di ProOrder.
Riepilogando: alle 09:00:00 viene eseguita la strategia verificando che le condizioni siano soddisfatte sulla candela delle 08:45:00 che si è appena chiusa e, in caso affermativo, viene aperta un’operazione Long/Short sulla candele delle 09:00:00 che sta per aprirsi.
08/23/2017 at 3:53 PM #44478Scusami per qualche errore di battitura, in particolare la frase “Il trade, se deve essere aperto, viene aperto SEMPRE all’apetrtura della candella a quella appena chiusa,” va intesa come “”Il trade, se deve essere aperto, viene aperto SEMPRE all’apertura della candela successiva a quella appena chiusa,”.
Roberto
08/23/2017 at 4:14 PM #4448108/23/2017 at 5:35 PM #44483Un’altra gentilezza se possibile. Nel back test c’è la funzione Probacktest in modalità tick per tick che se spuntata mi cambia di molto i risultati del back test stesso.
Non riesco a capire: deve spuntare la casella o devo lasciarla? Non vorrei che penso che una strategia vada bene e invece poi non è buona.
Grazie.
08/23/2017 at 6:28 PM #44488Purtroppo ProOreder, fino a fine 2016, aveva il problema dello Stop Loss e del Take Profit sulla stessa barra.
In pratica quando capitava che nel corso della stessa barra ci fossero sia lo Stop Loss che il Take Profit, ProOrder prendeva per buono il Take Profit, anche se, nella realtà poteva essere successo che fosse stato colpito per primo lo Stop Loss, con ovvii risultati di backtest falsati!
Questo per come era impostata la piattaforma. Dall’1/1/2017 con la nuova versione il problema è stato risolto aggiungendo quella dicitura che tu hai detto, da spuntare o meno.
In realtà sarebbe bene (almeno sui timeframe maggiori) spuntarla sempre perché in tal modo quando capitano sia Stop Loss che Take Profit sulla stessa candela ProOrder la esamina tick per tick per vedere quale dei due viene colpito per primo, in modo da avere backtest affidabili. Questo però rallenta il sistema e quindi il backtest, inoltre tale modalità non può essere usata se il backtest parte da un pò di tempo indietro, ad esempio con il Daily mi pare si possano testare in quel modo solo gli ultimi 2-3 anni, non di più, per altri timeframe meno ancora.
Quindi il backtest, senza quella spunta, è meno affidabile, a meno che tu non operi su timeframe brevi, forse dal 15 minuti in giù, non saprei, prova a fare i test con e senza la spunta, se il risultato non cambia significa che quel problema non c’è.
Nelle prime fasi di scrittura di una strategia si può omettere la spunta per velocizzare il backtest, per poi aggiungerla nelle fasi finali.
08/24/2017 at 2:13 PM #44549Gent.mo Roberto ho provato a fare le modifiche che mi hai proposto ma purtroppo, per quanto riguarda lo stop, appena entro in posizione viene inserito sul massimo della candela in cui entro (a me servirebbe sul max della candela precedente) e poi quando va in trailing stop mi sposta lo stop subito sul massimo della candela successiva ma in questo modo deve andare per forza nella mia direzione altrimenti con un minimo ritracciamento lo stop viene preso subito.
Sul codice seguente che mi hai proposto, siccome non partiva, ho riportato minlow=minlow e maxhigh=maxhigh, non so però se corretto (anche se mi fa partire il trading system).
IF close > open THEN //LONGMinLow = lowStopLoss = ((close – low) / pipsize) + 2 //2 pips sotto il minimoELSE //SHORTMaxHigh = highStopLoss = ((high – close) / pipsize) + 2 //2 pips sopra il massimoENDIFGrazie per la disponibilità.
08/24/2017 at 2:51 PM #44557L’istruzione
1buy 1 CONTRACTS at high+1 stoppotrebbe non essere MAI eseguita, ad esempio su EurUsd che vale 1.1700 circa, perché aggiungendoci 1 diventa 2.1700 e NON si verificherà per un bel pò, mentre potrebbe andare bene con lo YEN od il DAX, ma è solo un caso. Per essere sicuro che funzioni sempre aggiungendo (o togliendo) 1 pip devi scrivere:
1buy 1 CONTRACTS at (high + (1 * pipsize)) stopè ProOrder che, conoscendo il valore di ogni pip per ciascuno strumento, fa i dovuti aggiustamenti.
Con ancora un pò di tempo a disposizione proverò a fare ulteriori verifiche.
08/24/2017 at 3:18 PM #44564Questo è il tuo codice come io l’ho modificato:
123456789101112131415161718192021222324252627282930313233343536373839404142defparam flatbefore = 080000defparam flatafter = 173000DEFPARAM CumulateOrders = False // Posizioni cumulate disattivateHammer = (Close<Open AND (Open-Low) >= 2*(Open-Close))Hammer2 = (Close>Open AND (high-open) >= 2*(Close-Open))ShootingStar = (close>open and (high-close)>=2*(close-open))ShootingStar2 = (close<open and (close-low)>=2*(open-close))Candelarossa = (open>close)Candelaverde = (open<close)IF close > open THEN //LONGMinLow = lowStopLoss = ((close - low) / pipsize) + 2 //2 pips sotto il minimoELSE //SHORTMaxHigh = highStopLoss = ((high - close) / pipsize) + 2 //2 pips sopra il massimoENDIFs = hight = high[1]z = high[2]// Condizioni per entrare su posizioni longIF s<t and t<z and (hammer or hammer2 or ShootingStar or ShootingStar2 or candelaverde) THENbuy 1 CONTRACTS at (high + (1 * pipsize)) stopENDIFs = lowt = low[1]z = low[2]// Condizioni per entrare su posizioni shortIF s>t and t>z and (hammer or hammer2 or ShootingStar or ShootingStar2 or candelarossa) THENsellshort 1 CONTRACTS at (low - (1 * pipsize)) stopENDIF// Stop e targetset stop ploss stoplossSET TARGET pPROFIT 10//GRAPH StopLoss AS "SL"GRAPH MinLow AS "Min"GRAPH MaxHigh AS "Max"Ho aggiunto i calcoli dello StopLoss, come avevo suggerito, poi ho modificato gli IF long e short perché non serve verificarlo, in quanto con DEFPARAM CumulateOrders gli hai già impedito di eseguire più di un’operazione.
Con le tre istruzioni GRAPH finali (puoi commentarle quando non vuoi usarle) puoi vedere i valori delle variabili.
A me funziona, non m’interessa se profittevole o meno in quanto non sono entrato nel merito della logica. Questo lo devi fare tu.
08/25/2017 at 9:39 AM #4460608/25/2017 at 11:33 AM #44618Avrei anche un’altra richiesta, gentilmente, da fare. Vorrei cercare di sfruttare l’entrata su massimi e minimi tipo “turtle soup”: in pratica se ho un nuovo massimo a 20 periodi dovrei entrare short quando raggiunge il massimo precedente e posizionare lo stop sopra il massimo della candela di entrata in cui si è verificato il nuovo massimo. Allego il codice preso nella libreria a cui ho fatto delle modifiche: riesco ad entrare short sotto il minimo della candela precedente a 20 periodi e viceversa long ma mi mancano le seguenti due condizioni:
- vorrei poter entrare anche durante la stessa barra al raggiungimento del minimo/massimo precedente come al punto 1 e al punto 2 dell’immagine allegata che è di oggi nel caso in cui la condizione si verifichi (so che proorder fa entrare alla barra successiva, ma non c’è un metodo per entrare nella candela al verificarsi della condizione e non entrare solo alla barra successiva?)
- vorrei che lo stop sia sul max giornaliero (o della candela di setup) e la massima perdita deve essere pari a 30 euro altrimenti il trade non parte
Ringrazio sempre della disponibilità.
12345678910111213141516171819202122232425262728293031323334DEFPARAM CumulateOrders = Falsen = 2// Conditions pour ouvrir une position acheteusec1 = close < lowest[20](low)[1]ctime = time > 060000 and time < 220000IF c1 AND ctime THENBUY n CONTRACT AT lowest[20](low)[1] + 1 stopENDIF// Conditions pour fermer une position acheteusec3 = high > highest[5](high)[1]IF c3 THENSELL AT MARKETENDIF// Conditions pour ouvrir une position vendeusec1 = close > highest[20](high)[1]ctime = time > 060000 and time < 220000IF c1 AND ctime THENSELLSHORT n CONTRACT AT highest[20](high)[1] - 1 stopENDIF// Conditions pour fermer une position vendeusec3 = low > lowest[5](low)[1]IF c3 THENEXITSHORT AT MARKETENDIF// Stops et objectifsSET STOP LOSS 60set target pprofit 1008/25/2017 at 2:29 PM #44632No, si può entrare solo subito DOPO la chiusura della barra, all’apertura della successiva. Questo almeno finché non verrà rilasciata una verione, speriamo entro fine anno, che sarà slegata al timeframe.
Ricorda che
1AT lowest[20](low)[1] + 1Può andare bene per il dax o altri indici, o per coppie come UsdJpy, per le altre no, dovresti usare
1AT lowest[20](low)[1] + (1 * pipsize)Il massimo giornaliero, se sei sul daily, è semplicemente dato da
1highche è la chiusura della barra in corso, poi il trade, a condizioni verificate, verrà aperto all’apertura della successiva.
Se usi un TF (TimeFrame) inferiore al giorno puoi anche avere il massimo/minimo giornaliero, sapendo quante candele sono passate, usando
123highest[](max)oppurelowest[](low)Se, ad esempio, sei su un TF ad 1 minuto e sono le 090000 ed il nuovo giorno è iniziato alle 000001, sai che sono trascorse 540 barre (9 ore per 60 barre ogni ora) ed indichi 60 nelle parentesi quadre.
Per la perdita massima, basta che verifichi tu che i PIPS calcolati come Stop Loss non la superino, se sei sul MiniDAX, ad esmpio, dove 1 PIP = 1 Euro, verifica di non avere uno Stop Loss maggiore.
Tieni presente che il broker prevede anche Stop Loss minimi, ad esempio IG chiede almeno 6 pips di Stop Loss per il DAX, quindi se indichi un valore inferiore il trade non viene eseguito, la strategia riceve un errore e ProOrder la termina e dovrai intervenire manualmente per farla ripartire.
08/25/2017 at 2:32 PM #44633Ad ogni modo, sei vuoi cercare dettagli su un’istruzione, thread e post su un particolare tema, puoi usare il box di ricerca che sta sotto il tuo avatar, basta che ci vada sopra col mouse e si apre ed è subito in alto, come puoi vedere dalla foto allegata.
1 user thanked author for this post.
08/25/2017 at 2:35 PM #44635Scusami, ma le righe 1, 2 e 3 precedenti vanno sostituite con
123highest[](high)oppurelowest[](low) -
AuthorPosts
Find exclusive trading pro-tools on