Documentation

Applications

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

ATR Volatilité Dimensionnement simple

Dans les situations où la volatilité à court terme augmente ou diminue, il peut être judicieux de modifier la taille de la position. Dans le tutoriel suivant, nous allons vous montrer un simple snippet dans StrategyQuant X x qui vous permet d'augmenter/diminuer la taille d'un trade. Snippet à télécharger ici.

Étape 1 - Créer un nouveau snippet de gestion de l'argent

Ouvrir Éditeur de codecliquer sur Créer un nouveau et choisissez Gestion de l'argent  tout en bas de l'écran. Nommez-le ATRVolatilitéDimensionnement.

Cela créera un nouveau snippet ATRVolatilitéDimensionnement.java dans le dossier Utilisateur/Snippets/SQ/MoneyManagement

 

 

Étape 2 - Définition des paramètres

À ce stade, nous définissons les paramètres que nous utiliserons plus tard lorsque nous mettrons en œuvre le snippet. Dans le cas présent, nous définissons les paramètres suivants

  • Taille - la valeur par défaut de la taille de l'opération.
  • Multiplicateur - Multiplicateur que nous utiliserons pour modifier la taille de la transaction.
  • FastATR- Période ATR rapide
  • SlowATR- Période ATR lente

 

@ClassConfig(name="ATR Volatility Sizing", display="ATR Volatility Sizing : #Size# lots with multiplication #Multiplier#")
@Help("<b>ATR Volatility Sizing</b>")
@Description("ATR Volatility Sizing, #Size# et #Multiplier#")
@SortOrder(100)
public class ATRVolatilitySizing extends MoneyManagementMethod {

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Taille de l'ordre", maxValue=1000000d, step=0.1d, category="Défaut")
    @Help("Taille de l'ordre (nombre de lots pour le forex)")
    public double Size ;

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Multiplier", maxValue=1000, step=0.1d, category="Default")
    @Help("Multiplier")
    public double Multiplier ;

    @Parameter(defaultValue="5", minValue=2, name="Fast ATR Period", maxValue=480, step=1, category="Default")
    @Help("Période ATR rapide")
    public int FastATR ;

    @Parameter(defaultValue="20", minValue=2, name="Slow ATR Period", maxValue=480, step=1, category="Default")
    @Help("Période ATR lente")
    public int SlowATR ;

 

 

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

Dans cette méthode, vous spécifiez la taille du lot. Les paramètres de la méthode méritent d'être mentionnés.

  • StrategyBase strategy est la classe de base de la stratégie, à partir de laquelle des classes dérivées mettent en œuvre des fonctions supplémentaires.
    Symbole de la chaîne - le symbole avec lequel la stratégie a été commandée
  • byte orderType
  • double price - le prix à l'ouverture de la transaction
  • double sl - stop loss
  • double tickSize tick size
  • double pointValue - valeur du point.

Cette méthode permet d'effectuer des calculs plus simples, mais aussi plus complexes. Dans notre cas, nous fixons le cours de clôture précédent et deux valeurs ATR différentes. Si l'ATR à court terme est plus élevé que l'ATR à long terme, nous modifions la taille de la position.

 

@Override
public double computeTradeSize(StrategyBase strategy, String symbol, byte orderType, double price, double sl, double tickSize, double pointValue) throws Exception {
    
    double tradeSize ;
    // Obtention de la clôture précédente
    double prevClose = strategy.MarketData.Chart(symbol).Close(1) ;
    // obtient l'ATR arrondi avec une période plus lente
    double slowValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),SlowATR, 1), 5) ;
    // obtenir un ATR arrondi avec une période plus rapide
    double fastValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),FastATR, 1), 5) ;
    // si la volatilité à court terme augmente, modifier la taille de la transaction
    if(fastValueATR>slowValueATR){
        tradeSize = Size*Multiplier ;

    }
    // sinon, ne rien faire
    else tradeSize = Size ;
    // renvoie la taille de l'opération
    return tradeSize ;
    
}

Étape 4 - Utilisation de l'extrait ATR Volatility Sizing

Après avoir redémarré SQX, vous trouverez le nouveau snippet dans l'onglet Money Management.

Le graphique ci-dessous montre l'évolution de la taille des transactions.

 

 

 

Code commenté

 

/*
 * 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.MoneyManagement ;

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

@ClassConfig(name="ATR Volatility Sizing", display="ATR Volatility Sizing : #Size# lots with multiplication #Multiplier#")
@Help("<b>ATR Volatility Sizing</b>")
@Description("ATR Volatility Sizing, #Size# et #Multiplier#")
@SortOrder(100)
public class ATRVolatilitySizing extends MoneyManagementMethod {

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Taille de l'ordre", maxValue=1000000d, step=0.1d, category="Défaut")
    @Help("Taille de l'ordre (nombre de lots pour le forex)")
    public double Size ;

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Multiplier", maxValue=1000, step=0.1d, category="Default")
    @Help("Multiplier")
    public double Multiplier ;

    @Parameter(defaultValue="5", minValue=2, name="Fast ATR Period", maxValue=480, step=1, category="Default")
    @Help("Période ATR rapide")
    public int FastATRPeriod ;

    @Parameter(defaultValue="20", minValue=2, name="Slow ATR Period", maxValue=480, step=1, category="Default")
    @Help("Période ATR lente")
    public int SlowATRPeriod ;



    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    
    @Override
    public double computeTradeSize(StrategyBase strategy, String symbol, byte orderType, double price, double sl, double tickSize, double pointValue) throws Exception {
        
        double tradeSize ;
        // Obtention de la clôture précédente
        double prevClose = strategy.MarketData.Chart(symbol).Close(1) ;
        // obtient l'ATR arrondi avec une période plus lente
        double slowValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),SlowATRPeriod, 1), 5) ;
        // obtenir un ATR arrondi avec une période plus rapide
        double fastValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),FastATRPeriod, 1), 5) ;
        // si la volatilité à court terme augmente, modifier la taille de la transaction
        if(fastValueATR&gt;slowValueATR){
            tradeSize = Size*Multiplier ;

        }
        // sinon, la taille est égale à la taille par défaut
        else tradeSize = Size ;
        // renvoie la taille de l'opération
        return tradeSize ;

 

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

S'abonner
Notification pour
6 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
Emmanuel
6. 1. 2022 11:56 am

Excellent ! !!!!!!!!!!!!!

binhsir
15. 1. 2022 2:05 pm

C'est exactement ce dont j'ai besoin. Merci clonex

Kaveh Karimi
1. 3. 2022 21:39

Bonjour, comment puis-je compiler ce fichier dans l'éditeur de code ? Merci beaucoup pour votre attention.

Monsieur Omi
3. 11. 2023 5:03 am

Merci clonex / Ivan Hudec.

Je ne sais pas pourquoi je ne peux pas enregistrer ma stratégie au format mq5. L'erreur est "One or more blocks the strategy uses isn't implemented in MQL code", "Template inclusion failed (for parameter value "MoneyManagement/ATRVolatilitySizing_variables.tpl").

Pourriez-vous m'aider à résoudre ce problème ?

Dernière modification le 6 mois il y a par Mr Omi
Emmanuel
13. 2. 2024 1:17 pm

I can not make it work with build 138

Emmanuel
13. 2. 2024 1:27 pm

For build 138 , we need to update the line :
@Override
    public double computeTradeSize(StrategyBase strategy, String symbol, byte orderType, double prix, double sl, double tickSize, double pointValue, double sizeStep) throws Exception {