Advertisement
Maurizio-Ciullo

Study Funzione In-Sample Out-Sample QTA

Jun 23rd, 2023
1,072
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.                
  2.                         // Study Funzione In-Sample Out-Sample QTA //
  3.                         // Creare Uno Study //
  4.  
  5. // Vedi Screenshot In Cartella ...
  6.  
  7. // Attivare il commentary su tradestaton: View / Application Toolbars / Customize / Toolbars E attivare Charting-Tools-Classic
  8. // Andare su toobars-options "vicino a settings" Chart Analysys Toolbars / "cercare Analysys Commentari e attivarlo"
  9.  
  10.  
  11. {Funzionalità
  12. Questo codice è progettato per facilitare la fase di backtest e ottimizzazione utilizzando in-sample(IS) e out-of-sample (OOS).
  13.  
  14. 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.
  15.  
  16. 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.
  17.  
  18. 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.
  19.  
  20. 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.
  21. 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.}
  22.  
  23.  
  24. {Parametri
  25. 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.
  26. “inSampleCount” rappresenta il numero di parti in cui viene suddiviso il campione inSample.
  27. 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%).}
  28.  
  29.  
  30. {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}
  31.  
  32.  
  33. {Ci verrà restituito un codice sorgente che andrà applicato in fase di test della nostra strategia (RIMUOVERE PER PRODUZIONE!):
  34. – Il primo pezzo (HEADER) va inserito prima di tutto il codice della strategia (all’inizio del file)
  35. – Il secondo pezzo (FOOTER) va inserito alla fine di tutto il codice della strategia (in fondo al file)}
  36.  
  37.  
  38. {Una volta compilata la mia strategia troverò 2 nuovi parametri:
  39. – IsSampleOutOfSampleActive:
  40. 0: Disattivata la funzionalità
  41. 1: Attiva la funzionalità
  42. – DisplayMode:
  43. 0: Visualizzo il backtest/ottimizzazione solo per l’IS
  44. 1: Visualizzo il backtest/ottimizzazione solo per l’OOS
  45. 2: Visualizzo il backtest/ottimizzazione per tutta l’intera serie storica}
  46.  
  47.  
  48.  
  49.  
  50. Inputs: inSamplePerc(70), inSampleCount(2);
  51. Vars: FirstDate(0), LastDate(0), DiffDates(0), CutOffDate(0),
  52.       ISLength(0), OOSLength(0), StartDate(0), EndDate(0), idx(0),
  53.       conditionsStrIn(""), conditionsStrOut("");
  54.  
  55. If CurrentBar = 1 Then Begin
  56.    FirstDate = JulianToDate(DateToJulian(Date));
  57. End;
  58.  
  59. if LastBarOnChart then begin
  60.    LastDate = JulianToDate(DateToJulian(Date));
  61.    DiffDates = LastDate - FirstDate;
  62.    ISLength = Round(DiffDates * ((inSamplePerc / inSampleCount) / 100), 0); // Calcola la lunghezza delle parti IS
  63.    OOSLength = Round(DiffDates * (((100 - inSamplePerc) / inSampleCount) / 100), 0); // Calcola la lunghezza delle parti OOS
  64.  
  65.    StartDate = FirstDate;
  66.    for idx = 1 to inSampleCount Begin
  67.       EndDate = StartDate + ISLength;
  68.      
  69.       if idx > 1 then conditionsStrIn = conditionsStrIn + " or ";
  70.       conditionsStrIn = conditionsStrIn + "(Date >= " + NumToStr(StartDate,0) + " and Date <= " + NumToStr(EndDate,0) + ")";
  71.      
  72.       StartDate = EndDate + 1; // Inizia la parte OOS
  73.  
  74.       EndDate = StartDate + OOSLength;
  75.      
  76.       if conditionsStrOut <> "" then conditionsStrOut = conditionsStrOut + " or ";
  77.       conditionsStrOut = conditionsStrOut + "(Date > " + NumToStr(StartDate,0) + " and Date <= " + NumToStr(EndDate,0) + ")";
  78.  
  79.       StartDate = EndDate + 1; // Inizia la prossima parte IS
  80.    end;
  81.  
  82.     Commentary("<br><font color='green'><b>{---------------- HEADER INIZIO: DA ELIMINARE ----------------}</b></font><br>",
  83.     "<font color='black'>Inputs: isSampleOutOfSampleActive(0), displayMode(1);</font><br>",
  84.     "<font color='black'>if isSampleOutOfSampleActive = 0 or (</font><br>",
  85.     "<font color='black'>((displayMode = 1 or displayMode = 3) and isSampleOutOfSampleActive = 1 and (", conditionsStrIn ," or marketposition <> 0)) or </font><br>",
  86.     "<font color='black'>((displayMode = 2 or displayMode = 3) and isSampleOutOfSampleActive = 1 and (", conditionsStrOut ," or marketposition <> 0))) then begin</font><br>",
  87.     "<font color='green'><b>{---------------- HEADER FINE: DA ELIMINARE ----------------}</b></font><br><br><br>",
  88.     "<font color='green'><b>{---------------- FOOTER INIZIO: DA ELIMINARE ----------------}</b></font><br>",
  89.     "<font color='black'>end;</font><br>",
  90.     "<font color='green'><b>{---------------- FOOTER FINE: DA ELIMINARE ----------------}</b></font>");
  91. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement