Massimi e minimi specifici
Forums › ProRealTime forum Italiano › Supporto ProOrder › Massimi e minimi specifici
- This topic has 12 replies, 2 voices, and was last updated 5 years ago by R05.
-
-
11/27/2019 at 4:13 PM #113743
Gent.mi, nell’implementare la strategia tortle soup, vorrei prendere in considerazione un precedente minimo e massimo ad esempio a 20 periodi ma che sia esso stesso un massimo ad esempio a 10 candele (cioè una volta considerato il massimo precedente a 20 periodi questo deve essere il massimo delle sue 10 sue candele precedenti). Vi allego un esempio (file esempio).
Di seguito anche un trading system che ho scritto il quale però, come si vede nell’esempio 2, mi prende tutti i max e min precedenti a 20 periodi senza tener conto se questi a loro volta siano dei max o min a ulteriori 10 periodi.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061DEFPARAM CumulateOrders = Falsen = 1// Condizioni per aprire una posizione longc1 = low < lowest[20](low)[1]ctime = time > 060000 and time < 220000IF c1 AND ctime THENBUY n CONTRACT AT lowest[20](low)[1] + 1 stopENDIF// Condizioni per uscire da una posizione longc2 = low < lowest[5](low)[1]IF c2 THENsell AT MARKETENDIF// Condizioni per aprire una posizione shortc1 = high > highest[20](high)[1]ctime = time > 060000 and time < 220000IF c1 AND ctime THENSELLSHORT n CONTRACT AT highest[20](high)[1] - 1 stopENDIF// Condizioni per uscire da una posizione di venditac3 = high > highest[5](high)[1]IF c3 THENexitshort AT MARKETENDIF// Stop e targetIF close > open THEN //LONGMinLow = lowStopLoss = low - 2 //2 pips sotto il minimoELSE //SHORTMaxHigh = highStopLoss = high + 2 //2 pips sopra il massimoENDIFSET STOP PLOSS StopLossIF LongOnMarket THEN //per i LONGIF low > MinLow THEN //verificare che sia un MINIMO più altoMinLow = Low //aggiornare la variabileENDIFSELL AT MinLow - 2 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 + 2 STOP //aggiornare l'ordine di STOP ad ogni candelaENDIF11/27/2019 at 4:54 PM #113750Devi mettere, dopo la riga 6 e la riga 22 un ciclo FOR…NEXT che vada indietro a vedere se prima di quel minimo/massimo ce n’erano altri.
11/27/2019 at 5:07 PM #113752Puoi sostituire la riga 6 con queste:
123456789101112Minimo = lowest[20](low)[1]c1 = low < MinimoFOR i = 1 TO 20IF low[i] = Minimo THENFOR j = i + 1 TO i + 11IF Minimo <= low[j] THENc1 = 0ENDIFNEXTBreakENDIFNEXTe la riga 22 con queste:
123456789101112Massimo = highest[20](high)[1]c1 = high < MassimoFOR i = 1 TO 20IF high[i] = Massimo THENFOR j = i + 1 TO i + 11IF Massimo >= high[j] THENc1 = 0ENDIFNEXTBreakENDIFNEXTnon l’ho provato.
11/27/2019 at 5:28 PM #11375911/27/2019 at 5:43 PM #11376211/27/2019 at 6:02 PM #11376411/28/2019 at 12:46 AM #113787I Massimi/Minimi ad almeno 10 candele di distanza li ha trovati?
11/28/2019 at 8:45 AM #113797Il sistema mi deve trovare il max/min a 20 periodi, e questo è ok. Però, questo max/min deve essere a sua volta il max/min delle 10 candele precedenti, e questo non lo fa: per fare un esempio sul daily: il 10 novembre ho un massimo degli ultimi 20 giorni ad esempio sul dax 13150 punti, prima condizione; poi, prima del 10 novembre per 10 giorni nessun massimo deve essere superiore ai 13150: allora le due condizioni sono rispettate. Se ad esempio il 5 novembre avessi avuto un massimo pari a 13160 superiore a quello del 10 novembre, la condizione non sarebbe più rispettata, quindi non si fa nulla.
11/28/2019 at 10:58 AM #113821C’è un errore logico nei due esempi miei, la riga 6 del primo sostituiscila con:
1IF low[j] <= Minimo THENe la riga 6 del secondo sostituiscila con:
1IF high[j] >= Massimo THENprova adesso.
11/28/2019 at 12:22 PM #113831No Roberto ancora non fa quello che vorrei. Comunque dato che non capisco la logica che c’è dietro il codice “for …..next” ho provato a fare questo trading system, togliendo il lato long e concentrandomi solo sullo short, se non altro perchè è più facile lavorarci su.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950DEFPARAM CumulateOrders = Falsen = 1// Condizioni per aprire una posizione shortctime = time > 060000 and time < 220000a=highest[20]if high>a thenif a>high[21] and a>high[22] and a>high[23] and a>high[24] and a>high[25] and a>high[26] thenif ctime thenSELLSHORT n CONTRACT AT marketENDIFendifendif// Condizioni per uscire da una posizione di venditac4 = high > highest[5](high)[1]IF c4 THENexitshort AT MARKETENDIF// Stop e targetIF close > open THEN //LONGMinLow = lowStopLoss = low - 2 //2 pips sotto il minimoELSE //SHORTMaxHigh = highStopLoss = high + 2 //2 pips sopra il massimoENDIFSET STOP PLOSS StopLossIF LongOnMarket THEN //per i LONGIF low > MinLow THEN //verificare che sia un MINIMO più altoMinLow = Low //aggiornare la variabileENDIFSELL AT MinLow - 2 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 + 2 STOP //aggiornare l'ordine di STOP ad ogni candelaENDIFHo aggiunto questa stringa
123456789a=highest[20]if high>a thenif a>high[21] and a>high[22] and a>high[23] and a>high[24] and a>high[25] and a>high[26] thenif ctime thenSELLSHORT n CONTRACT AT marketENDIFendifendifLa logica che ho usato è questa:
- ammettiamo che a sia il massimo degli ultimi periodi
- se a (che può essere la candela 12 o la 15 o la 17 ecc.) è > del massimo della candela di 21 periodi fa, e anche del massimo delle candele di 22, 23, 24, 25 e 26 periodi fa allora è praticamente ok
- se high attuale è quindi maggiore di a (che ha rispettato a questo punto le due condizioni cioè essere il massimo a 20 periodi e anche lui stesso il massimo di altri periodi precedenti) allora mi apri lo short
Ora, sembrerebbe che sia riuscito a risolvere il problema, a prima vista, però sono sopraggiunti due problemi che allego:
- nell’esempio 1, ma vale per tutti gli ingressi, l’entrata avviene 2 candele dopo il massimo attuale
- nell’esempio 2, onestamente non so cosa abbia fatto, perchè le entrate sono completamente sballate
11/28/2019 at 12:39 PM #113837Io ho provato sui MINIMI (tanto sul massimo è lo stesso, basta cambiare certi valori) con questo indicatore e funziona:
1234567891011121314151617Minimo = lowest[20](low)[1]c1 = low < MinimoFOR i = 1 TO 20IF low[i] = Minimo THENFOR j = i + 1 TO i + 11IF low[j] <= Minimo THENc1 = 0ENDIFNEXTBreakENDIFNEXTIF c1 > 0 THENDRAWSEGMENT(barindex - 30,Minimo,barindex,Minimo)DRAWARROWUP(barindex[i],Minimo - 10 * pipsize) coloured(0,255,0,255)ENDIFRETURNIl tuo codice può anche funzionare, ma è un caso, non puoi sapere in quale candela “a” è il massimo.
L’unica cosa è il ciclo FOR…NEXT. La logica che c’è dietro mi sembra intuitiva, ripete tutte le istruzioni che ci sono tra la riga FOR e la riga NEXT per il numero di volte specificato, ad esempio 1 TO 20 ripete 20 volte tutte quelle istruzioni, anche 17 TO 36 le ripete 20 volte, il numero di partenza lo decidi tu in base alle tue esigenze. Se devi cercare tra 20 candele partendo dalla candela precedente 1 TO 20 è quello che devi usare, se vuoi cercare indietro, ad esempio 20 candele indietro partendo dalla 17 allora devi usare 17 TO 36. La variabile “i” è il contatore che, partendo dal valore iniziale, ti dice in quale punto del ciclo sei e viene automaticamente incrementato finché non raggiunge il massimo da te indicato. Quindi usandolo come indice tra parentesi quadre ti permette di fare riferimento ad un valore di quella specifica candela, se i vale 13, CLOSE[i] farà riferimento al prezzo di chiusuyra della 13esima candela precedente a quella corrente.
11/28/2019 at 4:46 PM #11386011/28/2019 at 4:59 PM #113862No scusa Roberto ho rimesso il tuo codice precedente nel seguente trading system e sembra ok. Ora faccio altre prove e ti dico. Ho sicuramente sbagliato io, perchè mi sono accorto che avevo invertito, cioè la parte col minimo l’ho messo in sellshort e non in long e viceversa.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273DEFPARAM CumulateOrders = Falsen = 1// Condizioni per aprire una posizione longctime = time > 060000 and time < 220000Minimo = lowest[20](low)[1]c1 = low < MinimoFOR i = 1 TO 20IF low[i] = Minimo THENFOR j = i + 1 TO i + 11IF low[j] <= Minimo THENc1 = 0ENDIFNEXTBreakENDIFNEXTIF c1 AND ctime THENbuy n CONTRACT AT marketENDIF// Condizioni per aprire una posizione lshortctime = time > 060000 and time < 220000Massimo = highest[20](high)[1]c2 = high < MassimoFOR i = 1 TO 20IF high[i] = Massimo THENFOR j = i + 1 TO i + 11IF high[j] <= Massimo THENc2 = 0ENDIFNEXTBreakENDIFNEXTIF c2 AND ctime THENsellshort n CONTRACT AT marketENDIF// Stop e targetIF close > open THEN //LONGMinLow = lowStopLoss = low - 2 //2 pips sotto il minimoELSE //SHORTMaxHigh = highStopLoss = high + 2 //2 pips sopra il massimoENDIFSET STOP PLOSS StopLossIF LongOnMarket THEN //per i LONGIF low > MinLow THEN //verificare che sia un MINIMO più altoMinLow = Low //aggiornare la variabileENDIFSELL AT MinLow - 2 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 + 2 STOP //aggiornare l'ordine di STOP ad ogni candelaENDIFOra provo un altro pò.
-
AuthorPosts
Find exclusive trading pro-tools on