StrategyQuant
Asystent Q AIAlgoCloudQuantAnalyzerQuantDataManager
Darmowy kursFirma
BlogDokumentacjaForumKontakt
BlogMarketplace
Zaloguj się
Załóż bezpłatne konto

Produkt

  • Cennik i licencje
  • Baza wiedzy
  • Marketplace
  • Rozpocznij darmowy okres próbny

Informacje prawne

  • Regulamin
  • Polityka prywatności
  • Pliki cookie

Kontakt

[email protected]

Firma

StrategyQuant s.r.o.

Korunní 2569/108, Vinohrady, 101 00 Praha 10, Czech Republic, EU

IČ: 04000498

DIČ: CZ04000498

Media społecznościowe

  • Nota prawna | PRZETWARZANIE I OCHRONA DANYCH OSOBOWYCH

    Dotychczasowe wyniki nie stanowią gwarancji przyszłych sukcesów. Wszelkie informacje należy traktować wyłącznie jako materiały edukacyjne

    STANY ZJEDNOCZONE Zastrzeżenie prawne wymagane przez Rząd - Commodity Futures Trading Commission informuje: Handel kontraktami futures i opcjami wiąże się z dużymi potencjalnymi zyskami, ale także z ogromnym potencjalnym ryzykiem. Musisz być świadomy tego ryzyka i gotów je zaakceptować, aby inwestować na rynkach kontraktów futures i opcji. Nie handluj środkami, na których utratę nie możesz sobie pozwolić. Nie stanowi to ani zachęty, ani oferty kupna/sprzedaży kontraktów futures, akcji lub opcji na nie. Nie składa się żadnych oświadczeń, że jakiekolwiek konto osiągnie lub ma prawdopodobieństwo osiągnięcia zysków lub strat podobnych do tych omówionych w tym dokumencie. Wyniki osiągane w przeszłości przez jakikolwiek system lub metodologię handlową niekoniecznie wskazują na przyszłe rezultaty.

    REGUŁA CFTC 4.41 - HIPOTETYCZNE LUB SYMULOWANE WYNIKI MAJĄ PEWNE OGRANICZENIA. W PRZECIWIEŃSTWIE DO HISTORII RZECZYWISTYCH WYNIKÓW, WYNIKI SYMULOWANE NIE PRZEDSTAWIAJĄ RZECZYWISTEGO HANDLU. PONADTO, PONIEWAŻ TRANSAKCJE NIE ZOSTAŁY FAKTYCZNIE ZAWARTE, WYNIKI MOGĄ NIE UWZGLĘDNIAĆ WPŁYWU OKREŚLONYCH CZYNNIKÓW RYNKOWYCH, TAKICH JAK BRAK PŁYNNOŚCI. PROGRAMY DO SYMULACJI TRANSAKCJI GENERALNIE PROJEKTUJE SIĘ RÓWNIEŻ Z KORZYŚCIĄ WIEDZY PO FAKCIE (Z PERSPEKTYWY CZASU). NIE SKŁADA SIĘ ŻADNYCH OŚWIADCZEŃ, ŻE JAKIEKOLWIEK KONTO OSIĄGNIE LUB MA PRAWDOPODOBIEŃSTWO OSIĄGNIĘCIA ZYSKÓW LUB STRAT PODOBNYCH DO PRZEDSTAWIONYCH.

    NIE SKŁADA SIĘ ŻADNYCH OŚWIADCZEŃ, ŻE JAKIEKOLWIEK KONTO OSIĄGNIE LUB MA PRAWDOPODOBIEŃSTWO OSIĄGNIĘCIA ZYSKÓW LUB STRAT PODOBNYCH DO TYCH OMÓWIONYCH W TEJ WITRYNIE. JEŚLI ZDECYDUJESZ SIĘ ZAINWESTOWAĆ PRAWDZIWE PIENIĄDZE, WSZYSTKIE DECYZJE HANDLOWE NA RYNKACH FINANSOWYCH POWINNY BYĆ TWOIMI WŁASNYMI.

    © StrategyQuant 2026

    Obsługiwane przez Klaudie.ai

    Wróć do MarketplaceDIGITAL

    Największe MAE przy wielu transakcjach

    StrategyQuantWtyczki
    Największe MAE przy wielu transakcjach

    Oblicza najgorsze łączne maksymalne obsunięcie w trakcie pozycji (MAE), gdy otwartych jest jednocześnie wiele pozycji, pomagając oszacować obsunięcia kapitału w strategiach wejść koszykowych.

    Biggest MAE — przydatne do analizowania strategii z pojedynczymi lub wieloma zleceniami.

    Wiele zleceń a pojedyncze zlecenie

    Bardziej efektywne jest rozłożenie ryzyka na koszyk zleceń niż opieranie się na pojedynczym zleceniu. Wiele pozycji wejściowych zapewnia większą elastyczność bez wymogu precyzyjnego pozycjonowania pojedynczego wejścia.

    Otwierając wiele zleceń jednocześnie w tym samym kierunku, oblicz łączne MAE wszystkich otwartych pozycji. Jeśli pozycje są otwarte w przeciwnych kierunkach (hedging), odejmij MFE pozycji przeciwnych od większego MAE, aby uzyskać globalne MAE.

    Cztery fragmenty kodu (Snippets)

    BiggestMAEallTrade — największe MAE dla jednego kontraktu, znormalizowane na kontrakt w celu uzyskania dokładnych wyników, nawet jeśli strategia zwiększa wielkość pozycji podczas backtestingu.

    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 — największe MAE jako procent salda konta. Pokazuje, czy strategia stosuje odpowiednie ryzyko w stosunku do rachunku (np. w porównaniu z maksymalną dzienną stratą na poziomie 5%).

    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 — dla pozycji zabezpieczających (hedging) w przeciwnych kierunkach. Pobiera większe MAE i odejmuje MFE z przeciwnego kierunku. Działa, gdy przeciwne transakcje są otwarte podczas występowania większego MAE.

    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;
        }
    }
    
    Dotychczasowe wyniki nie stanowią gwarancji przyszłych zysków. Wszelkie informacje należy traktować wyłącznie jako materiały edukacyjne Zastrzeżenie wymagane przez rząd STANÓW ZJEDNOCZONYCH – Commodity Futures Trading Commission informuje: Handel kontraktami futures i opcjami wiąże się z potencjalnie wysokimi zyskami, ale także z ogromnym ryzykiem. Należy być świadomym ryzyka i być gotowym je zaakceptować, aby inwestować na rynkach kontraktów futures i opcji. Nie inwestuj pieniędzy, na których stratę nie możesz sobie pozwolić. Niniejszy dokument nie stanowi zachęty ani oferty kupna/sprzedaży kontraktów futures, akcji ani powiązanych z nimi opcji. Nie składa się żadnych oświadczeń, że jakiekolwiek konto osiągnie lub ma szansę osiągnąć zyski lub straty podobne do omówionych w tym dokumencie. Wyniki osiągnięte w przeszłości przez jakikolwiek system lub metodologię handlową niekoniecznie wskazują na przyszłe rezultaty. REGUŁA CFTC 4.41 – HIPOTETYCZNE LUB SYMULOWANE WYNIKI MAJĄ PEWNE OGRANICZENIA. W PRZECIWIEŃSTWIE DO HISTORII RZECZYWISTYCH WYNIKÓW, WYNIKI SYMULOWANE NIE ODZWIERCIEDLAJĄ RZECZYWISTEGO HANDLU. PONADTO, PONIEWAŻ TRANSAKCJE NIE ZOSTAŁY FAKTYCZNIE ZAWARTE, WYNIKI MOGĄ NIE UWZGLĘDNIAĆ WPŁYWU PEWNYCH CZYNNIKÓW RYNKOWYCH, TAKICH JAK BRAK PŁYNNOŚCI. SYMULOWANE PROGRAMY HANDLOWE Z REGUŁY CECHUJE RÓWNIEŻ TO, ŻE SĄ PROJEKTOWANE Z PERSPEKTYWY CZASU. NIE SKŁADA SIĘ ŻADNYCH OŚWIADCZEŃ, ŻE JAKIEKOLWIEK KONTO OSIĄGNIE LUB MA SZANSĘ OSIĄGNĄĆ ZYSKI LUB STRATY PODOBNE DO PRZEDSTAWIONYCH. NIE SKŁADA SIĘ ŻADNYCH OŚWIADCZEŃ, ŻE JAKIEKOLWIEK KONTO OSIĄGNIE LUB MA SZANSĘ OSIĄGNĄĆ ZYSKI LUB STRATY PODOBNE DO OMÓWIONYCH W TYM SERWISIE. W PRZYPADKU DECYZJI O INWESTOWANIU PRAWDZIWYCH PIENIĘDZY, WSZYSTKIE DECYZJE HANDLOWE NA RYNKACH FINANSOWYCH POWINNY BYĆ PODEJMOWANE SAMODZIELNIE.
    Bezpłatne

    Pliki

    • Snippet-BiggestMAEonmultipletrades.sqm14 KBZablokowane

    Pobieranie odblokuje się po zakupie lub z aktywnym poziomem członkostwa.

    Szczegóły
    Wersja1.0.0
    Opublikowano19 października 2026
    Ostatnia aktualizacja2 listopada 2026
    AppSQ
    TypeSnippet
    AuthorEmmanuel
    App version145.3058
    Codebase categoryDatabank / Filter