29. 5. 2024

5 1

Nombre de transactions de la matrice WF

Note - il existe une version mise à jour pour SQX Build 140 et plus - voir l'extrait ci-joint.

 

Cet extrait Java ajoute une nouvelle fonctionnalité de colonne de banque de données et vous permet de calculer le nombre de transactions de toutes les combinaisons d'une matrice WF.

/*
 * Copyright (c) 2017-2018, StrategyQuant - Tous droits réservés.
 *
 * Le code dans ce fichier a été fait en toute bonne foi qu'il est correct et fait ce qu'il doit.
 * Si vous avez trouvé un bug dans ce code OU si vous avez une suggestion d'amélioration OU si vous voulez inclure
 * votre propre extrait de code dans notre bibliothèque standard, veuillez nous contacter à l'adresse suivante :
 * https://roadmap.strategyquant.com
 *
 * Ce code ne peut être utilisé qu'avec les produits StrategyQuant.
 * Tout propriétaire d'une licence valide (gratuite, d'essai ou commerciale) d'un produit StrategyQuant
 * est autorisé à utiliser, copier, modifier ou faire un travail dérivé de ce code sans limitations,
 * pour être utilisé dans tous les produits StrategyQuant et de partager ses modifications ou travaux dérivés
 * avec la communauté StrategyQuant.
 *
 * LE LOGICIEL EST FOURNI "TEL QUEL", SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE,
 * Y COMPRIS, MAIS SANS S'Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D'ADÉQUATION À UN USAGE PARTICULIER ET DE NON-CONTREFAÇON.
 * D'ADÉQUATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. EN AUCUN CAS LES AUTEURS NE POURRONT ETRE TENUS RESPONSABLES DE TOUTE RECLAMATION, DE TOUT DOMMAGE
 * LES AUTEURS NE PEUVENT EN AUCUN CAS ÊTRE TENUS RESPONSABLES D'UNE QUELCONQUE RÉCLAMATION, D'UN QUELCONQUE DOMMAGE OU D'UNE QUELCONQUE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D'UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT,
 * LES AUTEURS NE PEUVENT EN AUCUN CAS ÊTRE TENUS RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D'UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE SON UTILISATION.
 *
 */
package SQ.Columns.Databanks ;

import com.strategyquant.lib.L ;
import com.strategyquant.tradinglib.DatabankColumn ;
import com.strategyquant.tradinglib.ResultsGroup ;
import com.strategyquant.tradinglib.SettingsKeys ;
import com.strategyquant.tradinglib.ValueTypes ;
import com.strategyquant.tradinglib.WalkForwardResult ;
import com.strategyquant.tradinglib.optimization.WalkForwardMatrixResult ;

public class NumberOfTradeWF extends DatabankColumn {
    
	public NumberOfTradeWF() {
		super(L.tsq("# de transactions WF"), DatabankColumn.Integer, ValueTypes.Aproximate, 0, 0, 100) ;

		setWidth(70) ;
		
		setTooltip(L.tsq("Nombre de transactions WF")) ;

		// cela signifie que la valeur dépend du nombre de jours de négociation
		// et doit être normalisée en fonction du nombre de jours lorsqu'elle est comparée à un autre résultat
		// résultat avec un nombre de jours de négociation différent
		setDependentOnTradingPeriod(true) ;
	}
	
	//------------------------------------------------------------------------

	@Override
	public String getValue(ResultsGroup results, String resultKey, byte direction, byte plType, byte sampleType) throws Exception {
		/*
		 * Exemple de code pour obtenir la valeur de l'état du résultat WF
		 * ----------------------------------------------------
		 * ----------------------------------------------------
		 * ----------------------------------------------------
		 */
		
		/Récupérer les résultats de la matrice WF
		WalkForwardMatrixResult mwfResult = (WalkForwardMatrixResult) results.mainResult().get(SettingsKeys.WalkForwardResult) ;
		if(mwfResult==null) {
			return "NA" ;
		}
				
		/*
		 * WalkForwardMatrixResult opt params
		 * public int start1 ;
			public int stop1 ;
			public int increment1 ;
			public int start2 ;
			public int stop2 ;
			public int increment2 ;
			
			for(int j=mwfResult.start2 ; j<=mwfResult.stop2 ; j+=mwfResult.increment2) {
				for(int i=mwfResult.start1 ; i<=mwfResult.stop1 ; i+=mwfResult.increment1) {
					WalkForwardResult wfResult = mwfResult.getWFResult(i, j) ;
				}
			}
		 */
		int param1 = mwfResult.start1 ; //oos
		int param2 = mwfResult.start2 ; //run
		
		//Obtention d'un résultat WF spécifique à partir de la matrice
		WalkForwardResult wfResult = mwfResult.getWFResult(param1, param2) ;
		
		/*
		 * Statistiques calculées du WalkForwardResult
		 * public SQStats stats = null ; //Statistiques complètes de l'échantillon
		 * public SQStats statsOOS = null ; //Statistiques de l'échantillon complet
		 * public SQStats statsStability = null ; //La stabilité des statistiques
		 * public SQStats statsScore = null ; //Le score des statistiques
		 * public SQStats statsSpecial = null ; //Les statistiques spéciales
		 */
		
		//Retourne la valeur calculée des statistiques
		return wfResult.stats.getInt("NumberOfTrades")+"" ;
	}
		
}

 

1 Commentaire
Le plus ancien
Le plus récent Le plus populaire
Emmanuel
4. 9. 2024 2:19 pm

Excellent Tomas ! !!!!
bonne idée !
Merci 🙂 🙂 🙂 🙂