Documentazione
Applicazioni
Ultimo aggiornamento il 17. 4. 2025 da Emmanuel Evrard
Esportare i dati della strategia in un file utilizzando un modello e un blocco di azione
Contenuto della pagina
Con l'Editor di codice è possibile creare e sviluppare snippet. In questo esempio, vedremo come esportare i dati da una strategia utilizzando un blocco d'azione.
Questo Esportazione dei dati ci aiuta a capire meglio il comportamento di una strategia ed è particolarmente utile quando si esegue il debug di modelli complessi che coinvolgono più regole.
In AlgoWizardpossiamo costruire un modello che funziona in due modalità:
-
Modalità predefinita: Utilizzato durante la costruzione della strategia. Non vengono esportati dati.
-
Modalità di verifica: Consente di esportare i dati in un file.
I. Creare un modello
1. Installazione dello snippet ExportData
-
Aprire la sezione Editor di codice
-
Importare il file
SQExtensionExportData2.sxp -
Riavvio SQX per applicare le modifiche
2. Creare un nuovo modello
-
Creare un nuovo modello
-
Aggiungere alcune condizioni di base/casuali alla logica
3. Aggiunta di una regola "Esporta dati" per esportare i valori degli indicatori
Creare una regola denominata "Dati di esportazione" che gestisce l'esportazione dei dati.
In questo esempio, esporteremo i valori degli indicatori a ogni nuovo inserimento utilizzando la regola "Esporta dati".
Questa regola raccoglie i valori specificati nel campo Esportazione dei dati e li scrive in un file.
Per farlo:
-
Impostare il percorso del file in cui i dati verranno esportati
-
Definire le variabili da esportare (se un valore è impostato su
999999, sarà ignorato durante l'esportazione)
All'interno di un modello, è possibile esportare i valori all'entrata, durante l'operazione o all'uscita. Ciò consente di osservare in dettaglio il comportamento della strategia.
È anche possibile pre-elaborare i valori (ad esempio, calcolare le medie) prima di esportarli.
È possibile utilizzare più Dati di esportazione blocchi di diverse regole da esportare in più file, se necessario.
4. Aggiunta di una variabile di esportazione
Creare una variabile booleana denominata Dati di esportazione. Questa variabile verrà utilizzata per attivare la regola di esportazione durante l'esecuzione nel Retester.
II. Costruire dal modello ed esportare i dati
1. Generare strategie con il costruttore
-
Una volta che il modello allegato è pronto, eseguirlo nel programma Costruttore per generare strategie.
-
Selezionate le strategie generate e inviatele alla Ritestatore.
2. Abilitazione dell'esportazione dei dati in Retester
-
Nel Retester, selezionare una strategia
-
Modificare il Esportazione dei dati e impostarlo su Vero
-
Applicare la configurazione ed eseguire il Retester
Con la modalità di esportazione attivata, la strategia scriverà i dati nel file definito.
III. Codice completo dello Snippet
pacchetto SQ.Blocks.OtherActions;
importare SQ.Internal.ActionBlock;
importare com.strategyquant.lib.*;
importare com.strategyquant.datalib.*;
importare com.strategyquant.tradinglib.*;
importare java.io.FileWriter;
importare java.io.IOException;
importare java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@BuildingBlock(name="(EXP) ExportData", display="ExportData", returnType = ReturnTypes.Action)
@Help("Esporta i valori di ExportData in un file")
@Ordine di ordinamento(100)
@OrdineCategoria(400)
@IgnoreInBuilder
public class ExportData extends ActionBlock
{
@Parametro
public ChartData Chart;
@Parametro
public int Shift;
@Parameter(defaultValue="C:\\Temp\output.txt", category="Path" )
@Help("Percorso del file")
public String Path1;
@Parametro(category="Value", name="Value1", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1)
public double Valore1;
@Parametro(categoria="Valore", nome="Valore2", minValue=-999999999, maxValue=999999999, defaultValue="999999", passo=0,1)
public double Valore2;
@Parametro(category="Value", name="Value3", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1)
public double Valore3;
@Parametro(category="Value", name="Value4", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1)
public double Valore4;
@Parametro(category="Value", name="Value5", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1)
public double Valore5;
//------------------------------------------------------------------------
//------------------------------------------------------------------------
//------------------------------------------------------------------------
@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 (Value1 == 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 (Value1 != 999999 && Value2 == 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 (Value2 != 999999 && Value3 == 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 (Value3 != 999999 && Value4 == 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 (Value4 != 999999 && Value5 == 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 (Value4 != 999999 && Value5 !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();
}
}
}
Vedere il video passo dopo passo:
Questo articolo è stato utile? L'articolo è stato utile L'articolo non è stato utile







Grazie, questo è uno strumento utile. Per la data suggerirei di usare qualcosa come
String formatted_date = SQTime.toString(time, "MM/gg/aaaa") + “,” + SQTime.toHHMMString(time);
La data intera non è sufficientemente intuitiva. 🙂