Monte Carlo Verifica la funzione
5 risposte
huangwh88
5 anni fa #270606
Nella documentazione qui https://strategyquant.com/doc/quantanalyzer/predict-verify-strategy-performance-using-monte-carlo-simulation/Si dice che la funzione verify dovrebbe confrontare la performance live della strategia con l'intervallo previsto dal MC.
Ma è possibile importare i risultati reali dal vivo e confrontarli con le previsioni MC? Al momento sembra che i dati vengano suddivisi in parti IS e OOS e che i risultati OOS vengano confrontati con le previsioni MC ottenute con i risultati IS.
0
tomas262
5 anni fa #270622
Ciao,
Sì, è possibile utilizzare la previsione MC e applicarla ai risultati del trading in tempo reale. È sufficiente caricare i risultati e impostare i dati "Verifica - data" sulla data a partire dalla quale si desidera avviare la simulazione della previsione. Nell'esempio allegato sono stati caricati i risultati dall'1.1.2021 al 24.5.2021. La previsione è impostata per iniziare dall'1.3.2021, in modo da poter confrontare i risultati del trading con i limiti della simulazione MC.
0
Massimo Scapini
3 anni fa #280024
Sì,
ma in questo modo credo che i dati in tempo reale prima del 1° marzo 2021 vengano utilizzati per simulare i dati successivi, il che non è quello che si vuole...
Preferirei caricare due serie diverse: la prima di dati simulati per il passato, la seconda di dati reali (come nella sezione "Confronta i dati") e poi usare la prima serie di dati per simulare la seconda.
È possibile risolvere questo problema caricando i dati simulati passati e i dati in tempo reale in un unico file? Se sì, quale formato si potrebbe utilizzare?
Inoltre, come posso modificare il numero di operazioni utilizzate per la funzione "Previsione"?
0
Massimo Scapini
3 anni fa #280025
Probabilmente ho trovato il modo (forse era proprio quello che hai suggerito ma semplicemente non l'ho capito!):
1. Caricare i dati simulati
2. Caricare i dati in tempo reale
3. Creare un Portfolio unendo 1 e 2
4. Eseguire il MC usando come riferimento la data di inizio del 2.
5. Fatto!
0
Massimo Scapini
3 anni fa #280041
In linea di principio funziona...
... ma purtroppo con MT4 la visualizzazione dei risultati è piuttosto fuorviante perché tutte le transazioni contenute nel report di MT4 vengono conteggiate come operazioni, almeno nel grafico (non so se anche nella simulazione).
Vedi allegato
Per risolvere questo problema, è necessario pulire manualmente il report MT4 prima di caricarlo in QA. Piuttosto fastidioso
0
commerciante
4 mesi fa #293111
Ho superato questo problema programmando un filtro per impostare la data fino al momento in cui il MC deve utilizzare i dati. È sufficiente inserire la data nel formato aaaammgg e utilizzare la stessa data nella funzione di verifica.
---------
pacchetto com.strategyquant.extend.MonteCarloMethods;
importare com.strategyquant.lib.results.SQOrder;
importare com.strategyquant.lib.results.SQOrderList;
import com.strategyquant.lib.snippets.MonteCarloSim.MonteCarloMethod;
importare java.util.Calendar;
public class DateFilter extends MonteCarloMethod {
public DateFilter() {
setName(“FilterByDate”);
// Datum im Format YYYYMMDD (z.B. 20231231 für 31.12.2023)
addIntParameter(“_STOP_DATE_”, “Nur Trades bis Datum (YYYMMDD)”, 20231231, 19000101, 21001231, 1);
setFormatedName(“Filtro: Operazioni bis _STOP_DATE_”);
}
@Override
public void compute(SQOrderList originalOrders) throws Exception {
int stopDate = getIntParameterValue(“_STOP_DATE_”);
SQOrderList filteredOrders = new SQOrderList();
for(int i = 0; i < originalOrders.size(); i++) {
SQOrder order = originalOrders.get(i);
// Umrechnung der CloseTime (Long/Timestamp) in YYYYMMDD
Calendario cal = Calendar.getInstance();
cal.setTimeInMillis(order.CloseTime);
int orderDate = (cal.get(Calendar.YEAR) * 10000)
+ ((cal.get(Calendar.MONTH) + 1) * 100)
+ cal.get(Calendar.DAY_OF_MONTH);
// Nur Trades hinzufügen, die am oder vor dem Stichtag liegen
se(orderDate <= stopDate) {
filteredOrders.add(order.clone());
}
}
// L'Originalliste sarà completata da una lista di dati corretti.
originalOrders.clear();
for(int j = 0; j < filteredOrders.size(); j++) {
originalOrders.add(filteredOrders.get(j).clone());
}
// Opzionale: Se la sequenza dei metodi MC è uguale a quella dei metodi MC precedenti
// java.util.
Collections.shuffle(originalOrders);
}
}
0
Stai visualizzando 5 risposte - da 1 a 5 (di 5 totali)