Monte-Carlo-Funktion verifizieren
5 Antworten
huangwh88
vor 5 Jahren #270606
In der Dokumentation hier https://strategyquant.com/doc/quantanalyzer/predict-verify-strategy-performance-using-monte-carlo-simulation/Es wird erwähnt, dass die Verifizierungsfunktion die tatsächliche Leistung der Strategie mit der mittels MC vorhergesagten Bandbreite vergleichen soll.
Aber ist es möglich, tatsächliche Live-Ergebnisse zu importieren und sie mit den MC-Vorhersagen zu vergleichen? Im Moment sieht es so aus, als würden die Daten in IS- und OOS-Anteile aufgeteilt und die OOS-Ergebnisse mit den MC-Vorhersagen verglichen, die anhand der IS-Ergebnisse erstellt wurden.
0
tomas262
vor 5 Jahren #270622
Hallo,
Ja, Sie können die MC-Vorhersage verwenden und sie auf Ihre Live-Handelsergebnisse anwenden. Laden Sie einfach die Ergebnisse und setzen Sie die Daten "Verify - Datum" auf das Datum, ab dem Sie die Vorhersagesimulation starten möchten. In dem beigefügten Beispiel sind die Ergebnisse vom 1.1.2021 bis zum 24.5.2021 geladen. Die Vorhersage wird so eingestellt, dass sie am 1.3.2021 beginnt, damit wir vergleichen können, ob wir innerhalb der MC-Simulationsgrenzen mit unseren Handelsergebnissen liegen.
0
Massimo Scapini
vor 3 Jahren #280024
Ja,
aber ich vermute, dass auf diese Weise Live-Daten vor dem 1. März 2021 verwendet werden, um Daten danach zu simulieren, was nicht das ist, was man vielleicht will...
Ich würde es vorziehen, zwei verschiedene Datensätze zu laden: 1. die simulierten Daten für die Vergangenheit, 2. die Live-Daten (wie im Abschnitt "Daten vergleichen") und dann den ersten Datensatz zu verwenden, um den zweiten zu simulieren.
Lässt sich dieses Problem umgehen, indem man die simulierten Daten der Vergangenheit und die Live-Daten in eine einzige Datei lädt? Wenn ja, welches Format könnte verwendet werden?
Wie kann ich außerdem die Anzahl der für die Funktion "Vorhersage" verwendeten Abschlüsse ändern?
0
Massimo Scapini
vor 3 Jahren #280025
Ich habe wahrscheinlich den Weg gefunden (vielleicht war es nur das, was Sie vorgeschlagen haben, aber ich habe es einfach nicht verstanden!)
1. Laden Sie die simulierten Daten
2. Laden Sie die Live-Daten
3. Erstellen Sie ein Portfolio, das 1 und 2 zusammenfasst.
4. Führen Sie die MC mit dem Startdatum von 2 als Referenz aus
5. Erledigt!
0
Massimo Scapini
vor 3 Jahren #280041
Im Prinzip funktioniert es...
... aber leider ist die Anzeige der Ergebnisse mit MT4 ziemlich irreführend, da alle im MT4-Bericht enthaltenen Transaktionen als Trades gezählt werden, zumindest in der Grafik (ich weiß nicht, ob auch in der Simulation).
Siehe Anhang
Um dies zu beheben, müssen Sie den MT4-Bericht manuell bereinigen, bevor Sie ihn in QA laden. Ziemlich ärgerlich
0
Handelsvertreter
vor 1 Monat #293111
Ich habe dieses Problem gelöst, indem ich einen Filter programmiert habe, um das Datum so lange zu setzen, bis die MC die Daten verwenden soll. Sie geben einfach das Datum im Format yyyymmdd ein und verwenden das gleiche Datum in der Überprüfungsfunktion.
---------
Paket com.strategyquant.extend.MonteCarloMethods;
import com.strategyquant.lib.results.SQOrder;
import com.strategyquant.lib.results.SQOrderList;
import com.strategyquant.lib.snippets.MonteCarloSim.MonteCarloMethod;
import java.util.Calendar;
public class DateFilter extends MonteCarloMethod {
public DateFilter() {
setName(“FilterByDate”);
// Datum im Format JJJJMMTT (z.B. 20231231 für 31.12.2023)
addIntParameter(“_STOP_DATE_”, “Nur Trades bis Datum (JJJJMMTT)”, 20231231, 19000101, 21001231, 1);
setFormatedName(“Filter: Trades 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
Kalender 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
if(orderDate <= stopDate) {
filteredOrders.add(order.clone());
}
}
// Die Originalliste wird mit der gefilterten Liste überschrieben
originalOrders.clear();
for(int j = 0; j < filteredOrders.size(); j++) {
originalOrders.add(filteredOrders.get(j).clone());
}
// Optional: Falls die Reihenfolge für nachfolgende MC-Methoden egal ist
// java.util.
Collections.shuffle(originalOrders);
}
}
0
Ansicht von 5 Antworten - 1 bis 5 (von insgesamt 5)