Dokumentation
Anwendungen
Zuletzt aktualisiert am 17. 4. 2025 von Emmanuel Evrard
Exportieren von Strategiedaten in eine Datei mithilfe einer Vorlage und eines Aktionsblocks
Inhalt der Seite
Mit dem Code-Editor können wir Snippets erstellen und entwickeln. In diesem Beispiel wird gezeigt, wie man Daten aus einer Strategie mithilfe eines Aktionsblocks exportiert.
Diese Daten exportieren Block hilft uns, das Verhalten einer Strategie besser zu verstehen und ist besonders nützlich bei der Fehlersuche in komplexen Vorlagen, die mehrere Regeln umfassen.
Unter AlgoWizardkönnen wir eine Vorlage erstellen, die in zwei Modi läuft:
-
Standard-Modus: Wird bei der Strategieerstellung verwendet. Es werden keine Daten exportiert.
-
Nachprüfungsmodus: Ermöglicht den Export von Daten in eine Datei.
I. Erstellen einer Vorlage
1. Installieren des ExportData-Snippets
-
Öffnen Sie die Code-Editor
-
Importieren Sie die Datei
SQErweiterungExportDaten2.sxp
-
Neustart SQX um die Änderungen zu übernehmen
2. Erstellen einer neuen Vorlage
-
Eine neue Vorlage erstellen
-
Ergänzen Sie die Logik um einige grundlegende/zufällige Bedingungen
3. Hinzufügen einer "Datenexport"-Regel zum Export von Indikatorwerten
Erstellen Sie eine Regel namens "Daten exportieren" die den Datenexport übernimmt.
In diesem Beispiel werden wir die Indikatorwerte bei jedem neuen Eintrag mit der Regel "Daten exportieren" exportieren.
Diese Regel sammelt Werte, die in der Datei Daten exportieren Block und schreibt sie in eine Datei.
Um dies zu tun:
-
Legen Sie den Dateipfad fest, in den die Daten exportiert werden sollen
-
Definieren Sie die zu exportierenden Variablen (wenn ein Wert auf
999999, wird es beim Export ignoriert)
Innerhalb einer Vorlage können Sie Werte bei Handelseintritt, während eines Handels oder beim Ausstieg exportieren. Dies ermöglicht eine detaillierte Beobachtung des Strategieverhaltens.
Sie können die Werte auch vorverarbeiten (z. B. Durchschnittswerte berechnen), bevor Sie sie exportieren.
Sie können mehrere ExportDaten Blöcke über verschiedene Regeln hinweg, um bei Bedarf in mehrere Dateien zu exportieren.
4. Hinzufügen einer Exportvariablen
Erstellen Sie eine boolesche Variable namens ExportDaten. Diese Variable wird verwendet, um die Exportregel bei der Ausführung im Retester zu aktivieren.
II. Aufbauen auf der Vorlage und Exportieren von Daten
1. Strategien mit dem Builder generieren
-
Sobald die angehängte Vorlage fertig ist, führen Sie sie im Programm Bauherr um Strategien zu entwickeln.
-
Wählen Sie die erzeugten Strategien aus und senden Sie sie an den Wiederholungsprüfer.
2. Aktivieren des Datenexports im Retester
-
Wählen Sie im Retester eine Strategie aus
-
Bearbeiten Sie die Daten exportieren und setzen Sie ihn auf Wahr
-
Übernehmen Sie die Konfiguration und führen Sie den Retester aus
Wenn der Exportmodus aktiviert ist, schreibt die Strategie Daten in die angegebene Datei.
III. Vollständiger Code des Snippets
Paket SQ.Blocks.OtherActions; import SQ.Internal.ActionBlock; import com.strategyquant.lib.*; importieren com.strategyquant.datalib.*; import com.strategyquant.tradinglib.*; import java.io.FileWriter; import java.io.IOException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @BuildingBlock(name="(EXP) ExportData", display="ExportData", returnType = ReturnTypes.Action) @Help("ExportData-Werte in eine Datei") @SortOrder(100) @CategoryOrder(400) @IgnoreInBuilder public class ExportData extends ActionBlock { @Parameter public ChartData Chart; @Parameter public int Verschiebung; @Parameter(defaultValue="C:\\Temp\\output.txt", category="Path" ) @Help("Pfad der Datei") public String Path1; @Parameter(category="Wert", name="Wert1", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1) public double Wert1; @Parameter(category="Wert", name="Wert2", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1) public double Wert2; @Parameter(category="Wert", name="Wert3", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1) public double Wert3; @Parameter(category="Wert", name="Wert4", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1) public double Wert4; @Parameter(category="Wert", name="Wert5", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1) public double Wert5; //------------------------------------------------------------------------ //------------------------------------------------------------------------ //------------------------------------------------------------------------ @Override public void OnAction() throws TradingException { long time; time = Chart.Time(Shift); Integer date1 = (SQTime.getYear(time)*10000 + SQTime.getMonthOriginal(time)*100 + SQTime.getDay(time)); Integer time1 = (SQTime.getHour(time)*100 + SQTime.getMinute(time)); double open1 = Chart.Open(Shift); double high1 = Chart.High(Shift); double low1 = Chart.Low(Shift); double close1 = Chart.Close(Shift); double Volume1 = Chart.Volume(Shift); String newline = System.getProperty("line.separator"); String filePath = Path1; if (Wert1 == 999999) { writeToFile(filePath, Integer.toString(date1) + "," + Integer.toString(time1) + "," + Double.toString(open1) + "," + Double.toString(high1) + "," + Double.toString(low1) + "," + Double.toString(close1) + "," + Double.toString(Volume1)); // + newline } else if (Wert1 != 999999 && Wert2 == 999999) { writeToFile(filePath, Integer.toString(date1) + "," + Integer.toString(time1) + "," + Double.toString(open1) + "," + Double.toString(high1) + "," + Double.toString(low1) + "," + Double.toString(close1) + "," + Double.toString(Volume1) + "," + Double.toString(Value1)); } else if (Wert2 != 999999 && Wert3 == 999999) { writeToFile(filePath, Integer.toString(date1) + "," + Integer.toString(time1) + "," + Double.toString(open1) + "," + Double.toString(high1) + "," + Double.toString(low1) + "," + Double.toString(close1) + "," + Double.toString(Volume1) + "," + Double.toString(Value1) + "," + Double.toString(Value2)); } else if (Wert3 != 999999 && Wert4 == 999999) { writeToFile(filePath, Integer.toString(date1) + "," + Integer.toString(time1) + "," + Double.toString(open1) + "," + Double.toString(high1) + "," + Double.toString(low1) + "," + Double.toString(close1) + "," + Double.toString(Volume1) + "," + Double.toString(Value1) + "," + Double.toString(Value2) + "," + Double.toString(Value3)); } else if (Wert4 != 999999 && Wert5 == 999999) { writeToFile(filePath, Integer.toString(date1) + "," + Integer.toString(time1) + "," + Double.toString(open1) + "," + Double.toString(high1) + "," + Double.toString(low1) + "," + Double.toString(close1) + "," + Double.toString(Volume1) + "," + Double.toString(Value1) + "," + Double.toString(Value2) + "," + Double.toString(Value3)+ "," + Double.toString(Value4)); } else if (Wert4 != 999999 && Wert5 != 999999) { writeToFile(filePath, Integer.toString(date1) + "," + Integer.toString(time1) + "," + Double.toString(open1) + "," + Double.toString(high1) + "," + Double.toString(low1) + "," + Double.toString(close1) + "," + Double.toString(Volume1) + "," + Double.toString(Value1) + "," + Double.toString(Value2) + "," + Double.toString(Value3) + "," + Double.toString(Value4)+ "," + Double.toString(Value5)); } } public static void writeToFile(String path, String content) { try (FileWriter writer = new FileWriter(path, true)) { writer.write(content + "\n"); // System.out.println("Données écrites avec succès dans le fichier " + path); } catch (IOException e) { // System.out.println("Une erreur s'est produite lors de l'écriture du fichier."); //e.printStackTrace(); } } }
Sehen Sie sich das Video Schritt für Schritt an:
War dieser Artikel hilfreich? Der Artikel war nützlich Der Artikel war nicht nützlich
Danke, das ist ein nützliches Werkzeug. Für das Datum würde ich vorschlagen, wir verwenden etwas wie
String formatted_date = SQTime.toString(time, "MM/dd/yyyy") + “,” + SQTime.toHHMMString(time);
Das ganzzahlige Datum ist nicht intuitiv genug. 🙂