SOLO LETTURA

Il forum è ora un archivio di sola lettura.

Per segnalazioni di bug e domande sulla piattaforma → [email protected]

La nostra comunità vive su Discord e YouTube: unisciti a noi!

UNISCITI A NOI SU Discordia YouTube

Monte Carlo Verifica la funzione

5 risposte

huangwh88

Cliente, bbp_participant, comunità, sq-ultimate, 107 risposte.

Visita il profilo

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

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

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.

Allegati:
Dovete essere collegato per visualizzare i file allegati.

0

Massimo Scapini

Abbonato, bbp_partecipante, cliente, comunità, sq-ultimate, 59 risposte.

Visita il profilo

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

Abbonato, bbp_partecipante, cliente, comunità, sq-ultimate, 59 risposte.

Visita il profilo

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

Abbonato, bbp_partecipante, cliente, comunità, sq-ultimate, 59 risposte.

Visita il profilo

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

Allegati:
Dovete essere collegato per visualizzare i file allegati.

0

commerciante

Abbonato, bbp_partecipante, 2 risposte.

Visita il profilo

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)