17. 1. 2022

5 0

Plus grand MAE sur plusieurs transactions

Nous avons un extrait "Le plus grand MAE".
Il est très utile de voir comment se comporte une stratégie avec un seul ordre.

Par expérience, j'ai souvent remarqué qu'il est plus efficace de travailler avec un panier d'ordres plutôt qu'avec un seul ordre. Par exemple, il est plus judicieux de répartir 1 % de risque sur un panier d'ordres, plutôt que les 1% sur un seul ordre.

Avec un panier ou des ordres, vous disposez d'une plus grande flexibilité car vous pouvez choisir plusieurs positions d'entrée. Vous n'êtes pas obligé de choisir une seule position d'entrée.

Si vous ouvrez plusieurs commandes à la fois, vous devez calculer le MAE total de toutes les positions ouvertes.

Ce calcul est nécessaire si vous ouvrez toutes les positions dans la même direction. (pas de position de couverture)

 

Je propose ici deux extraits : 

La première : "BiggestMAEallTradeL'expression " le plus grand MAE ", vous donne le plus grand MAE pour Un contrat.  J'ai fait le calcul pour un contrat pour obtenir des résultats précis même si la stratégie augmente la taille du contrat pendant la période de l'échantillon.

A partir de ces résultats, vous avez une bonne idée, si vous travaillez avec une taille de contrat de 0,1 par exemple.

 

package SQ.Columns.Databanks ;

import com.strategyquant.lib.L ;
import com.strategyquant.lib.SQUtils ;
import com.strategyquant.lib.SettingsMap ;
import com.strategyquant.tradinglib.* ;

import java.util.List ;
import java.util.ArrayList ;
import java.util.* ;
import java.lang.* ;

// Mode en France par Emmanuel Evrard pour la Communauté StrategyQuantX :)
public class BiggestMAEallTrade extends DatabankColumn
{
    public BiggestMAEallTrade()
    {
        super(L.tsq("Biggest Multiple MAE"), DatabankColumn.Decimal2PL, ValueTypes.Minimize, 0, 0, 100) ;

        setWidth(140) ;
        
        setTooltip(L.tsq("Biggest Multiple MAE - is the worst Maximum Adverse Excursion of all trades open at once")) ;
    }
    
    //------------------------------------------------------------------------

    @Override
    public double compute(SQStats stats, StatsTypeCombination combination, OrdersList ordersList, SettingsMap settings, SQStats statsLong, SQStats statsShort) throws Exception
    {
        double worstMAE = -Double.MAX_VALUE ;
        Date date = nouvelle Date() ;
        Date dateTemp = nouvelle Date() ;
        double Total1 = 0 ;
        double Size1 = 0 ;

        for(int i = 0 ; i worstMAE)
            {
                worstMAE = (Total1/ordre.Taille) ;
            }
        }
        
        return -1*worstMAE ;
    }
}

 

Le deuxième : "Le plus grand nombre d'opérations de négociation de l'ensemble de la masse salariale (BiggestMAEallTradePct)"L'indicateur de l'état d'avancement des travaux (MAE) est le plus important par rapport à l'indicateur de l'état d'avancement des travaux. Solde du compteIl est intéressant de voir si une stratégie n'utilise pas assez ou trop de l'élément de base, ou si elle en a besoin. Solde du compte.

Si vous avez un 5% Perte journalière maximaleVous pouvez ainsi voir si vous êtes au-dessus ou au-dessous.

 

package SQ.Columns.Databanks ;

import com.strategyquant.lib.L ;
import com.strategyquant.lib.SQUtils ;
import com.strategyquant.lib.SettingsMap ;
import com.strategyquant.tradinglib.* ;

import java.util.List ;
import java.util.ArrayList ;
import java.util.* ;
import java.lang.* ;

// Mode in France by Emmanuel Evrard for the StrategyQuantX Community :)
public class BiggestMAEallTradePct extends DatabankColumn
{
    public BiggestMAEallTradePct()
    {
        super(L.tsq("Biggest Multiple MAE %"), DatabankColumn.Decimal2Pct, ValueTypes.Minimize, 0, 0, 100) ;
        setWidth(70) ;
        setTooltip(L.tsq("Biggest Multiple MAE % - is the worst Maximum Adverse Excursion of all trades open at once compared to AccountBalance")) ;
    }
    
    @Override
    public double compute(SQStats stats, StatsTypeCombination combination, OrdersList ordersList, SettingsMap settings, SQStats statsLong, SQStats statsShort) throws Exception
    {
        double worstMAE = -Double.MAX_VALUE ;
        Date date = nouvelle Date() ;
        Date dateTemp = nouvelle Date() ;
        double Total1 = 0 ;
        double Total2 = 0 ;

        for(int i = 0 ; i worstMAE)
            {
                worstMAE = Total2 ;
            }
        }

        return -1*worstMAE ;
    }
}


Si vous avez des positions multiples sur des directions opposées, haussières et baissières, dans ce cas, il peut être intéressant d'avoir un calcul différent :

J'ai pris l'EAM la plus élevée et soustraire l'EFM de la direction opposée pour obtenir le MAE global de ce plus grand MAE.

Cela ne fonctionne que si les transactions opposées sont ouvertes pendant la plus grande MAE et non après. Toutefois, ce calcul peut s'avérer utile.

J'ai apporté les modifications suivantes aux extraits BiggestMAEallHedgingTrade et Plus grandMAEallHedgingTradePct

 

 

package SQ.Columns.Databanks ;

import com.strategyquant.lib.L ;
import com.strategyquant.lib.SQUtils ;
import com.strategyquant.lib.SettingsMap ;
import com.strategyquant.tradinglib.* ;

import java.util.List ;
import java.util.ArrayList ;
import java.util.* ;
import java.lang.* ;

// Mode in France by Emmanuel Evrard for the StrategyQuantX Community :)
public class BiggestMAEallHedgingTrade extends DatabankColumn
{
    public BiggestMAEallHedgingTrade()
    {
        super(L.tsq("Biggest Multiple Hedging MAE"), DatabankColumn.Decimal2PL, ValueTypes.Minimize, 0, 0, 100) ;

        setWidth(140) ;
        
        setTooltip(L.tsq("Biggest Multiple Hedging MAE - is the worst Maximum Adverse Excursion of all trades open at once")) ;
    }
    
    //------------------------------------------------------------------------

    @Override
    public double compute(SQStats stats, StatsTypeCombination combination, OrdersList ordersList, SettingsMap settings, SQStats statsLong, SQStats statsShort) throws Exception
    {
        double worstMAE1= -Double.MAX_VALUE ;
        double worstMAE2 = -Double.MAX_VALUE ;
        double BesttMFE1= -Double.MAX_VALUE ;

        Date date = nouvelle Date() ;
        Date dateTemp = nouvelle Date() ;
        double Total1 = 0 ;
        double Size1 = 0 ;
        int direction = 0 ;

        for(int i = 0 ; i  worstMAE1)
                {
                    worstMAE1 = (Total1/ordre.Taille) ;
                }
            }
        }

        Total1 = 0 ;
        for(int i = 0 ; i  worstMAE2)
                {
                    worstMAE2 = (Total1/ordre.Taille) ;
                }
            }
        }
        
        si (worstMAE1 >= worstMAE2)
        {
            Total1 = 0 ;
            for(int i = 0 ; i  BesttMFE1)
                    {
                        BesttMFE1 = (Total1/ordre.Taille) ;
                    }
                }
            }

            return -1*(worstMAE1 - BesttMFE1) ;
        }
        else if (worstMAE2 > worstMAE1)
        {
            Total1 = 0 ;
            for(int i = 0 ; i  BesttMFE1)
                    {
                        BesttMFE1 = (Total1/ordre.Taille) ;
                    }
                }
            }

            return -1*(worstMAE2 - BesttMFE1) ;
        }
        return 0 ;
    }
}

package SQ.Columns.Databanks ;

import com.strategyquant.lib.L ;
import com.strategyquant.lib.SQUtils ;
import com.strategyquant.lib.SettingsMap ;
import com.strategyquant.tradinglib.* ;

import java.util.List ;
import java.util.ArrayList ;
import java.util.* ;
import java.lang.* ;

// Mode in France by Emmanuel Evrard for the StrategyQuantX Community :)
public class BiggestMAEallHedgingTradePct extends DatabankColumn
{
    public BiggestMAEallHedgingTradePct()
    {
        super(L.tsq("Biggest Multiple Hedging MAE %"), DatabankColumn.Decimal2Pct, ValueTypes.Minimize, 0, 0, 100) ;
        setWidth(100) ;
        setTooltip(L.tsq("Biggest Multiple Hedging MAE % - is the worst Maximum Adverse Excursion of all trades open at once compared to AccountBalance")) ;
    }
    
    @Override
    public double compute(SQStats stats, StatsTypeCombination combination, OrdersList ordersList, SettingsMap settings, SQStats statsLong, SQStats statsShort) throws Exception
    {
        double worstMAE1= -Double.MAX_VALUE ;
        double worstMAE2 = -Double.MAX_VALUE ;
        double BesttMFE1= -Double.MAX_VALUE ;
        Date date = nouvelle Date() ;
        Date dateTemp = nouvelle Date() ;
        double Total1 = 0 ;
        double Total2 = 0 ;
        int direction = 0 ;

        for(int i = 0 ; i worstMAE1)
                {
                    worstMAE1 = Total2 ;
                }
            }
        }

        Total1 = 0 ;
        for(int i = 0 ; i worstMAE2)
                {
                    worstMAE2 = Total2 ;
                }
            }
        }

        si (worstMAE1 >= worstMAE2)
        {
            Total1 = 0 ;
            for(int i = 0 ; i BesttMFE1)
                    {
                        BesttMFE1 = Total2 ;
                    }
                }
            }

            return -1*(worstMAE1 - BesttMFE1) ;
        }
        else if (worstMAE2 > worstMAE1)
        {
            Total1 = 0 ;
            for(int i = 0 ; i BesttMFE1)
                    {
                        BesttMFE1 = Total2 ;
                    }
                }
            }
            return -1*(worstMAE2 - BesttMFE1) ;
        }
        return 0 ;
    }
}

 

 

 

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