Documentation

Applications

Dernière mise à jour le 18. 5. 2020 par Mark Fric

SQN Rapport InSample / OutOfSample

Dans cet exemple, nous ajouterons de nouvelles mesures (colonne de la banque de données) qui seront calculées en tant que ratio de deux valeurs de colonne déjà calculées. Dans notre cas, nous voulons obtenir le ratio SQN(IS) vs SQN (OOS).

La formule sera donc simple :

Rapport SQN IS OOS = SQN (IS) / SQN (OOS)

 

Nous allons procéder étape par étape :

Créer un nouvel extrait de colonne de banque de données

Passez à l'éditeur de code :

puis cliquez sur Créer un nouveau bouton :

Définissez SQNRatioISOOS comme nom de la nouvelle colonne et choisissez le type de colonne Databank :

Cela créera un nouvel extrait de colonne avec un modèle standard.

Ce nouvel extrait ne fait pas grand-chose. Une nouvelle colonne sera ajoutée à la banque de données une fois que vous aurez recompilé et
redémarrer SQ, mais il affichera la valeur normale du bénéfice net, car il s'agit de l'exemple de calcul dans la rubrique
modèle standard.

 

Calculer la valeur souhaitée dans l'extrait

Pour que le snippet calcule la valeur que nous souhaitons, nous devons effectuer quelques modifications.

Tout d'abord, nous allons modifier son constructeur (première méthode)

Le code original était :

public SQNRatioISOOS() {
  super("SQNRatioISOOS",
        DatabankColumn.Decimal2, // format d'affichage de la valeur
        ValueTypes.Maximize, // si la valeur doit être maximisée / minimisée / approchée d'une valeur
        0, // valeur cible si l'approximation a été choisie
        0, // minimum moyen de cette valeur
        100) ; // moyenne du maximum de cette valeur
  
  setWidth(80) ; // largeur de colonne par défaut en pixels
  
  setTooltip("Votre info-bulle ici") ;
  
  /* Si cette nouvelle colonne dépend d'autres colonnes qui doivent être calculées en premier, mettez-les ici.
     Assurez-vous de ne pas créer de dépendance circulaire, comme A dépend de B et B dépend de A.
     Les colonnes (=valeurs statistiques) sont identifiées par le nom de la classe.)
  */
  //setDependencies("DrawdownPct", "NumberOfTrades") ;
}

 

nous le remplacerons par :

public SQNRatioISOOS() {
  super("SQN Ratio IS/OOS",
        DatabankColumn.Decimal2, // format d'affichage de la valeur
        ValueTypes.Maximize, // si la valeur doit être maximisée / minimisée / approchée d'une valeur
        0, // valeur cible si l'approximation a été choisie
        0, // minimum moyen de cette valeur
        100) ; // moyenne du maximum de cette valeur
  
  setWidth(80) ; // largeur de colonne par défaut en pixels
  
  setTooltip("Rapport SQN (IS) / SQN (OOS)") ;
}

Nous n'avons rien fait de spécial, nous avons seulement spécifié un meilleur nom pour notre extrait et défini l'aide de l'infobulle. Nous avons également supprimé les commentaires contenant des dépendances dont nous n'avons pas besoin.

 

Ensuite, nous allons supprimer la méthode compute()

Normalement, nous devrions utiliser cette méthode pour calculer la valeur de l'extrait. Cette méthode peut être utilisée pour calculer la valeur métrique à partir d'une liste de transactions ou comme un ratio entre certains champs déjà calculés.

Malheureusement, dans notre cas, nous devons calculer le rapport entre la même valeur statistique (SQN), mais calculée pour deux parties différentes des données - dans l'échantillon et hors de l'échantillon.

Cela ne peut pas être fait dans la méthode compute(), nous pouvons donc la supprimer.

 

 Ajouter la méthode getValue()

nous devons surcharger une méthode spéciale getValue() qui est appelée lorsque la grille de la banque de données récupère la valeur de cette cellule.

Cette méthode permet de récupérer des statistiques distinctes pour la partie IS et la partie OOS, et d'en déduire les valeurs de SQN de la partie IS et de la partie OOS.

public String getValue(ResultsGroup results, String resultKey, byte direction, byte plType, byte sampleType) throws Exception {
    // obtient les statistiques pour les parties IS et OOS
    SQStats statsIS = results.subResult(resultKey).stats(Directions.Both, PlTypes.Money, SampleTypes.InSample) ;
    SQStats statsOOS = results.subResult(resultKey).stats(Directions.Both, PlTypes.Money, SampleTypes.OutOfSample) ;

    double sqnIS = 0, sqnOOS = 0 ;
    
    // obtient les valeurs de SQN pour IS et OOS. Nous devons nous assurer que les objets stats ne sont pas nuls
    if(statsIS != null) sqnIS = statsIS.getDouble("SQN") ;
    if(statsOOS != null) sqnOOS = statsOOS.getDouble("SQN") ;

    // calculons et renvoyons leur ratio - notons que nous utilisons safeDivide parce que sqnOOS peut aussi être zéro
    double ratio = SQUtils.safeDivide(sqnIS, sqnOOS) ;

    return String.format("%.2f", ratio) ;
}

c'est tout ce qui est nécessaire. Le snippet va maintenant calculer la valeur de cette cellule en tant que ratio des valeurs déjà existantes de SQN (IS) et SQN (OOS).

Frapper Compiler et vous devriez voir le résultat d'une compilation réussie :

 

Redémarrez SQ et vous devriez voir cette nouvelle colonne dans les colonnes disponibles. Pour l'utiliser, ouvrez la vue Gérer dans une banque de données et créez ou modifiez une vue :

Sauvegardez, puis sélectionnez cette vue dans votre banque de données et vous devriez voir votre nouvelle colonne correctement calculée :

C'est tout - nous avons un nouvel extrait de colonne de banque de données.

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

S'abonner
Notification pour
5 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
Emmanuel
27. 11. 2021 8:34 am

très utile ! !! merci

Emmanuel
27. 11. 2021 4:24 pm

excellente idée ! merci

Emmanuel
27. 11. 2021 4:34 pm

Cette méthode permet d'obtenir des statistiques distinctes pour la partie IS et la partie OOS."Il est important de le savoir.
Existe-t-il une autre méthode comme le calcul où nous ne pouvons pas obtenir IS et OOS ?
Il serait utile de connaître les autres limitations de chaque classe, comme l'accès aux instruments de données et autres.

tomas262
Administrateur
Répondre à  Emmanuel
29. 11. 2021 8:48 pm

Vous pouvez consulter notre documentation sur l'API pour connaître toutes les méthodes disponibles. https://strategyquant.com/sqxapi/

Cyber
20. 6. 2022 4:17 am

Cela a fonctionné sur les stratégies générées par une tâche de construction. Cependant, l'affichage est nul lorsque je l'ajoute à un WFO. Existe-t-il un autre moyen de le faire fonctionner sur un WFO ?