Documentation

Applications

Dernière mise à jour le 17. 4. 2025 par Emmanuel Evrard

Exportation des données de stratégie vers un fichier à l'aide d'un modèle et d'un bloc d'action

L'éditeur de code permet de créer et de développer des snippets. Dans cet exemple, nous allons voir comment exporter des données d'une stratégie à l'aide d'un bloc d'action.

Le présent Exportation de données nous aide à mieux comprendre le comportement d'une stratégie et s'avère particulièrement utile lors du débogage de modèles complexes impliquant plusieurs règles.

En AlgoWizardnous pouvons construire un modèle qui fonctionne selon deux modes :

  • Mode par défaut: Utilisé lors de l'élaboration de la stratégie. Aucune donnée n'est exportée.

  • Mode de relecture: Permet d'exporter les données vers un fichier.

 

I. Création d'un modèle

1. Installation de l'extrait ExportData

  • Ouvrir le Éditeur de code

  • Importer le fichier SQExtensionExportData2.sxp

  • Redémarrage SQX pour appliquer les modifications

 

2. Création d'un nouveau modèle

  • Créer un nouveau modèle

  • Ajouter quelques conditions de base/aléatoires à la logique

 

3. Ajout d'une règle "Exporter les données" pour exporter les valeurs des indicateurs

Créer une règle nommée "Exporter des données" qui gère l'exportation des données.

Dans cet exemple, nous exporterons les valeurs des indicateurs à chaque nouvelle entrée à l'aide de la règle "Exporter les données".

Cette règle recueille les valeurs spécifiées dans le champ Exportation de données et les écrit dans un fichier.

Pour ce faire :

  • Définir le chemin d'accès au fichier où les données seront exportées

  • Définir les variables à exporter (si une valeur est fixée à 999999, il sera ignoré lors de l'exportation)

 

Dans un modèle, vous pouvez exporter des valeurs à l'entrée d'une transaction, au cours d'une transaction ou à la sortie. Cela permet d'observer en détail le comportement de la stratégie.

Vous pouvez également prétraiter les valeurs (par exemple, calculer des moyennes) avant de les exporter.

Vous pouvez utiliser plusieurs Données d'exportation entre différentes règles pour les exporter vers plusieurs fichiers, selon les besoins.

4. Ajout d'une variable d'exportation

Créer une variable booléenne nommée Données d'exportation. Cette variable sera utilisée pour activer la règle d'exportation lors de son exécution dans le Retester.

 

II. Construire à partir du modèle et exporter des données

1. Générer des stratégies en utilisant le Builder

  • Une fois que le modèle ci-joint est prêt, exécutez-le dans l'application Constructeur pour élaborer des stratégies.

  • Sélectionnez les stratégies générées et envoyez-les au Retester.

 

 

 

2. Activation de l'exportation de données dans le Retester

  • Dans le Retester, sélectionnez une stratégie

  • Modifier le Exportation de données et lui attribuer la valeur Vrai

  • Appliquer la configuration et exécuter le Retester

Lorsque le mode d'exportation est activé, la stratégie écrit les données dans le fichier défini.

 

 

 

 

III. Code complet de l'extrait

 

package SQ.Blocks.OtherActions ;

import SQ.Internal.ActionBlock ;

import com.strategyquant.lib.* ;
import 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("Exporter les valeurs des données vers un fichier")
@SortOrder(100)
@CategoryOrder(400)
@IgnoreInBuilder
public class ExportData extends ActionBlock
{

    @Parameter
    public ChartData Chart ;
    
    @Parameter
    public int Shift ;

    @Parameter(defaultValue="C:\NTemp\Noutput.txt", category="Path" )
    @Help("Chemin du fichier")
    public String Path1 ;

    @Parameter(category="Value", name="Value1", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1)
    public double Value1 ;

    @Parameter(category="Value", name="Value2", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1)
    public double Value2 ;

    @Parameter(category="Value", name="Value3", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1)
    public double Value3 ;

    @Parameter(category="Value", name="Value4", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1)
    public double Value4 ;

    @Parameter(category="Value", name="Value5", minValue=-999999999, maxValue=999999999, defaultValue="999999", step=0.1)
    public double Value5 ;
    
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------

    @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() ;
        }
    }
}

Voir la vidéo étape par étape :

Cet article a-t-il été utile ? L'article était utile L'article n'était pas utile

1 Commentaire
Le plus ancien
Le plus récent Le plus populaire
Négociant en abeilles
19. 4. 2025 2:34 pm

Merci, c'est un outil utile. Pour la date, je suggérerais d'utiliser quelque chose comme        
String formatted_date = SQTime.toString(time, "MM/jj/aaaa") + “ , ” + SQTime.toHHMMString(time) ;

La date entière n'est pas assez intuitive 🙂 .