OTTIMIZZAZIONE DELLA MIGLIOR COMBINAZIONE DI CONDIZIONI
Forums › ProRealTime forum Italiano › Supporto ProOrder › OTTIMIZZAZIONE DELLA MIGLIOR COMBINAZIONE DI CONDIZIONI
- This topic has 4 replies, 3 voices, and was last updated 2 months ago by robertogozzi.
-
-
08/24/2024 at 4:08 PM #236683
Buongiorno a tutti, chiedo cortesemente il vostro aiuto.
vorrei ottimizzare una strategia con dei filtri, i filtri in questione in questo esempio sono:
C1,C2,C3,C4,C5,C6,C7,C8
ma in realtà possono essere infiniti, vorrei che l’ottimizzazione mi trovasse il miglior filtro o la migliore combinazione di filtri, qualcuno ha idea di come fare?
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l’orario “Flat Before” non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 170000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all’orario “Flat After”
DEFPARAM FLATAFTER = 220000// Condizioni per entrare su posizioni long
IF C ? THEN
BUY 1 SHARES AT MARKET
ENDIF// Definizione delle condizioni di pattern
C1 = ABS(open[1] – close[1]) < 0.1 * (high[1] – low[1])
C2 = ABS(open[1] – close[1]) < 0.25 * (high[1] – low[1])
C3 = ABS(open[1] – close[1]) < 0.5 * (high[1] – low[1])
C4 = ABS(open[1] – close[1]) < 0.75 * (high[1] – low[1])C5 = ABS(open[1] – close[1]) > 0.25 * (high[1] – low[1])
C6 = ABS(open[1] – close[1]) > 0.5 * (high[1] – low[1])
C7 = ABS(open[1] – close[1]) > 0.75 * (high[1] – low[1])
C8 = ABS(open[1] – close[1]) > 0.9 * (high[1] – low[1])08/24/2024 at 5:41 PM #236688Anche se può funzionare ugualmente, è buona pratica indicare le condizioni PRIMA che siano utilizzate.
Detto questo, puoi provarne una per volta con questo codice, aggiungendo nell’ottimizzatore la variabile Prova, che io ho messo = C1, e che tu poi cambierai con C2, C3, ecc… annotandoti ogni volta il risultato in modo da decidere quale condizione è la migliore (codice1 e Foto1):
1234567891011121314151617181920212223// Definizione dei parametri del codiceDEFPARAM CumulateOrders = False // Posizioni cumulate disattivate// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l’orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.DEFPARAM FLATBEFORE = 170000// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all’orario "Flat After"DEFPARAM FLATAFTER = 220000// Definizione delle condizioni di patternC1 = ABS(open[1] - close[1]) < 0.1 * (high[1] - low[1])C2 = ABS(open[1] - close[1]) < 0.25 * (high[1] - low[1])C3 = ABS(open[1] - close[1]) < 0.5 * (high[1] - low[1])C4 = ABS(open[1] - close[1]) < 0.75 * (high[1] - low[1])C5 = ABS(open[1] - close[1]) > 0.25 * (high[1] - low[1])C6 = ABS(open[1] - close[1]) > 0.5 * (high[1] - low[1])C7 = ABS(open[1] - close[1]) > 0.75 * (high[1] - low[1])C8 = ABS(open[1] - close[1]) > 0.9 * (high[1] - low[1])// Condizioni per entrare su posizioni longProva = C1IF Prova THENBUY 1 SHARES AT MARKETENDIFoppure puoi usare quest’altro codice (codice2, Foto2 e Foto3) che ti permette di ottimizzarle tutte insieme:
12345678910111213141516171819202122// Definizione dei parametri del codiceDEFPARAM CumulateOrders = False // Posizioni cumulate disattivate// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l’orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.DEFPARAM FLATBEFORE = 170000// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all’orario "Flat After"DEFPARAM FLATAFTER = 220000// Definizione delle condizioni di patternC1 = a1 AND (abs(open[1] - close[1]) < 0.1 * (high[1] - low[1]))C2 = a2 AND (abs(open[1] - close[1]) < 0.25 * (high[1] - low[1]))C3 = a3 AND (abs(open[1] - close[1]) < 0.5 * (high[1] - low[1]))C4 = a4 AND (abs(open[1] - close[1]) < 0.75 * (high[1] - low[1]))C5 = a5 AND (abs(open[1] - close[1]) > 0.25 * (high[1] - low[1]))C6 = a6 AND (abs(open[1] - close[1]) > 0.5 * (high[1] - low[1]))C7 = a7 AND (abs(open[1] - close[1]) > 0.75 * (high[1] - low[1]))C8 = a8 AND (abs(open[1] - close[1]) > 0.9 * (high[1] - low[1]))// Condizioni per entrare su posizioni longIF C1 OR C2 OR C3 OR C4 OR C5 OR C6 OR C7 OR C8 THENBUY 1 SHARES AT MARKETENDIFla Foto2, oltre alle variabili da dichiarare, indica le combinazioni possibili (256 in questo caso) su un massimo possibile di 10000. Se supri 10000 tutta quella riga diventa rossa.
La Foto3 evidenzia il risultato dell’ottimizzazione, dove per ciascuna delle 8 variabili usate indica, in ordine di come sono state inserite, qual’è il valore migliore.
08/25/2024 at 10:42 AM #236698Buongiorno Roberto,
innanzitutto ti ringrazio per la risposta esaustiva, sono riuscito a risolvere usando il secondo metodo che hai proposto.
La risposta sarà banale ma non riesco a capire come posso ottimizzarne un solo filtro alla volta invece che tutte le combinazioni possibili, mi spiego meglio:
cosi facendo come hai descritto nel secondo codice il sistema prova tutte le combinazioni possibili (anche usando tutti i filtri assieme)
io invece vorrei che mi dicesse quale è il migliore, poi dargli un valore prefissato (in questo caso 1) e testarlo con altri filtri (mettendo valore 0 e 1)spero di essermi spiegato e ti ringrazio ancora una volta per la tua disponibilità.
08/25/2024 at 2:23 PM #236706vedo che questi sono alcuni patterns di Unger.
Ma perchè per il gruppo 1-4 non scrivi così:
C1 = (abs(open[1] – close[1]) < VARB * (high[1] – low[1]))
dove VARB è variabile che tu imposti da 0.1 a 1.0 con passo 0.5, ad esempio ?
08/25/2024 at 5:41 PM #236710Comunque, nel secondo esempio, puoi indicare il valore fisso 0 per 7 di essi e lasciarne solo uno per volta attivo, da 0 ad 1 con passo di 1.
-
AuthorPosts
Find exclusive trading pro-tools on