Documentation

Applications

Dernière mise à jour le 21. 12. 2021 par clonex / Ivan Hudec

Exemple de commission minimale

Il s'agit d'une méthode simple de calcul des commissions - elle utilise les commissions en $ par lot et les multiplie par la taille réelle de la transaction. Si la commission finale est inférieure au seuil, la commission minimale est utilisée. Vous pouvez télécharger l'extrait ici.

 

 

Étape 1 - Cloner une nouvelle colonne Commerce

Ouvrez CodeEditor, dans le Navigateur sous Builtin/Snippets/Trading/Commissions, trouvez le snippet SizeBased, cliquez dessus avec le bouton droit de la souris et clonez-le. Dans le dossier User/Snippets/Trading/Commission, vous verrez le snippet cloné que vous pouvez éditer.

 

 

Étape 2 - Définition des paramètres

À ce stade, vous devez spécifier les paramètres à utiliser pour le calcul. Dans notre cas, nous spécifions une commission pour l'ensemble du lot et une commission minimale au cas où le montant de la commission serait inférieur au minimum spécifié.

@ClassConfig(name="Commission basée sur la taille avec valeur minimale", display="#Commission# avec minimum #MinimumComission#")
@Help("<b>Commission par transaction avec valeur minimale</b><br/>Utilisé principalement pour les actions ou le Forex.")
public class MinimumComission extends CommissionsMethod {

    @Parameter(defaultValue="0", minValue=-100000d, name="Commission", maxValue=100000d, step=1d, category="Default")
    @Help("Commission en $ par lot complet")
    public double Commission ;

    @Parameter(defaultValue="0.5", minValue=0, name="MinimumComission", maxValue=100000d, step=1d, category="Default")
    @Help("Commission minimale dans $ par transaction")
    public double MinimumComission ;

 

Étape 3 - Mise en œuvre de la méthode computeCommissionsOnOpen

 

À ce stade, deux choix s'offrent à vous. Soit vous calculez la commission lorsque vous ouvrez une transaction, en utilisant la méthode computeCommissionsOnOpen, soit vous calculez la commission lorsque vous fermez une transaction, en utilisant la méthode computeCommissionsOnClose. Les deux méthodes ont pour arguments ILiveOrder order , double tickSize, double pointValue.

Dans notre cas, nous utilisons la première option et modifions cette méthode pour calculer la commission minimale lorsque la commission calculée est inférieure au minimum que nous avons fixé.

    @Override
    public double computeCommissionsOnOpen(ILiveOrder order, double tickSize, double pointValue) throws Exception {
        // la commission est en $ par lot complet
        double result = 0 ;
        double comission = Commission * order.getSize() ;
        if(comission<MinimumComission){result = MinimumComission;}
        else result = Commission * order.getSize() ;
        
        retour du résultat ;
    }
    //------------------------------------------------------------------------

    @Override
    public double computeCommissionsOnClose(ILiveOrder order, double tickSize, double pointValue) throws Exception {
        return 0 ;
    }
    
}

 

Étape 4 - Compiler l'extrait et l'utiliser

Après avoir redémarré StrategyQuant X, nous voyons la nouvelle méthode de calcul des commissions dans la section Data.

 

Dans la figure ci-dessous, vous pouvez voir que la commission par lot devrait en fait être de $10, mais comme nous avons fixé la commission minimale ci-dessus, la commission finale est de $20 par transaction.

 

 

Code complet de l'extrait

 

/*
 * Copyright (c) 2017-2018, StrategyQuant - Tous droits réservés.
 *
 * Le code contenu dans ce fichier a été créé en toute bonne foi, en pensant qu'il est correct et qu'il fait ce qu'il doit faire.
 * 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é que dans 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,
 * Il peut utiliser ce code dans tous les produits StrategyQuant et partager ses modifications ou travaux dérivés avec la communauté StrategyQuant.
 * 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 POUR 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.Trading.Commissions ;

import com.strategyquant.lib.* ;
import com.strategyquant.datalib.* ;
import com.strategyquant.tradinglib.* ;

@ClassConfig(name="Commission basée sur la taille avec valeur minimale", display="$ #Commission# par transaction")
@Help("<b>Commission par transaction avec valeur minimale</b><br/>Utilisé principalement pour les actions ou le Forex.")
public class MinimumComission extends CommissionsMethod {

    @Parameter(defaultValue="0", minValue=-100000d, name="Commission", maxValue=100000d, step=1d, category="Default")
    @Help("Commission en $ par lot complet")
    public double Commission ;

    @Parameter(defaultValue="0.5", minValue=0, name="Commission minimale", maxValue=100000d, step=1d, category="Défaut")
    @Help("Commission minimale dans $ par transaction")
    public double MinimumComission ;

    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    
    @Override
    public double computeCommissionsOnOpen(ILiveOrder order, double tickSize, double pointValue) throws Exception {
        // la commission est en $ par lot complet
        double result = 0 ;
        double comission = Commission * order.getSize() ;
        if(comission<MinimumComission){result = MinimumComission;}
        else result = Commission * order.getSize();
        
        return result; 
    }
    //------------------------------------------------------------------------

    @Override
    public double computeCommissionsOnClose(ILiveOrder order, double tickSize, double pointValue) throws Exception {
        return 0;
    }
    
}

 

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

S'abonner
Notification pour
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires