Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Study Funzione In-Sample Out-Sample QTA //
- // Creare Uno Study //
- // Vedi Screenshot In Cartella ...
- // Attivare il commentary su tradestaton: View / Application Toolbars / Customize / Toolbars E attivare Charting-Tools-Classic
- // Andare su toobars-options "vicino a settings" Chart Analysys Toolbars / "cercare Analysys Commentari e attivarlo"
- {Funzionalità
- Questo codice è progettato per facilitare la fase di backtest e ottimizzazione utilizzando in-sample(IS) e out-of-sample (OOS).
- I termini “in-sample” (IS) e “out-of-sample” (OOS) si riferiscono alla suddivisione dei dati storici per l’analisi e la valutazione dei modelli o delle strategie di trading.
- In-sample si riferisce a una porzione dei dati storici che viene utilizzata per la costruzione, l’ottimizzazione e la verifica di un modello o di una strategia di trading. Questi dati sono quelli su cui il modello o la strategia vengono testati e adattati per cercare di ottenere i migliori risultati possibili.
- Out-of-sample, d’altra parte, si riferisce a una porzione separata dei dati storici che viene utilizzata per valutare l’efficacia e la robustezza del modello o della strategia sviluppata. Questi dati non sono stati utilizzati durante la fase di costruzione o ottimizzazione del modello, ma vengono invece utilizzati per valutare come il modello o la strategia si comportano su dati “nuovi” o non ancora visti.
- L’utilizzo di dati in-sample e out-of-sample è un’importante pratica nella validazione del trading system perché ci consente di valutare l’efficacia di un modello o di una strategia su dati che non sono stati utilizzati per adattarli o ottimizzarli.
- Ciò aiuta a identificare se il modello o la strategia sono validi e generalizzabili su dati futuri o se hanno semplicemente adattato troppo i dati storici (overfitting), perdendo così la capacità di adattarsi a situazioni di mercato diverse.}
- {Parametri
- La percentuale di dati inSample viene specificata con l’input “inSamplePerc”. Ad esempio, se “inSamplePerc” è impostato al 70%, significa che il 70% dei dati disponibili verrà utilizzato come campione iniziale per l’analisi IS.
- “inSampleCount” rappresenta il numero di parti in cui viene suddiviso il campione inSample.
- Ad esempio, se “inSampleCount” è impostato a 2, il campione inSample sarà diviso in due parti di uguale lunghezza. (se è 70% significa che verranno prese due parti di In-sample da 35% ciascuna e l’out-of-sample di riflesso sarà del 30% (due parti da 15%).}
- {Per vedere il codice generato si può andare su Expert Commentary in Multicharts (menu view -> Expert Commentary) e poi cliccare sull’ultima barra del grafico}
- {Ci verrà restituito un codice sorgente che andrà applicato in fase di test della nostra strategia (RIMUOVERE PER PRODUZIONE!):
- – Il primo pezzo (HEADER) va inserito prima di tutto il codice della strategia (all’inizio del file)
- – Il secondo pezzo (FOOTER) va inserito alla fine di tutto il codice della strategia (in fondo al file)}
- {Una volta compilata la mia strategia troverò 2 nuovi parametri:
- – IsSampleOutOfSampleActive:
- 0: Disattivata la funzionalità
- 1: Attiva la funzionalità
- – DisplayMode:
- 0: Visualizzo il backtest/ottimizzazione solo per l’IS
- 1: Visualizzo il backtest/ottimizzazione solo per l’OOS
- 2: Visualizzo il backtest/ottimizzazione per tutta l’intera serie storica}
- Inputs: inSamplePerc(70), inSampleCount(2);
- Vars: FirstDate(0), LastDate(0), DiffDates(0), CutOffDate(0),
- ISLength(0), OOSLength(0), StartDate(0), EndDate(0), idx(0),
- conditionsStrIn(""), conditionsStrOut("");
- If CurrentBar = 1 Then Begin
- FirstDate = JulianToDate(DateToJulian(Date));
- End;
- if LastBarOnChart then begin
- LastDate = JulianToDate(DateToJulian(Date));
- DiffDates = LastDate - FirstDate;
- ISLength = Round(DiffDates * ((inSamplePerc / inSampleCount) / 100), 0); // Calcola la lunghezza delle parti IS
- OOSLength = Round(DiffDates * (((100 - inSamplePerc) / inSampleCount) / 100), 0); // Calcola la lunghezza delle parti OOS
- StartDate = FirstDate;
- for idx = 1 to inSampleCount Begin
- EndDate = StartDate + ISLength;
- if idx > 1 then conditionsStrIn = conditionsStrIn + " or ";
- conditionsStrIn = conditionsStrIn + "(Date >= " + NumToStr(StartDate,0) + " and Date <= " + NumToStr(EndDate,0) + ")";
- StartDate = EndDate + 1; // Inizia la parte OOS
- EndDate = StartDate + OOSLength;
- if conditionsStrOut <> "" then conditionsStrOut = conditionsStrOut + " or ";
- conditionsStrOut = conditionsStrOut + "(Date > " + NumToStr(StartDate,0) + " and Date <= " + NumToStr(EndDate,0) + ")";
- StartDate = EndDate + 1; // Inizia la prossima parte IS
- end;
- Commentary("<br><font color='green'><b>{---------------- HEADER INIZIO: DA ELIMINARE ----------------}</b></font><br>",
- "<font color='black'>Inputs: isSampleOutOfSampleActive(0), displayMode(1);</font><br>",
- "<font color='black'>if isSampleOutOfSampleActive = 0 or (</font><br>",
- "<font color='black'>((displayMode = 1 or displayMode = 3) and isSampleOutOfSampleActive = 1 and (", conditionsStrIn ," or marketposition <> 0)) or </font><br>",
- "<font color='black'>((displayMode = 2 or displayMode = 3) and isSampleOutOfSampleActive = 1 and (", conditionsStrOut ," or marketposition <> 0))) then begin</font><br>",
- "<font color='green'><b>{---------------- HEADER FINE: DA ELIMINARE ----------------}</b></font><br><br><br>",
- "<font color='green'><b>{---------------- FOOTER INIZIO: DA ELIMINARE ----------------}</b></font><br>",
- "<font color='black'>end;</font><br>",
- "<font color='green'><b>{---------------- FOOTER FINE: DA ELIMINARE ----------------}</b></font>");
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement