StrategyQuant
Q AI AssistantAlgoCloudQuantAnalyzerQuantDataManager
Kostenloser KursUnternehmen
BlogDokumentationForumKontakt
BlogMarktplatz
Anmelden
Kostenloses Konto erstellen

Produkt

  • Preise & Lizenzen
  • Lernen
  • Marktplatz
  • Kostenlose Testversion starten

Rechtliches

  • Nutzungsbedingungen
  • Datenschutzerklärung
  • Cookies

Kontakt

[email protected]

Unternehmen

StrategyQuant s.r.o.

Korunní 2569/108, Vinohrady, 101 00 Praha 10, Tschechische Republik, EU

IČ: 04000498

DIČ: CZ04000498

Social Media

  • Impressum | VERARBEITUNG UND SCHUTZ PERSONENBEZOGENER DATEN

    Die Wertentwicklung in der Vergangenheit ist keine Garantie für zukünftige Erfolge. Alle Informationen sollten ausschließlich zu Bildungszwecken betrachtet werden

    VEREINIGTE STAATEN Gesetzlich vorgeschriebener Haftungsausschluss – Die Commodity Futures Trading Commission informiert: Der Handel mit Futures und Optionen birgt großes Gewinnpotenzial, aber auch erhebliche Verlustrisiken. Sie müssen sich der Risiken bewusst sein und bereit sein, diese zu akzeptieren, um an den Futures- und Optionsmärkten zu investieren. Handeln Sie nicht mit Geld, dessen Verlust Sie sich nicht leisten können. Dies ist weder eine Aufforderung noch ein Angebot zum Kauf/Verkauf von Futures, Aktien oder Optionen darauf. Es wird keine Zusicherung gemacht, dass ein Konto Gewinne oder Verluste erzielen wird oder wahrscheinlich erzielen wird, die denen in diesem Dokument genannten ähnlich sind. Die vergangene Wertentwicklung eines Handelssystems oder einer Methodik lässt nicht notwendigerweise auf zukünftige Ergebnisse schließen.

    CFTC-REGEL 4.41 – HYPOTHETISCHE ODER SIMULIERTE PERFORMANCE-ERGEBNISSE UNTERLIEGEN BESTIMMTEN EINSCHRÄNKUNGEN. IM GEGENSATZ ZU EINER TATSÄCHLICHEN PERFORMANCE-HISTORIE STELLEN SIMULIERTE ERGEBNISSE KEINEN ECHTEN HANDEL DAR. DA DIE TRADES NICHT TATSÄCHLICH AUSGEFÜHRT WURDEN, KÖNNEN DIE ERGEBNISSE AUSSERDEM DIE AUSWIRKUNGEN GEWISSER MARKTFAKTOREN WIE MANGELNDE LIQUIDITÄT ETWAIG KOMPENSIERT HABEN. SIMULIERTE HANDELSPROGRAMME UNTERLIEGEN IM ALLGEMEINEN ZUDEM DER TATSACHE, DASS SIE IM NACHHINEIN ENTWICKELT WURDEN. ES WIRD KEINE ZUSICHERUNG GEMACHT, DASS EIN KONTO GEWINNE ODER VERLUSTE ERZIELEN WIRD ODER WAHRSCHEINLICH ERZIELEN WIRD, DIE DEN DARGESTELLTEN ÄHNLICH SIND.

    ES WIRD KEINE ZUSICHERUNG GEMACHT, DASS EIN KONTO GEWINNE ODER VERLUSTE ERZIELEN WIRD ODER WAHRSCHEINLICH ERZIELEN WIRD, DIE DEN AUF DIESER WEBSITE BESPROCHENEN ÄHNLICH SIND. WENN SIE SICH ENTSCHEIDEN, ECHTES GELD ZU INVESTIEREN, SOLLTEN ALLE HANDELSENTSCHEIDUNGEN AN DEN FINANZMÄRKTEN IHRE EIGENEN SEIN.

    © StrategyQuant 2026

    Bereitgestellt von Klaudie.ai

    Zurück zum MarktplatzDIGITAL

    Größte MAE bei mehreren Trades

    StrategyQuantPlugins
    Größte MAE bei mehreren Trades

    Berechnet die ungünstigste kombinierte Maximum Adverse Excursion, wenn mehrere Positionen gleichzeitig geöffnet sind, und hilft Ihnen so, Drawdowns bei Basket-Einstiegsstrategien zu quantifizieren.

    Größte MAE – nützlich für die Analyse von Strategien mit einzelnen oder mehreren Orders.

    Mehrere Orders im Vergleich zu einer einzelnen Order

    Es ist effizienter, das Risiko auf einen Korb von Orders zu verteilen, anstatt auf eine einzelne Order. Mehrere Einstiegspositionen bieten mehr Flexibilität, ohne dass ein präzises Timing für einen einzelnen Einstieg erforderlich ist.

    Wenn mehrere Orders gleichzeitig in derselben Richtung eröffnet werden, berechnen Sie die Gesamt-MAE aller offenen Positionen. Wenn Positionen in entgegengesetzter Richtung liegen (Hedging), ziehen Sie die MFE der entgegengesetzten Positionen von der größeren MAE ab, um die globale MAE zu erhalten.

    Vier Snippets

    BiggestMAEallTrade – Größte MAE für einen Kontrakt, pro Kontrakt normalisiert für genaue Ergebnisse, selbst wenn die Strategie die Kontraktgröße während des Backtestings erhöht.

    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 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 = new Date();
            Date dateTemp = new Date();
            double Total1 = 0;
            double Size1 = 0;
            for(int i = 0; i<ordersList.size(); i++) 
            {
                Order order = ordersList.get(i);
                dateTemp = new Date(order.CloseTime);
                Size1 = order.Size;
                if (Size1 == 0) { Size1 = 0.01; }
                if (dateTemp.equals(date))
                {
                    Total1 += order.MAE;
                }
                else
                {
                    date = new Date(order.CloseTime);
                    Total1 = order.MAE;
                }
                if((Total1 / Size1)  > worstMAE) 
                {
                    worstMAE = (Total1/order.Size);
                }
            }
            return -1*worstMAE;
        }
    }
    

    BiggestMAEallTradePct – Größte MAE als Prozentsatz des Kontostands. Zeigt an, ob die Strategie ein angemessenes Risiko im Verhältnis zum Konto verwendet (z. B. im Vergleich zu maximal 5 % Tagesverlust).

    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 = new Date();
            Date dateTemp = new Date();
            double Total1 = 0;
            double Total2 = 0;
            for(int i = 0; i<ordersList.size(); i++) 
            {
                Order order = ordersList.get(i);
                dateTemp = new Date(order.CloseTime);
                if (dateTemp.equals(date))
                {
                    Total1 += order.MAE;
                }
                else
                {
                    date = new Date(order.CloseTime);
                    Total1 = order.MAE;
                }
                Total2 = SQUtils.safeDivide(Total1, order.AccountBalance - order.PL) * 100.0;
                if(Total2  > worstMAE) 
                {
                    worstMAE = Total2;
                }
            }
            return -1*worstMAE;
        }
    }
    

    BiggestMAEallHedgingTrade & BiggestMAEallHedgingTradePct – Für abgesicherte Positionen in entgegengesetzten Richtungen. Nimmt die größere MAE und zieht die MFE der Gegenrichtung ab. Funktioniert, wenn während der größeren MAE entgegengesetzte Trades offen sind.

    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 = new Date();
            Date dateTemp = new Date();
            double Total1 = 0;
            double Size1 = 0;
            int direction = 0;
            for(int i = 0; i < ordersList.size(); i++) 
            {
                Order order = ordersList.get(i);
                dateTemp = new Date(order.CloseTime);
                Size1 = order.Size;
                direction=order.getDirection();
                if (direction == 1)     								// Bullish positions
                {
                    if (Size1 == 0) { Size1 = 0.01; }
                    if (dateTemp.equals(date))
                    {
                        Total1 += order.MAE;
                    }
                    else
                    {
                        date = new Date(order.CloseTime);
                        Total1 = order.MAE;
                    }
                    if((Total1 / Size1)  > worstMAE1) 
                    {
                        worstMAE1 = (Total1/order.Size);
                    }
                }
            }
            Total1 = 0;
            for(int i = 0; i < ordersList.size(); i++) 
            {
                Order order = ordersList.get(i);
                dateTemp = new Date(order.CloseTime);
                Size1 = order.Size;
                direction=order.getDirection();
                if (direction == -1)     								// Bearish positions
                {
                    if (Size1 == 0) { Size1 = 0.01; }
                    if (dateTemp.equals(date))
                    {
                        Total1 += order.MAE;
                    }
                    else
                    {
                        date = new Date(order.CloseTime);
                        Total1 = order.MAE;
                    }
                    if((Total1 / Size1)  > worstMAE2) 
                    {
                        worstMAE2 = (Total1/order.Size);
                    }
                }
            }
            if (worstMAE1 >= worstMAE2)
            {
                Total1 = 0;
                for(int i = 0; i < ordersList.size(); i++) 
                {
                    Order order = ordersList.get(i);
                    dateTemp = new Date(order.CloseTime);
                    Size1 = order.Size;
                    direction=order.getDirection();
                    if (direction == -1)     								// Bearish positions
                    {
                        if (Size1 == 0) { Size1 = 0.01; }
                        if (dateTemp.equals(date))
                        {
                            Total1 += order.MFE;
                        }
                        else
                        {
                            date = new Date(order.CloseTime);
                            Total1 = order.MFE;
                        }
                        if((Total1 / Size1)  > BesttMFE1) 
                        {
                            BesttMFE1 = (Total1/order.Size);
                        }
                    }
                }
                return -1*(worstMAE1 - BesttMFE1);
            }
            else if (worstMAE2 > worstMAE1)
            {
                Total1 = 0;
                for(int i = 0; i < ordersList.size(); i++) 
                {
                    Order order = ordersList.get(i);
                    dateTemp = new Date(order.CloseTime);
                    Size1 = order.Size;
                    direction=order.getDirection();
                    if (direction == 1)     								// Bullish positions
                    {
                        if (Size1 == 0) { Size1 = 0.01; }
                        if (dateTemp.equals(date))
                        {
                            Total1 += order.MFE;
                        }
                        else
                        {
                            date = new Date(order.CloseTime);
                            Total1 = order.MFE;
                        }
                        if((Total1 / Size1)  > BesttMFE1) 
                        {
                            BesttMFE1 = (Total1/order.Size);
                        }
                    }
                }
                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 = new Date();
            Date dateTemp = new Date();
            double Total1 = 0;
            double Total2 = 0;
            int direction = 0;
            for(int i = 0; i<ordersList.size(); i++) 
            {
                Order order = ordersList.get(i);
                dateTemp = new Date(order.CloseTime);
                direction=order.getDirection();
                if (direction == 1)      								// Bullish position
                {
                    if (dateTemp.equals(date))
                    {
                        Total1 += order.MAE;
                    }
                    else
                    {
                        date = new Date(order.CloseTime);
                        Total1 = order.MAE;
                    }
                    Total2 = SQUtils.safeDivide(Total1, order.AccountBalance - order.PL) * 100.0;
                    if(Total2  > worstMAE1) 
                    {
                        worstMAE1 = Total2;
                    }
                }
            }
            Total1 = 0;
            for(int i = 0; i<ordersList.size(); i++) 
            {
                Order order = ordersList.get(i);
                dateTemp = new Date(order.CloseTime);
                direction=order.getDirection();
                if (direction == -1)      								// Bearish position
                {
                    if (dateTemp.equals(date))
                    {
                        Total1 += order.MAE;
                    }
                    else
                    {
                        date = new Date(order.CloseTime);
                        Total1 = order.MAE;
                    }
                    Total2 = SQUtils.safeDivide(Total1, order.AccountBalance - order.PL) * 100.0;
                    if(Total2  > worstMAE2) 
                    {
                        worstMAE2 = Total2;
                    }
                }
            }
            if (worstMAE1 >= worstMAE2)
            {
                Total1 = 0;
                for(int i = 0; i<ordersList.size(); i++) 
                {
                    Order order = ordersList.get(i);
                    dateTemp = new Date(order.CloseTime);
                    direction=order.getDirection();
                    if (direction == -1)      								// Bearish position
                    {
                        if (dateTemp.equals(date))
                        {
                            Total1 += order.MFE;
                        }
                        else
                        {
                            date = new Date(order.CloseTime);
                            Total1 = order.MFE;
                        }
                        Total2 = SQUtils.safeDivide(Total1, order.AccountBalance - order.PL) * 100.0;
                        if(Total2  > BesttMFE1) 
                        {
                            BesttMFE1 = Total2;
                        }
                    }
                }
                return -1*(worstMAE1 - BesttMFE1);
            }
            else if (worstMAE2 > worstMAE1)
            {
                Total1 = 0;
                for(int i = 0; i<ordersList.size(); i++) 
                {
                    Order order = ordersList.get(i);
                    dateTemp = new Date(order.CloseTime);
                    direction=order.getDirection();
                    if (direction == 1)      								// Bullish position
                    {
                        if (dateTemp.equals(date))
                        {
                            Total1 += order.MFE;
                        }
                        else
                        {
                            date = new Date(order.CloseTime);
                            Total1 = order.MFE;
                        }
                        Total2 = SQUtils.safeDivide(Total1, order.AccountBalance - order.PL) * 100.0;
                        if(Total2  > BesttMFE1) 
                        {
                            BesttMFE1 = Total2;
                        }
                    }
                }
                return -1*(worstMAE2 - BesttMFE1);
            }
            return 0;
        }
    }
    
    Die Wertentwicklung in der Vergangenheit ist keine Garantie für zukünftigen Erfolg. Alle Informationen sollten ausschließlich zu Bildungszwecken betrachtet werden. Von der Regierung der VEREINIGTEN STAATEN vorgeschriebener Haftungsausschluss – Die Commodity Futures Trading Commission weist darauf hin: Der Handel mit Futures und Optionen birgt große potenzielle Erträge, aber auch große potenzielle Risiken. Sie müssen sich der Risiken bewusst und bereit sein, diese zu akzeptieren, um an den Futures- und Optionsmärkten zu investieren. Handeln Sie nicht mit Geld, dessen Verlust Sie sich nicht leisten können. Dies ist weder eine Aufforderung noch ein Angebot zum Kauf/Verkauf von Futures, Aktien oder darauf basierenden Optionen. Es wird keine Zusicherung gegeben, dass irgendein Konto Gewinne oder Verluste erzielen wird oder wahrscheinlich erzielen wird, die den in diesem Dokument besprochenen ähnlich sind. Die vergangene Wertentwicklung eines Handelssystems oder einer Handelsmethodik lässt nicht notwendigerweise auf zukünftige Ergebnisse schließen. CFTC-REGEL 4.41 – HYPOTHETISCHE ODER SIMULIERTE PERFORMANCE-ERGEBNISSE UNTERLIEGEN BESTIMMTEN EINSCHRÄNKUNGEN. IM GEGENSATZ ZU EINER AUFZEICHNUNG DER TATSÄCHLICHEN WERTENTWICKLUNG STELLEN SIMULIERTE ERGEBNISSE KEINEN TATSÄCHLICHEN HANDEL DAR. DA DIE TRADES NICHT AUSGEFÜHRT WURDEN, KÖNNEN DIE ERGEBNISSE AUSSERDEM DEN EINFLUSS BESTIMMTER MARKTFAKTOREN WIE ETWA MANGELNDE LIQUIDITÄT AUSGEGLICHEN HABEN. SIMULIERTE HANDELSPROGRAMME UNTERLIEGEN IM ALLGEMEINEN ZUDEM DER TATSACHE, DASS SIE IM NACHHINEIN ENTWICKELT WURDEN. ES WIRD KEINE ZUSICHERUNG GEGEBEN, DASS EIN KONTO GEWINNE ODER VERLUSTE ERZIELEN WIRD ODER WAHRSCHEINLICH ERZIELEN WIRD, DIE DEN DARGESTELLTEN ÄHNLICH SIND. ES WIRD KEINE ZUSICHERUNG GEGEBEN, DASS IRGENDEIN KONTO GEWINNE ODER VERLUSTE ERZIELEN WIRD ODER WAHRSCHEINLICH ERZIELEN WIRD, DIE DEN AUF DIESER WEBSITE BESPROCHENEN ÄHNLICH SIND. WENN SIE SICH ENTSCHEIDEN, ECHTES GELD ZU INVESTIEREN, SOLLTEN ALLE HANDELSENTSCHEIDUNGEN AN DEN FINANZMÄRKTEN IHRE EIGENEN SEIN.
    Kostenlos

    Dateien

    • Snippet-BiggestMAEonmultipletrades.sqm14 KBGesperrt

    Der Download wird nach dem Kauf oder mit einem aktiven Tier freigeschaltet.

    Details
    Version1.0.0
    Veröffentlicht19. Oktober 2026
    Zuletzt aktualisiert2. November 2026
    AppSQ
    TypeSnippet
    AuthorEmmanuel
    App version145.3058
    Codebase categoryDatabank / Filter