diff --git a/Algorithm.CSharp/AddFutureOptionContractFromFutureChainRegressionAlgorithm.cs b/Algorithm.CSharp/AddFutureOptionContractFromFutureChainRegressionAlgorithm.cs index 68c7554e0b68..82ae00e5e44d 100644 --- a/Algorithm.CSharp/AddFutureOptionContractFromFutureChainRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddFutureOptionContractFromFutureChainRegressionAlgorithm.cs @@ -114,7 +114,7 @@ public override void OnData(Slice slice) {"Average Win", "0%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "88398927.578%"}, - {"Drawdown", "5.200%"}, + {"Drawdown", "5.100%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "111911.55"}, diff --git a/Algorithm.CSharp/AddRemoveSecurityCacheRegressionAlgorithm.cs b/Algorithm.CSharp/AddRemoveSecurityCacheRegressionAlgorithm.cs index 673e7081c3f5..a475d122d483 100644 --- a/Algorithm.CSharp/AddRemoveSecurityCacheRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddRemoveSecurityCacheRegressionAlgorithm.cs @@ -104,7 +104,7 @@ public override void OnData(Slice slice) {"Average Win", "0%"}, {"Average Loss", "0.00%"}, {"Compounding Annual Return", "271.720%"}, - {"Drawdown", "2.500%"}, + {"Drawdown", "2.200%"}, {"Expectancy", "-1"}, {"Start Equity", "100000"}, {"End Equity", "101753.84"}, diff --git a/Algorithm.CSharp/AddRiskManagementAlgorithm.cs b/Algorithm.CSharp/AddRiskManagementAlgorithm.cs index d7aec7762d1d..66ad558ac917 100644 --- a/Algorithm.CSharp/AddRiskManagementAlgorithm.cs +++ b/Algorithm.CSharp/AddRiskManagementAlgorithm.cs @@ -105,7 +105,7 @@ public override void Initialize() {"Estimated Strategy Capacity", "$38000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "59.74%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "5d7657ec9954875eca633bed711085d3"} }; } diff --git a/Algorithm.CSharp/AutomaticIndicatorWarmupDataTypeRegressionAlgorithm.cs b/Algorithm.CSharp/AutomaticIndicatorWarmupDataTypeRegressionAlgorithm.cs index f6633f164a02..2bea138642fb 100644 --- a/Algorithm.CSharp/AutomaticIndicatorWarmupDataTypeRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AutomaticIndicatorWarmupDataTypeRegressionAlgorithm.cs @@ -167,7 +167,7 @@ protected override decimal ComputeNextValue(QuoteBar input) {"Average Win", "0%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "733913.744%"}, - {"Drawdown", "15.900%"}, + {"Drawdown", "16.100%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "106827.7"}, @@ -189,7 +189,7 @@ protected override decimal ComputeNextValue(QuoteBar input) {"Estimated Strategy Capacity", "$200000000.00"}, {"Lowest Capacity Asset", "ES VMKLFZIH2MTD"}, {"Portfolio Turnover", "351.80%"}, - {"Drawdown Recovery", "1"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "dfd9a280d3c6470b305c03e0b72c234e"} }; } diff --git a/Algorithm.CSharp/AutomaticIndicatorWarmupRegressionAlgorithm.cs b/Algorithm.CSharp/AutomaticIndicatorWarmupRegressionAlgorithm.cs index 47ff2f23905b..bac301eeb6cf 100644 --- a/Algorithm.CSharp/AutomaticIndicatorWarmupRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AutomaticIndicatorWarmupRegressionAlgorithm.cs @@ -151,7 +151,7 @@ protected override decimal ComputeNextValue(IReadOnlyWindow {"Estimated Strategy Capacity", "$56000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "19.93%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "3da9fa60bf95b9ed148b95e02e0cfc9e"} }; } diff --git a/Algorithm.CSharp/BasicTemplateAlgorithm.cs b/Algorithm.CSharp/BasicTemplateAlgorithm.cs index 6829d12819ec..460137d0f222 100644 --- a/Algorithm.CSharp/BasicTemplateAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateAlgorithm.cs @@ -118,7 +118,7 @@ public override void OnData(Slice slice) {"Estimated Strategy Capacity", "$56000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "19.93%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "3da9fa60bf95b9ed148b95e02e0cfc9e"} }; } diff --git a/Algorithm.CSharp/BasicTemplateAxosAlgorithm.cs b/Algorithm.CSharp/BasicTemplateAxosAlgorithm.cs index 1d46a1dfb256..d42c19f49626 100644 --- a/Algorithm.CSharp/BasicTemplateAxosAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateAxosAlgorithm.cs @@ -112,7 +112,7 @@ public override void OnData(Slice slice) {"Estimated Strategy Capacity", "$150000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "4.98%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "8774049eb5141a2b6956d9432426f837"} }; } diff --git a/Algorithm.CSharp/BasicTemplateContinuousFutureAlgorithm.cs b/Algorithm.CSharp/BasicTemplateContinuousFutureAlgorithm.cs index 4791436519bf..c43d75c0f231 100644 --- a/Algorithm.CSharp/BasicTemplateContinuousFutureAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateContinuousFutureAlgorithm.cs @@ -138,7 +138,7 @@ public override void OnSecuritiesChanged(SecurityChanges changes) {"Average Win", "2.48%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "11.325%"}, - {"Drawdown", "1.500%"}, + {"Drawdown", "1.700%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "105549.6"}, diff --git a/Algorithm.CSharp/BasicTemplateContinuousFutureWithExtendedMarketAlgorithm.cs b/Algorithm.CSharp/BasicTemplateContinuousFutureWithExtendedMarketAlgorithm.cs index e606c0e79ce0..0dcdfc036f1a 100644 --- a/Algorithm.CSharp/BasicTemplateContinuousFutureWithExtendedMarketAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateContinuousFutureWithExtendedMarketAlgorithm.cs @@ -144,7 +144,7 @@ public override void OnSecuritiesChanged(SecurityChanges changes) {"Average Win", "2.86%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "12.959%"}, - {"Drawdown", "1.100%"}, + {"Drawdown", "1.400%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "106337.1"}, diff --git a/Algorithm.CSharp/BasicTemplateFrameworkAlgorithm.cs b/Algorithm.CSharp/BasicTemplateFrameworkAlgorithm.cs index 968f8b3d7bcb..0dcc7af0a4d0 100644 --- a/Algorithm.CSharp/BasicTemplateFrameworkAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateFrameworkAlgorithm.cs @@ -130,7 +130,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Estimated Strategy Capacity", "$27000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "59.86%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "f209ed42701b0419858e0100595b40c0"} }; } diff --git a/Algorithm.CSharp/BasicTemplateFuturesFrameworkAlgorithm.cs b/Algorithm.CSharp/BasicTemplateFuturesFrameworkAlgorithm.cs index 03f0a99f989d..aaa981de60da 100644 --- a/Algorithm.CSharp/BasicTemplateFuturesFrameworkAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateFuturesFrameworkAlgorithm.cs @@ -157,7 +157,7 @@ public override IEnumerable CreateTargets(QCAlgorithm algorith {"Average Win", "0%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "-81.734%"}, - {"Drawdown", "4.100%"}, + {"Drawdown", "4.000%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "97830.76"}, diff --git a/Algorithm.CSharp/BasicTemplateFuturesFrameworkWithExtendedMarketAlgorithm.cs b/Algorithm.CSharp/BasicTemplateFuturesFrameworkWithExtendedMarketAlgorithm.cs index e0e3ecb90843..ff640196afe8 100644 --- a/Algorithm.CSharp/BasicTemplateFuturesFrameworkWithExtendedMarketAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateFuturesFrameworkWithExtendedMarketAlgorithm.cs @@ -52,7 +52,7 @@ public class BasicTemplateFuturesFrameworkWithExtendedMarketAlgorithm : BasicTem {"Average Win", "0%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "-92.667%"}, - {"Drawdown", "5.000%"}, + {"Drawdown", "5.100%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "96685.76"}, diff --git a/Algorithm.CSharp/BasicTemplateIndexAlgorithm.cs b/Algorithm.CSharp/BasicTemplateIndexAlgorithm.cs index debaeb04cf9c..75e936bee34a 100644 --- a/Algorithm.CSharp/BasicTemplateIndexAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateIndexAlgorithm.cs @@ -170,7 +170,7 @@ public override void OnEndOfAlgorithm() {"Estimated Strategy Capacity", "$3000.00"}, {"Lowest Capacity Asset", "SPX XL80P3GHIA9A|SPX 31"}, {"Portfolio Turnover", "23.97%"}, - {"Drawdown Recovery", "9"}, + {"Drawdown Recovery", "0"}, {"OrderListHash", "4b560d2a8cfae510c3c8dc92603470fc"} }; } diff --git a/Algorithm.CSharp/BasicTemplateOptionsFrameworkAlgorithm.cs b/Algorithm.CSharp/BasicTemplateOptionsFrameworkAlgorithm.cs index 5b17aa867192..118e74422151 100644 --- a/Algorithm.CSharp/BasicTemplateOptionsFrameworkAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateOptionsFrameworkAlgorithm.cs @@ -160,7 +160,7 @@ public override IEnumerable CreateTargets(QCAlgorithm algorith {"Average Win", "0.13%"}, {"Average Loss", "-0.30%"}, {"Compounding Annual Return", "-46.395%"}, - {"Drawdown", "1.600%"}, + {"Drawdown", "1.500%"}, {"Expectancy", "0.429"}, {"Start Equity", "100000"}, {"End Equity", "99149.50"}, diff --git a/Algorithm.CSharp/BasicTemplateTradableIndexAlgorithm.cs b/Algorithm.CSharp/BasicTemplateTradableIndexAlgorithm.cs index fd2b14693819..f8df37d22ace 100644 --- a/Algorithm.CSharp/BasicTemplateTradableIndexAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateTradableIndexAlgorithm.cs @@ -89,7 +89,7 @@ public override void OnEndOfAlgorithm() {"Estimated Strategy Capacity", "$3000.00"}, {"Lowest Capacity Asset", "SPX XL80P3GHIA9A|SPX 31"}, {"Portfolio Turnover", "24.03%"}, - {"Drawdown Recovery", "9"}, + {"Drawdown Recovery", "0"}, {"OrderListHash", "691cf4990024b856a0a70255c9fd2545"} }; } diff --git a/Algorithm.CSharp/BlackLittermanPortfolioOptimizationFrameworkAlgorithm.cs b/Algorithm.CSharp/BlackLittermanPortfolioOptimizationFrameworkAlgorithm.cs index a61ceccf738e..91847e987450 100644 --- a/Algorithm.CSharp/BlackLittermanPortfolioOptimizationFrameworkAlgorithm.cs +++ b/Algorithm.CSharp/BlackLittermanPortfolioOptimizationFrameworkAlgorithm.cs @@ -97,7 +97,7 @@ public IEnumerable CoarseSelector(IEnumerable coarse) {"Average Win", "0.00%"}, {"Average Loss", "-0.14%"}, {"Compounding Annual Return", "71.152%"}, - {"Drawdown", "1.100%"}, + {"Drawdown", "1.200%"}, {"Expectancy", "-0.797"}, {"Start Equity", "100000"}, {"End Equity", "100738.86"}, diff --git a/Algorithm.CSharp/Collective2PortfolioSignalExportDemonstrationAlgorithm.cs b/Algorithm.CSharp/Collective2PortfolioSignalExportDemonstrationAlgorithm.cs index 7e4a1ab222be..cc519e57b8d3 100644 --- a/Algorithm.CSharp/Collective2PortfolioSignalExportDemonstrationAlgorithm.cs +++ b/Algorithm.CSharp/Collective2PortfolioSignalExportDemonstrationAlgorithm.cs @@ -191,7 +191,7 @@ public override void OnData(Slice slice) {"Estimated Strategy Capacity", "$260000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "2.00%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "006af1a065fca33ac1f1e9cd6bd02c11"} }; } diff --git a/Algorithm.CSharp/Collective2SignalExportDemonstrationAlgorithm.cs b/Algorithm.CSharp/Collective2SignalExportDemonstrationAlgorithm.cs index 3db21ab2f84c..4a46427b52f5 100644 --- a/Algorithm.CSharp/Collective2SignalExportDemonstrationAlgorithm.cs +++ b/Algorithm.CSharp/Collective2SignalExportDemonstrationAlgorithm.cs @@ -214,7 +214,7 @@ public override void OnData(Slice slice) {"Estimated Strategy Capacity", "$260000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "2.00%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "006af1a065fca33ac1f1e9cd6bd02c11"} }; } diff --git a/Algorithm.CSharp/CompleteOrderTagUpdateAlgorithm.cs b/Algorithm.CSharp/CompleteOrderTagUpdateAlgorithm.cs index 4eb147b0e9b4..27ca17ceb01e 100644 --- a/Algorithm.CSharp/CompleteOrderTagUpdateAlgorithm.cs +++ b/Algorithm.CSharp/CompleteOrderTagUpdateAlgorithm.cs @@ -200,7 +200,7 @@ private static void UpdateOrderTag(OrderTicket ticket, string tag, string errorM {"Estimated Strategy Capacity", "$210000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "2.89%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "8fba4f724843997ef421cf26ccabe51b"} }; } diff --git a/Algorithm.CSharp/CompositeRiskManagementModelFrameworkAlgorithm.cs b/Algorithm.CSharp/CompositeRiskManagementModelFrameworkAlgorithm.cs index d4bdb22eba18..c4279ed9e82b 100644 --- a/Algorithm.CSharp/CompositeRiskManagementModelFrameworkAlgorithm.cs +++ b/Algorithm.CSharp/CompositeRiskManagementModelFrameworkAlgorithm.cs @@ -106,7 +106,7 @@ public override void Initialize() {"Estimated Strategy Capacity", "$23000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "139.03%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "fa7c51aaf284cdc29cb4c0ac8ebd5356"} }; } diff --git a/Algorithm.CSharp/ConfidenceWeightedFrameworkAlgorithm.cs b/Algorithm.CSharp/ConfidenceWeightedFrameworkAlgorithm.cs index d283378101e7..7e92bb7cf3cd 100644 --- a/Algorithm.CSharp/ConfidenceWeightedFrameworkAlgorithm.cs +++ b/Algorithm.CSharp/ConfidenceWeightedFrameworkAlgorithm.cs @@ -119,7 +119,7 @@ public override void OnEndOfAlgorithm() {"Estimated Strategy Capacity", "$45000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "5.15%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "ae4986890fe7ab09ddb93059888f34c0"} }; } diff --git a/Algorithm.CSharp/ConsolidateRegressionAlgorithm.cs b/Algorithm.CSharp/ConsolidateRegressionAlgorithm.cs index 297c560ebada..0b34372843df 100644 --- a/Algorithm.CSharp/ConsolidateRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ConsolidateRegressionAlgorithm.cs @@ -210,7 +210,7 @@ public override void OnData(Slice slice) {"Average Win", "0%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "665.524%"}, - {"Drawdown", "1.500%"}, + {"Drawdown", "1.700%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "109332.4"}, diff --git a/Algorithm.CSharp/ContinuousBackMonthRawFutureRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousBackMonthRawFutureRegressionAlgorithm.cs index 4801a5f69f24..fd9a14d65a79 100644 --- a/Algorithm.CSharp/ContinuousBackMonthRawFutureRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ContinuousBackMonthRawFutureRegressionAlgorithm.cs @@ -160,7 +160,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "1.48%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "2.968%"}, - {"Drawdown", "1.600%"}, + {"Drawdown", "1.900%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "101483.2"}, diff --git a/Algorithm.CSharp/ContinuousFutureBackMonthRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureBackMonthRegressionAlgorithm.cs index 0b2eeba0bc96..8f33b789c84f 100644 --- a/Algorithm.CSharp/ContinuousFutureBackMonthRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ContinuousFutureBackMonthRegressionAlgorithm.cs @@ -176,7 +176,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "1.48%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "4.603%"}, - {"Drawdown", "1.600%"}, + {"Drawdown", "1.900%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "102291.4"}, diff --git a/Algorithm.CSharp/ContinuousFutureOpenPositionsLiquidationOnDelistingRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureOpenPositionsLiquidationOnDelistingRegressionAlgorithm.cs index d4cfacd2674b..c24549c48c76 100644 --- a/Algorithm.CSharp/ContinuousFutureOpenPositionsLiquidationOnDelistingRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ContinuousFutureOpenPositionsLiquidationOnDelistingRegressionAlgorithm.cs @@ -209,7 +209,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "7.02%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "34.386%"}, - {"Drawdown", "1.500%"}, + {"Drawdown", "1.600%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "107016.6"}, diff --git a/Algorithm.CSharp/ContinuousFutureRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureRegressionAlgorithm.cs index 6a9a7e210449..37d4d339904d 100644 --- a/Algorithm.CSharp/ContinuousFutureRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ContinuousFutureRegressionAlgorithm.cs @@ -194,7 +194,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "0.84%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "3.380%"}, - {"Drawdown", "1.600%"}, + {"Drawdown", "1.900%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "101687.3"}, diff --git a/Algorithm.CSharp/CustomMarginInterestRateModelAlgorithm.cs b/Algorithm.CSharp/CustomMarginInterestRateModelAlgorithm.cs index b87ef846e972..4023c2b7583e 100644 --- a/Algorithm.CSharp/CustomMarginInterestRateModelAlgorithm.cs +++ b/Algorithm.CSharp/CustomMarginInterestRateModelAlgorithm.cs @@ -159,7 +159,7 @@ public void ApplyMarginInterestRate(MarginInterestRateParameters marginInterestR {"Estimated Strategy Capacity", "$150000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "3.19%"}, - {"Drawdown Recovery", "8"}, + {"Drawdown Recovery", "9"}, {"OrderListHash", "c0205e9d3d1bfdee958fecccb36413ec"} }; } diff --git a/Algorithm.CSharp/CustomOptionAssignmentRegressionAlgorithm.cs b/Algorithm.CSharp/CustomOptionAssignmentRegressionAlgorithm.cs index 2c2c8c2360b8..462e9659fa3d 100644 --- a/Algorithm.CSharp/CustomOptionAssignmentRegressionAlgorithm.cs +++ b/Algorithm.CSharp/CustomOptionAssignmentRegressionAlgorithm.cs @@ -63,7 +63,7 @@ public override OptionAssignmentResult GetAssignment(OptionAssignmentParameters {"Average Win", "9.48%"}, {"Average Loss", "-16.73%"}, {"Compounding Annual Return", "-25.790%"}, - {"Drawdown", "0.600%"}, + {"Drawdown", "0.500%"}, {"Expectancy", "-0.478"}, {"Start Equity", "100000"}, {"End Equity", "99538"}, diff --git a/Algorithm.CSharp/CustomPartialFillModelAlgorithm.cs b/Algorithm.CSharp/CustomPartialFillModelAlgorithm.cs index ca6314f44044..ea2e3c6bc790 100644 --- a/Algorithm.CSharp/CustomPartialFillModelAlgorithm.cs +++ b/Algorithm.CSharp/CustomPartialFillModelAlgorithm.cs @@ -162,7 +162,7 @@ public override OrderEvent MarketFill(Security asset, MarketOrder order) {"Estimated Strategy Capacity", "$89000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "10.59%"}, - {"Drawdown Recovery", "1"}, + {"Drawdown Recovery", "3"}, {"OrderListHash", "aa14b4a6f4eb5907cb188ed462c14389"} }; } diff --git a/Algorithm.CSharp/CustomPortfolioOptimizerRegressionAlgorithm.cs b/Algorithm.CSharp/CustomPortfolioOptimizerRegressionAlgorithm.cs index 27adcaa4288e..b9b70336a9e9 100644 --- a/Algorithm.CSharp/CustomPortfolioOptimizerRegressionAlgorithm.cs +++ b/Algorithm.CSharp/CustomPortfolioOptimizerRegressionAlgorithm.cs @@ -50,7 +50,7 @@ public double[] Optimize(double[,] historicalReturns, double[] expectedReturns = {"Average Win", "0%"}, {"Average Loss", "-0.14%"}, {"Compounding Annual Return", "773.203%"}, - {"Drawdown", "3.300%"}, + {"Drawdown", "3.400%"}, {"Expectancy", "-1"}, {"Start Equity", "100000"}, {"End Equity", "103012.99"}, diff --git a/Algorithm.CSharp/DailyConsolidationExtendedMarketHoursWarningRegressionAlgorithm.cs b/Algorithm.CSharp/DailyConsolidationExtendedMarketHoursWarningRegressionAlgorithm.cs index 1c1e7e0e8798..13dee2075be3 100644 --- a/Algorithm.CSharp/DailyConsolidationExtendedMarketHoursWarningRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DailyConsolidationExtendedMarketHoursWarningRegressionAlgorithm.cs @@ -128,4 +128,4 @@ public override void OnEndOfAlgorithm() {"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"} }; } -} \ No newline at end of file +} diff --git a/Algorithm.CSharp/DelistedFutureLiquidateFromChainAndContinuousRegressionAlgorithm.cs b/Algorithm.CSharp/DelistedFutureLiquidateFromChainAndContinuousRegressionAlgorithm.cs index 873f7a015838..26f45ab1f89c 100644 --- a/Algorithm.CSharp/DelistedFutureLiquidateFromChainAndContinuousRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DelistedFutureLiquidateFromChainAndContinuousRegressionAlgorithm.cs @@ -167,7 +167,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Average Win", "7.02%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "34.386%"}, - {"Drawdown", "1.500%"}, + {"Drawdown", "1.600%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "107016.6"}, diff --git a/Algorithm.CSharp/DelistedFutureLiquidateRegressionAlgorithm.cs b/Algorithm.CSharp/DelistedFutureLiquidateRegressionAlgorithm.cs index f1294c24de1f..2f8fdffed7f5 100644 --- a/Algorithm.CSharp/DelistedFutureLiquidateRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DelistedFutureLiquidateRegressionAlgorithm.cs @@ -128,7 +128,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Average Win", "7.02%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "34.386%"}, - {"Drawdown", "1.500%"}, + {"Drawdown", "1.600%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "107016.6"}, diff --git a/Algorithm.CSharp/DelistedIndexOptionDivestedRegression.cs b/Algorithm.CSharp/DelistedIndexOptionDivestedRegression.cs index 2e9c1ccf8c4a..5902e1eb2883 100644 --- a/Algorithm.CSharp/DelistedIndexOptionDivestedRegression.cs +++ b/Algorithm.CSharp/DelistedIndexOptionDivestedRegression.cs @@ -141,7 +141,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "0%"}, {"Average Loss", "-26.02%"}, {"Compounding Annual Return", "-99.801%"}, - {"Drawdown", "46.200%"}, + {"Drawdown", "45.700%"}, {"Expectancy", "-1"}, {"Start Equity", "100000"}, {"End Equity", "73985"}, diff --git a/Algorithm.CSharp/EqualWeightingPortfolioConstructionModelFutureRegressionAlgorithm.cs b/Algorithm.CSharp/EqualWeightingPortfolioConstructionModelFutureRegressionAlgorithm.cs index 5d48aea0079e..232fc41634ea 100644 --- a/Algorithm.CSharp/EqualWeightingPortfolioConstructionModelFutureRegressionAlgorithm.cs +++ b/Algorithm.CSharp/EqualWeightingPortfolioConstructionModelFutureRegressionAlgorithm.cs @@ -151,7 +151,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Average Win", "0.69%"}, {"Average Loss", "-2.47%"}, {"Compounding Annual Return", "-99.946%"}, - {"Drawdown", "28.600%"}, + {"Drawdown", "29.300%"}, {"Expectancy", "-0.680"}, {"Start Equity", "100000"}, {"End Equity", "90213.76"}, diff --git a/Algorithm.CSharp/EquityMarginCallAlgorithm.cs b/Algorithm.CSharp/EquityMarginCallAlgorithm.cs index 68fb3e00a8a7..e31ad4ecfff9 100644 --- a/Algorithm.CSharp/EquityMarginCallAlgorithm.cs +++ b/Algorithm.CSharp/EquityMarginCallAlgorithm.cs @@ -127,7 +127,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "0%"}, {"Average Loss", "-6.17%"}, {"Compounding Annual Return", "-100.000%"}, - {"Drawdown", "72.300%"}, + {"Drawdown", "71.600%"}, {"Expectancy", "-1"}, {"Start Equity", "100000"}, {"End Equity", "50554.98"}, diff --git a/Algorithm.CSharp/EquitySplitHoldingsMinuteRegressionAlgorithm.cs b/Algorithm.CSharp/EquitySplitHoldingsMinuteRegressionAlgorithm.cs index 240ba4ee46c0..09fc907dbf75 100644 --- a/Algorithm.CSharp/EquitySplitHoldingsMinuteRegressionAlgorithm.cs +++ b/Algorithm.CSharp/EquitySplitHoldingsMinuteRegressionAlgorithm.cs @@ -178,7 +178,7 @@ public override void OnEndOfAlgorithm() {"Estimated Strategy Capacity", "$41000000.00"}, {"Lowest Capacity Asset", "AAPL R735QTJ8XC9X"}, {"Portfolio Turnover", "14.24%"}, - {"Drawdown Recovery", "4"}, + {"Drawdown Recovery", "3"}, {"OrderListHash", "5d7b0658b66b331ba8159011aa2ec5b4"} }; } diff --git a/Algorithm.CSharp/EquityTradeAndQuotesRegressionAlgorithm.cs b/Algorithm.CSharp/EquityTradeAndQuotesRegressionAlgorithm.cs index a37d97ee37d1..fe6329a6e19c 100644 --- a/Algorithm.CSharp/EquityTradeAndQuotesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/EquityTradeAndQuotesRegressionAlgorithm.cs @@ -183,7 +183,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "0.12%"}, {"Average Loss", "-0.10%"}, {"Compounding Annual Return", "-88.292%"}, - {"Drawdown", "3.300%"}, + {"Drawdown", "3.200%"}, {"Expectancy", "-0.225"}, {"Start Equity", "100000"}, {"End Equity", "97294.97"}, diff --git a/Algorithm.CSharp/ExecutionModelOrderEventsRegressionAlgorithm.cs b/Algorithm.CSharp/ExecutionModelOrderEventsRegressionAlgorithm.cs index 4b3d550c0a6a..33c5d80e9c9a 100644 --- a/Algorithm.CSharp/ExecutionModelOrderEventsRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ExecutionModelOrderEventsRegressionAlgorithm.cs @@ -191,7 +191,7 @@ public override void OnOrderEvent(QCAlgorithm algorithm, OrderEvent orderEvent) {"Estimated Strategy Capacity", "$27000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "59.86%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "f209ed42701b0419858e0100595b40c0"} }; } diff --git a/Algorithm.CSharp/FillForwardEnumeratorOutOfOrderBarRegressionAlgorithm.cs b/Algorithm.CSharp/FillForwardEnumeratorOutOfOrderBarRegressionAlgorithm.cs index 801e3a66684b..7b491fa489aa 100644 --- a/Algorithm.CSharp/FillForwardEnumeratorOutOfOrderBarRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FillForwardEnumeratorOutOfOrderBarRegressionAlgorithm.cs @@ -119,7 +119,7 @@ public override void OnData(Slice slice) {"Estimated Strategy Capacity", "$150000.00"}, {"Lowest Capacity Asset", "SHY 2T"}, {"Portfolio Turnover", "24.91%"}, - {"Drawdown Recovery", "0"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "9d00701591b363edda102536ec5e75e0"} }; } diff --git a/Algorithm.CSharp/ForwardDataOnlyFillModelAlgorithm.cs b/Algorithm.CSharp/ForwardDataOnlyFillModelAlgorithm.cs index 62a4ea4c2667..863037cd81a3 100644 --- a/Algorithm.CSharp/ForwardDataOnlyFillModelAlgorithm.cs +++ b/Algorithm.CSharp/ForwardDataOnlyFillModelAlgorithm.cs @@ -137,7 +137,7 @@ public override Fill Fill(FillModelParameters parameters) {"Estimated Strategy Capacity", "$62000000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "0.00%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "6"}, {"OrderListHash", "86f6dc102fded318c6264e36a56567b7"} }; } diff --git a/Algorithm.CSharp/FutureOptionCallITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionCallITMExpiryRegressionAlgorithm.cs index f569f7d2140e..862212b74f27 100644 --- a/Algorithm.CSharp/FutureOptionCallITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionCallITMExpiryRegressionAlgorithm.cs @@ -221,7 +221,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "2.28%"}, {"Average Loss", "-6.80%"}, {"Compounding Annual Return", "-9.373%"}, - {"Drawdown", "5.300%"}, + {"Drawdown", "5.500%"}, {"Expectancy", "-0.332"}, {"Start Equity", "100000"}, {"End Equity", "95323.58"}, diff --git a/Algorithm.CSharp/FutureOptionCallITMGreeksExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionCallITMGreeksExpiryRegressionAlgorithm.cs index 0e680bf9f80d..a9e2754c9623 100644 --- a/Algorithm.CSharp/FutureOptionCallITMGreeksExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionCallITMGreeksExpiryRegressionAlgorithm.cs @@ -186,7 +186,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "16.44%"}, {"Average Loss", "-35.38%"}, {"Compounding Annual Return", "-44.262%"}, - {"Drawdown", "26.200%"}, + {"Drawdown", "26.800%"}, {"Expectancy", "-0.268"}, {"Start Equity", "100000"}, {"End Equity", "75242.9"}, diff --git a/Algorithm.CSharp/FutureOptionCallOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionCallOTMExpiryRegressionAlgorithm.cs index 2225385ab1c4..a4706b8fb0c2 100644 --- a/Algorithm.CSharp/FutureOptionCallOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionCallOTMExpiryRegressionAlgorithm.cs @@ -197,7 +197,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "0%"}, {"Average Loss", "-3.85%"}, {"Compounding Annual Return", "-7.754%"}, - {"Drawdown", "4.300%"}, + {"Drawdown", "4.400%"}, {"Expectancy", "-1"}, {"Start Equity", "100000"}, {"End Equity", "96148.58"}, diff --git a/Algorithm.CSharp/FutureOptionShortCallITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionShortCallITMExpiryRegressionAlgorithm.cs index daf89dbb3b41..8cd5558afec3 100644 --- a/Algorithm.CSharp/FutureOptionShortCallITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionShortCallITMExpiryRegressionAlgorithm.cs @@ -206,7 +206,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "10.24%"}, {"Average Loss", "-6.46%"}, {"Compounding Annual Return", "6.498%"}, - {"Drawdown", "0.900%"}, + {"Drawdown", "3.000%"}, {"Expectancy", "0.292"}, {"Start Equity", "100000"}, {"End Equity", "103111.08"}, diff --git a/Algorithm.CSharp/FutureOptionShortCallOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionShortCallOTMExpiryRegressionAlgorithm.cs index d1e49db4e09d..92f5cefb40e7 100644 --- a/Algorithm.CSharp/FutureOptionShortCallOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionShortCallOTMExpiryRegressionAlgorithm.cs @@ -189,7 +189,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "1.74%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "3.600%"}, - {"Drawdown", "0.300%"}, + {"Drawdown", "0.500%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "101736.08"}, diff --git a/Algorithm.CSharp/FutureOptionShortPutITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionShortPutITMExpiryRegressionAlgorithm.cs index 99a75a59b56e..c0ca17862f0c 100644 --- a/Algorithm.CSharp/FutureOptionShortPutITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionShortPutITMExpiryRegressionAlgorithm.cs @@ -203,7 +203,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "10.89%"}, {"Average Loss", "-7.10%"}, {"Compounding Annual Return", "6.286%"}, - {"Drawdown", "0.000%"}, + {"Drawdown", "0.200%"}, {"Expectancy", "0.267"}, {"Start Equity", "100000"}, {"End Equity", "103011.08"}, diff --git a/Algorithm.CSharp/FutureOptionShortPutOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionShortPutOTMExpiryRegressionAlgorithm.cs index 7fb1e141f109..11f152479779 100644 --- a/Algorithm.CSharp/FutureOptionShortPutOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionShortPutOTMExpiryRegressionAlgorithm.cs @@ -188,7 +188,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "3.42%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "7.162%"}, - {"Drawdown", "0.000%"}, + {"Drawdown", "0.400%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "103423.58"}, diff --git a/Algorithm.CSharp/FuturesDailySettlementLongRegressionAlgorithm.cs b/Algorithm.CSharp/FuturesDailySettlementLongRegressionAlgorithm.cs index 8a3fa98d714b..f0cd67e06d82 100644 --- a/Algorithm.CSharp/FuturesDailySettlementLongRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FuturesDailySettlementLongRegressionAlgorithm.cs @@ -196,7 +196,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "0.89%"}, {"Average Loss", "-0.87%"}, {"Compounding Annual Return", "142.879%"}, - {"Drawdown", "3.800%"}, + {"Drawdown", "3.700%"}, {"Expectancy", "0.349"}, {"Start Equity", "100000"}, {"End Equity", "100905.65"}, diff --git a/Algorithm.CSharp/FuturesDailySettlementShortRegressionAlgorithm.cs b/Algorithm.CSharp/FuturesDailySettlementShortRegressionAlgorithm.cs index 2c9d7533b6e8..dc96704e24fc 100644 --- a/Algorithm.CSharp/FuturesDailySettlementShortRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FuturesDailySettlementShortRegressionAlgorithm.cs @@ -50,7 +50,7 @@ public class FuturesDailySettlementShortRegressionAlgorithm : FuturesDailySettle {"Average Win", "0.83%"}, {"Average Loss", "-0.94%"}, {"Compounding Annual Return", "-64.858%"}, - {"Drawdown", "47.200%"}, + {"Drawdown", "47.100%"}, {"Expectancy", "-0.373"}, {"Start Equity", "100000"}, {"End Equity", "98943.15"}, diff --git a/Algorithm.CSharp/IndexOptionCallITMExpiryDailyRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionCallITMExpiryDailyRegressionAlgorithm.cs index 470c0d737abe..91b9b22f4e4a 100644 --- a/Algorithm.CSharp/IndexOptionCallITMExpiryDailyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionCallITMExpiryDailyRegressionAlgorithm.cs @@ -76,7 +76,7 @@ public override void Initialize() {"Estimated Strategy Capacity", "$0"}, {"Lowest Capacity Asset", "SPX XL80P3GHIA9A|SPX 31"}, {"Portfolio Turnover", "1.90%"}, - {"Drawdown Recovery", "9"}, + {"Drawdown Recovery", "10"}, {"OrderListHash", "b02af3819f796241269614e0ebf49964"} }; } diff --git a/Algorithm.CSharp/IndexOptionCallITMGreeksExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionCallITMGreeksExpiryRegressionAlgorithm.cs index 680cc1108da2..9f9afc17d54f 100644 --- a/Algorithm.CSharp/IndexOptionCallITMGreeksExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionCallITMGreeksExpiryRegressionAlgorithm.cs @@ -172,7 +172,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "4.97%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "99.378%"}, - {"Drawdown", "7.600%"}, + {"Drawdown", "7.700%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "104974"}, diff --git a/Algorithm.CSharp/IndexOptionPutITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionPutITMExpiryRegressionAlgorithm.cs index c3ac8a75e13c..8c2da0a29ac1 100644 --- a/Algorithm.CSharp/IndexOptionPutITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionPutITMExpiryRegressionAlgorithm.cs @@ -206,7 +206,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "0%"}, {"Average Loss", "-9.85%"}, {"Compounding Annual Return", "-77.114%"}, - {"Drawdown", "12.500%"}, + {"Drawdown", "12.600%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "90146"}, diff --git a/Algorithm.CSharp/IndexOptionShortCallOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionShortCallOTMExpiryRegressionAlgorithm.cs index b439ff57964b..7ef0bbf30de0 100644 --- a/Algorithm.CSharp/IndexOptionShortCallOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionShortCallOTMExpiryRegressionAlgorithm.cs @@ -184,7 +184,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "0.01%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "0.142%"}, - {"Drawdown", "0%"}, + {"Drawdown", "0.000%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "100010"}, diff --git a/Algorithm.CSharp/InsightScoringRegressionAlgorithm.cs b/Algorithm.CSharp/InsightScoringRegressionAlgorithm.cs index af3fff18e5e1..2b0d2b792a72 100644 --- a/Algorithm.CSharp/InsightScoringRegressionAlgorithm.cs +++ b/Algorithm.CSharp/InsightScoringRegressionAlgorithm.cs @@ -173,7 +173,7 @@ public void Score(InsightManager insightManager, DateTime utcTime) {"Estimated Strategy Capacity", "$27000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "59.86%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "f209ed42701b0419858e0100595b40c0"} }; } diff --git a/Algorithm.CSharp/InsightWeightingFrameworkAlgorithm.cs b/Algorithm.CSharp/InsightWeightingFrameworkAlgorithm.cs index 1dfbe9379159..615908a8d400 100644 --- a/Algorithm.CSharp/InsightWeightingFrameworkAlgorithm.cs +++ b/Algorithm.CSharp/InsightWeightingFrameworkAlgorithm.cs @@ -119,7 +119,7 @@ public override void OnEndOfAlgorithm() {"Estimated Strategy Capacity", "$45000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "5.15%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "ae4986890fe7ab09ddb93059888f34c0"} }; } diff --git a/Algorithm.CSharp/InsufficientBuyingPowerForAutomaticExerciseRegressionAlgorithm.cs b/Algorithm.CSharp/InsufficientBuyingPowerForAutomaticExerciseRegressionAlgorithm.cs index 86aff0d031be..acbfc5744a60 100644 --- a/Algorithm.CSharp/InsufficientBuyingPowerForAutomaticExerciseRegressionAlgorithm.cs +++ b/Algorithm.CSharp/InsufficientBuyingPowerForAutomaticExerciseRegressionAlgorithm.cs @@ -192,7 +192,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "8.96%"}, {"Average Loss", "-1.95%"}, {"Compounding Annual Return", "-67.963%"}, - {"Drawdown", "2.900%"}, + {"Drawdown", "2.800%"}, {"Expectancy", "-1"}, {"Start Equity", "100000"}, {"End Equity", "98248.35"}, diff --git a/Algorithm.CSharp/LeveragePrecedenceRegressionAlgorithm.cs b/Algorithm.CSharp/LeveragePrecedenceRegressionAlgorithm.cs index 3d0c40e319b8..9ba717513618 100644 --- a/Algorithm.CSharp/LeveragePrecedenceRegressionAlgorithm.cs +++ b/Algorithm.CSharp/LeveragePrecedenceRegressionAlgorithm.cs @@ -123,7 +123,7 @@ public override void OnData(Slice slice) {"Estimated Strategy Capacity", "$5600000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "379.43%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "b339a5e17142fe5496d80ee26079d8d0"} }; diff --git a/Algorithm.CSharp/ManualContinuousFuturesPositionRolloverRegressionAlgorithm.cs b/Algorithm.CSharp/ManualContinuousFuturesPositionRolloverRegressionAlgorithm.cs index 278346447aff..f14a86a0f9d2 100644 --- a/Algorithm.CSharp/ManualContinuousFuturesPositionRolloverRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ManualContinuousFuturesPositionRolloverRegressionAlgorithm.cs @@ -125,7 +125,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "7.01%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "15.617%"}, - {"Drawdown", "1.600%"}, + {"Drawdown", "1.900%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "107578.9"}, diff --git a/Algorithm.CSharp/MappedBenchmarkRegressionAlgorithm.cs b/Algorithm.CSharp/MappedBenchmarkRegressionAlgorithm.cs index 2058b527cbc8..11d6025fa56c 100644 --- a/Algorithm.CSharp/MappedBenchmarkRegressionAlgorithm.cs +++ b/Algorithm.CSharp/MappedBenchmarkRegressionAlgorithm.cs @@ -104,7 +104,7 @@ public override void OnData(Slice slice) {"Estimated Strategy Capacity", "$180000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "2.30%"}, - {"Drawdown Recovery", "4"}, + {"Drawdown Recovery", "5"}, {"OrderListHash", "a27fe8cbd54877fe74d0536e685196fa"} }; } diff --git a/Algorithm.CSharp/MarginCallClosedMarketRegressionAlgorithm.cs b/Algorithm.CSharp/MarginCallClosedMarketRegressionAlgorithm.cs index 0ea745265122..25028f8e0972 100644 --- a/Algorithm.CSharp/MarginCallClosedMarketRegressionAlgorithm.cs +++ b/Algorithm.CSharp/MarginCallClosedMarketRegressionAlgorithm.cs @@ -134,7 +134,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "0.39%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "1750.998%"}, - {"Drawdown", "5.500%"}, + {"Drawdown", "5.400%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "103801.65"}, diff --git a/Algorithm.CSharp/MaximumDrawdownPercentPerSecurityFrameworkRegressionAlgorithm.cs b/Algorithm.CSharp/MaximumDrawdownPercentPerSecurityFrameworkRegressionAlgorithm.cs index 5a71a76661a7..c90be4d1dd85 100644 --- a/Algorithm.CSharp/MaximumDrawdownPercentPerSecurityFrameworkRegressionAlgorithm.cs +++ b/Algorithm.CSharp/MaximumDrawdownPercentPerSecurityFrameworkRegressionAlgorithm.cs @@ -68,7 +68,7 @@ public override void Initialize() {"Estimated Strategy Capacity", "$74000000.00"}, {"Lowest Capacity Asset", "AAPL R735QTJ8XC9X"}, {"Portfolio Turnover", "6.66%"}, - {"Drawdown Recovery", "0"}, + {"Drawdown Recovery", "1"}, {"OrderListHash", "ab2645a4eeb3bbd6b2862df5260d86b4"} }; } diff --git a/Algorithm.CSharp/MaximumUnrealizedProfitPercentPerSecurityFrameworkRegressionAlgorithm.cs b/Algorithm.CSharp/MaximumUnrealizedProfitPercentPerSecurityFrameworkRegressionAlgorithm.cs index 681d124f1d7f..c51cd933b3ad 100644 --- a/Algorithm.CSharp/MaximumUnrealizedProfitPercentPerSecurityFrameworkRegressionAlgorithm.cs +++ b/Algorithm.CSharp/MaximumUnrealizedProfitPercentPerSecurityFrameworkRegressionAlgorithm.cs @@ -68,7 +68,7 @@ public override void Initialize() {"Estimated Strategy Capacity", "$46000000.00"}, {"Lowest Capacity Asset", "AAPL R735QTJ8XC9X"}, {"Portfolio Turnover", "6.62%"}, - {"Drawdown Recovery", "0"}, + {"Drawdown Recovery", "1"}, {"OrderListHash", "e954f20bd08ee776fa710a325715354e"} }; } diff --git a/Algorithm.CSharp/MinimumOrderMarginRegressionAlgorithm.cs b/Algorithm.CSharp/MinimumOrderMarginRegressionAlgorithm.cs index 87d281eeccaa..3f96566dab8c 100644 --- a/Algorithm.CSharp/MinimumOrderMarginRegressionAlgorithm.cs +++ b/Algorithm.CSharp/MinimumOrderMarginRegressionAlgorithm.cs @@ -64,7 +64,7 @@ public override void Initialize() {"Estimated Strategy Capacity", "$150000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "4.98%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "8774049eb5141a2b6956d9432426f837"} }; } diff --git a/Algorithm.CSharp/NoMarginCallOutsideRegularHoursRegressionAlgorithm.cs b/Algorithm.CSharp/NoMarginCallOutsideRegularHoursRegressionAlgorithm.cs index 014d53e53587..8a3c609c2adc 100644 --- a/Algorithm.CSharp/NoMarginCallOutsideRegularHoursRegressionAlgorithm.cs +++ b/Algorithm.CSharp/NoMarginCallOutsideRegularHoursRegressionAlgorithm.cs @@ -107,7 +107,7 @@ public override void OnMarginCall(List requests) {"Average Win", "0%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "-93.216%"}, - {"Drawdown", "7.100%"}, + {"Drawdown", "7.200%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "96499.74"}, diff --git a/Algorithm.CSharp/NoMinimumOrderMarginRegressionAlgorithm.cs b/Algorithm.CSharp/NoMinimumOrderMarginRegressionAlgorithm.cs index ca64300ba9b4..a4b88df0f486 100644 --- a/Algorithm.CSharp/NoMinimumOrderMarginRegressionAlgorithm.cs +++ b/Algorithm.CSharp/NoMinimumOrderMarginRegressionAlgorithm.cs @@ -102,7 +102,7 @@ public override void OnData(Slice slice) {"Estimated Strategy Capacity", "$63000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "5.15%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "72d5203e9911bad556de371750fe0278"} }; } diff --git a/Algorithm.CSharp/NullOptionAssignmentRegressionAlgorithm.cs b/Algorithm.CSharp/NullOptionAssignmentRegressionAlgorithm.cs index aa24e13b3123..9a968359cfa5 100644 --- a/Algorithm.CSharp/NullOptionAssignmentRegressionAlgorithm.cs +++ b/Algorithm.CSharp/NullOptionAssignmentRegressionAlgorithm.cs @@ -49,7 +49,7 @@ public override void Initialize() {"Average Win", "9.48%"}, {"Average Loss", "-16.73%"}, {"Compounding Annual Return", "-25.790%"}, - {"Drawdown", "0.600%"}, + {"Drawdown", "0.500%"}, {"Expectancy", "-0.478"}, {"Start Equity", "100000"}, {"End Equity", "99538"}, diff --git a/Algorithm.CSharp/ObjectStoreExampleAlgorithm.cs b/Algorithm.CSharp/ObjectStoreExampleAlgorithm.cs index ce3d2c31cb9a..a3970d0ea128 100644 --- a/Algorithm.CSharp/ObjectStoreExampleAlgorithm.cs +++ b/Algorithm.CSharp/ObjectStoreExampleAlgorithm.cs @@ -185,7 +185,7 @@ public override void OnData(Slice slice) {"Estimated Strategy Capacity", "$56000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "19.93%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "3da9fa60bf95b9ed148b95e02e0cfc9e"} }; } diff --git a/Algorithm.CSharp/OptionOTMExpiryOrderHasZeroPriceRegressionAlgorithm.cs b/Algorithm.CSharp/OptionOTMExpiryOrderHasZeroPriceRegressionAlgorithm.cs index 4a0c6a701dfb..99db1b020912 100644 --- a/Algorithm.CSharp/OptionOTMExpiryOrderHasZeroPriceRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionOTMExpiryOrderHasZeroPriceRegressionAlgorithm.cs @@ -181,7 +181,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "0%"}, {"Average Loss", "-3.85%"}, {"Compounding Annual Return", "-7.754%"}, - {"Drawdown", "4.300%"}, + {"Drawdown", "4.400%"}, {"Expectancy", "-1"}, {"Start Equity", "100000"}, {"End Equity", "96148.58"}, diff --git a/Algorithm.CSharp/OrderSubmissionDataRegressionAlgorithm.cs b/Algorithm.CSharp/OrderSubmissionDataRegressionAlgorithm.cs index 5fb54088b678..8442abac4bac 100644 --- a/Algorithm.CSharp/OrderSubmissionDataRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OrderSubmissionDataRegressionAlgorithm.cs @@ -102,7 +102,7 @@ private void PlaceTrade(string ticker) {"Average Win", "0.83%"}, {"Average Loss", "-0.90%"}, {"Compounding Annual Return", "273.871%"}, - {"Drawdown", "3.200%"}, + {"Drawdown", "3.300%"}, {"Expectancy", "0.203"}, {"Start Equity", "100000.00"}, {"End Equity", "101715.67"}, diff --git a/Algorithm.CSharp/PortfolioTargetTagsRegressionAlgorithm.cs b/Algorithm.CSharp/PortfolioTargetTagsRegressionAlgorithm.cs index 025f2876e038..f004884575db 100644 --- a/Algorithm.CSharp/PortfolioTargetTagsRegressionAlgorithm.cs +++ b/Algorithm.CSharp/PortfolioTargetTagsRegressionAlgorithm.cs @@ -176,7 +176,7 @@ public override void Execute(QCAlgorithm algorithm, IPortfolioTarget[] targets) {"Estimated Strategy Capacity", "$27000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "59.86%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "059f940ee51f03f94eb0f13ae4b93134"} }; } diff --git a/Algorithm.CSharp/ScaledFillForwardDataRegressionAlgorithm.cs b/Algorithm.CSharp/ScaledFillForwardDataRegressionAlgorithm.cs index 555ab326fc74..d37c9682f13b 100644 --- a/Algorithm.CSharp/ScaledFillForwardDataRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ScaledFillForwardDataRegressionAlgorithm.cs @@ -117,7 +117,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "0%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "45.475%"}, - {"Drawdown", "0.800%"}, + {"Drawdown", "0.900%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "100497.59"}, diff --git a/Algorithm.CSharp/ScheduledEventsOrderRegressionAlgorithm.cs b/Algorithm.CSharp/ScheduledEventsOrderRegressionAlgorithm.cs index 431232cc467a..fa4bbfedd31b 100644 --- a/Algorithm.CSharp/ScheduledEventsOrderRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ScheduledEventsOrderRegressionAlgorithm.cs @@ -197,7 +197,7 @@ public override void OnData(Slice slice) {"Estimated Strategy Capacity", "$56000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "19.93%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "3da9fa60bf95b9ed148b95e02e0cfc9e"} }; } diff --git a/Algorithm.CSharp/SecurityCustomPropertiesAlgorithm.cs b/Algorithm.CSharp/SecurityCustomPropertiesAlgorithm.cs index d6a441586071..f5a4f7607eb7 100644 --- a/Algorithm.CSharp/SecurityCustomPropertiesAlgorithm.cs +++ b/Algorithm.CSharp/SecurityCustomPropertiesAlgorithm.cs @@ -169,7 +169,7 @@ public override OrderFee GetOrderFee(OrderFeeParameters parameters) {"Average Win", "0.43%"}, {"Average Loss", "-0.08%"}, {"Compounding Annual Return", "84.608%"}, - {"Drawdown", "0.800%"}, + {"Drawdown", "0.700%"}, {"Expectancy", "0.628"}, {"Start Equity", "100000"}, {"End Equity", "100786.91"}, diff --git a/Algorithm.CSharp/SecurityToSymbolRegressionAlgorithm.cs b/Algorithm.CSharp/SecurityToSymbolRegressionAlgorithm.cs index e693e8216605..52651ff55f3c 100644 --- a/Algorithm.CSharp/SecurityToSymbolRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SecurityToSymbolRegressionAlgorithm.cs @@ -98,7 +98,7 @@ public override void Initialize() {"Estimated Strategy Capacity", "$56000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "19.93%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "3da9fa60bf95b9ed148b95e02e0cfc9e"} }; } diff --git a/Algorithm.CSharp/SetCustomSettlementModelRegressionAlgorithm.cs b/Algorithm.CSharp/SetCustomSettlementModelRegressionAlgorithm.cs index 445143394cbe..f30383ca7de0 100644 --- a/Algorithm.CSharp/SetCustomSettlementModelRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SetCustomSettlementModelRegressionAlgorithm.cs @@ -95,7 +95,7 @@ public override void OnEndOfAlgorithm() {"Average Win", "0%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "119.460%"}, - {"Drawdown", "0%"}, + {"Drawdown", "1.000%"}, {"Expectancy", "0"}, {"Start Equity", "10000"}, {"End Equity", "10101"}, diff --git a/Algorithm.CSharp/SetHoldingsMultipleTargetsRegressionAlgorithm.cs b/Algorithm.CSharp/SetHoldingsMultipleTargetsRegressionAlgorithm.cs index 347d8df1d8f8..d73eb8535158 100644 --- a/Algorithm.CSharp/SetHoldingsMultipleTargetsRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SetHoldingsMultipleTargetsRegressionAlgorithm.cs @@ -97,7 +97,7 @@ public override void OnData(Slice data) {"Average Win", "0.00%"}, {"Average Loss", "-0.01%"}, {"Compounding Annual Return", "353.938%"}, - {"Drawdown", "2.300%"}, + {"Drawdown", "2.100%"}, {"Expectancy", "-0.749"}, {"Start Equity", "100000"}, {"End Equity", "101952.99"}, diff --git a/Algorithm.CSharp/ShortableProviderOrdersRejectedRegressionAlgorithm.cs b/Algorithm.CSharp/ShortableProviderOrdersRejectedRegressionAlgorithm.cs index 137414962c37..5b3889e2c4aa 100644 --- a/Algorithm.CSharp/ShortableProviderOrdersRejectedRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ShortableProviderOrdersRejectedRegressionAlgorithm.cs @@ -219,7 +219,7 @@ public RegressionTestShortableProvider() : base("testbrokerage") {"Estimated Strategy Capacity", "$99000000.00"}, {"Lowest Capacity Asset", "AIG R735QTJ8XC9X"}, {"Portfolio Turnover", "0.23%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "4"}, {"OrderListHash", "6d92f0811c31864dfaaccd9eb2edac52"} }; } diff --git a/Algorithm.CSharp/TimeInForceAlgorithm.cs b/Algorithm.CSharp/TimeInForceAlgorithm.cs index 6f18f8ca9fb7..198fd27945a6 100644 --- a/Algorithm.CSharp/TimeInForceAlgorithm.cs +++ b/Algorithm.CSharp/TimeInForceAlgorithm.cs @@ -191,7 +191,7 @@ public override void OnEndOfAlgorithm() {"Estimated Strategy Capacity", "$44000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "0.87%"}, - {"Drawdown Recovery", "3"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "a0588650916ed396fb5793375118e7b3"} }; } diff --git a/Algorithm.CSharp/WarmupFutureRegressionAlgorithm.cs b/Algorithm.CSharp/WarmupFutureRegressionAlgorithm.cs index 9f7dfd84badd..24387548f357 100644 --- a/Algorithm.CSharp/WarmupFutureRegressionAlgorithm.cs +++ b/Algorithm.CSharp/WarmupFutureRegressionAlgorithm.cs @@ -158,7 +158,7 @@ protected void AssertDataTime(DateTime start, DateTime end, List times {"Average Win", "0%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "112.304%"}, - {"Drawdown", "1.400%"}, + {"Drawdown", "1.500%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, {"End Equity", "100620.7"}, @@ -180,7 +180,7 @@ protected void AssertDataTime(DateTime start, DateTime end, List times {"Estimated Strategy Capacity", "$120000000.00"}, {"Lowest Capacity Asset", "ES VP274HSU1AF5"}, {"Portfolio Turnover", "28.05%"}, - {"Drawdown Recovery", "1"}, + {"Drawdown Recovery", "2"}, {"OrderListHash", "1b8fcad46bd578e36bbecdf922b2deb0"} }; } diff --git a/Common/Statistics/AlgorithmPerformance.cs b/Common/Statistics/AlgorithmPerformance.cs index 5b94c81b710d..d9133b99f5cf 100644 --- a/Common/Statistics/AlgorithmPerformance.cs +++ b/Common/Statistics/AlgorithmPerformance.cs @@ -53,6 +53,7 @@ public class AlgorithmPerformance /// Number of losing transactions /// The risk free interest rate model to use /// The number of trading days per year + /// Equity series used only for drawdown calculation public AlgorithmPerformance( List trades, SortedDictionary profitLoss, @@ -64,12 +65,13 @@ public AlgorithmPerformance( int winningTransactions, int losingTransactions, IRiskFreeInterestRateModel riskFreeInterestRateModel, - int tradingDaysPerYear) + int tradingDaysPerYear, + SortedDictionary equityForDrawdown = null) { TradeStatistics = new TradeStatistics(trades); - PortfolioStatistics = new PortfolioStatistics(profitLoss, equity, portfolioTurnover, listPerformance, listBenchmark, startingCapital, - riskFreeInterestRateModel, tradingDaysPerYear, winningTransactions, losingTransactions); + PortfolioStatistics = new PortfolioStatistics(profitLoss, equity, portfolioTurnover, listPerformance, listBenchmark, + startingCapital, riskFreeInterestRateModel, tradingDaysPerYear, winningTransactions, losingTransactions, equityForDrawdown); ClosedTrades = trades; } diff --git a/Common/Statistics/PortfolioStatistics.cs b/Common/Statistics/PortfolioStatistics.cs index 5f8ab2a807dd..b0e47237ebc7 100644 --- a/Common/Statistics/PortfolioStatistics.cs +++ b/Common/Statistics/PortfolioStatistics.cs @@ -208,6 +208,7 @@ public class PortfolioStatistics /// If this and are null, they will be calculated from /// /// The number of losses + /// Equity series used only for drawdown calculation public PortfolioStatistics( SortedDictionary profitLoss, SortedDictionary equity, @@ -218,7 +219,8 @@ public PortfolioStatistics( IRiskFreeInterestRateModel riskFreeInterestRateModel, int tradingDaysPerYear, int? winCount = null, - int? lossCount = null) + int? lossCount = null, + SortedDictionary equityForDrawdown = null) { StartEquity = startingCapital; EndEquity = equity.LastOrDefault().Value; @@ -314,7 +316,7 @@ public PortfolioStatistics( ValueAtRisk99 = GetValueAtRisk(listPerformance, tradingDaysPerYear, 0.99d); ValueAtRisk95 = GetValueAtRisk(listPerformance, tradingDaysPerYear, 0.95d); - var drawdownMetrics = Statistics.CalculateDrawdownMetrics(equity, 3); + var drawdownMetrics = Statistics.CalculateDrawdownMetrics(equityForDrawdown ?? equity, 3); Drawdown = drawdownMetrics.Drawdown; DrawdownRecovery = drawdownMetrics.DrawdownRecovery; } diff --git a/Common/Statistics/StatisticsBuilder.cs b/Common/Statistics/StatisticsBuilder.cs index 7fd403b6e0ef..12042518e6fa 100644 --- a/Common/Statistics/StatisticsBuilder.cs +++ b/Common/Statistics/StatisticsBuilder.cs @@ -46,7 +46,8 @@ public static class StatisticsBuilder /// The transaction manager to get number of winning and losing transactions /// /// The risk free interest rate model to use - /// The number of trading days per year + /// The number of trading days per year + /// Equity series used only for drawdown calculation /// Returns a object public static StatisticsResults Generate( List trades, @@ -62,15 +63,17 @@ public static StatisticsResults Generate( string accountCurrencySymbol, SecurityTransactionManager transactions, IRiskFreeInterestRateModel riskFreeInterestRateModel, - int tradingDaysPerYear) + int tradingDaysPerYear, + List pointsEquityForDrawdown = null) { var equity = ChartPointToDictionary(pointsEquity); + var equityForDrawdown = pointsEquityForDrawdown != null ? ChartPointToDictionary(pointsEquityForDrawdown) : null; var firstDate = equity.Keys.FirstOrDefault().Date; var lastDate = equity.Keys.LastOrDefault().Date; - var totalPerformance = GetAlgorithmPerformance(firstDate, lastDate, trades, profitLoss, equity, pointsPerformance, pointsBenchmark, - pointsPortfolioTurnover, startingCapital, transactions, riskFreeInterestRateModel, tradingDaysPerYear); + var totalPerformance = GetAlgorithmPerformance(firstDate, lastDate, trades, profitLoss, equity, pointsPerformance, + pointsBenchmark, pointsPortfolioTurnover, startingCapital, transactions, riskFreeInterestRateModel, tradingDaysPerYear, equityForDrawdown); var rollingPerformances = GetRollingPerformances(firstDate, lastDate, trades, profitLoss, equity, pointsPerformance, pointsBenchmark, pointsPortfolioTurnover, startingCapital, transactions, riskFreeInterestRateModel, tradingDaysPerYear); var summary = GetSummary(totalPerformance, estimatedStrategyCapacity, totalFees, totalOrders, accountCurrencySymbol); @@ -95,6 +98,7 @@ public static StatisticsResults Generate( /// /// The risk free interest rate model to use /// The number of trading days per year + /// Equity series used only for drawdown calculation /// The algorithm performance private static AlgorithmPerformance GetAlgorithmPerformance( DateTime fromDate, @@ -108,7 +112,8 @@ private static AlgorithmPerformance GetAlgorithmPerformance( decimal startingCapital, SecurityTransactionManager transactions, IRiskFreeInterestRateModel riskFreeInterestRateModel, - int tradingDaysPerYear) + int tradingDaysPerYear, + SortedDictionary equityForDrawdown = null) { var periodEquity = new SortedDictionary(equity.Where(x => x.Key.Date >= fromDate && x.Key.Date < toDate.AddDays(1)).ToDictionary(x => x.Key, y => y.Value)); @@ -145,7 +150,7 @@ private static AlgorithmPerformance GetAlgorithmPerformance( var runningCapital = equity.Count == periodEquity.Count ? startingCapital : periodEquity.Values.FirstOrDefault(); return new AlgorithmPerformance(periodTrades, periodProfitLoss, periodEquity, portfolioTurnover, listPerformance, listBenchmark, - runningCapital, periodWinCount, periodLossCount, riskFreeInterestRateModel, tradingDaysPerYear); + runningCapital, periodWinCount, periodLossCount, riskFreeInterestRateModel, tradingDaysPerYear, equityForDrawdown); } /// diff --git a/Engine/Results/BacktestingResultHandler.cs b/Engine/Results/BacktestingResultHandler.cs index 70051f043138..2ba20a18e641 100644 --- a/Engine/Results/BacktestingResultHandler.cs +++ b/Engine/Results/BacktestingResultHandler.cs @@ -39,6 +39,7 @@ namespace QuantConnect.Lean.Engine.Results public class BacktestingResultHandler : BaseResultsHandler, IResultHandler { private const double Samples = 4000; + private const double DrawdownSamples = 40000; private const double MinimumSamplePeriod = 4; private BacktestNodePacket _job; @@ -59,6 +60,8 @@ public class BacktestingResultHandler : BaseResultsHandler, IResultHandler //Processing Time: private DateTime _nextSample; + private DateTime _nextDrawdownSample; + private TimeSpan _drawdownResamplePeriod; private string _algorithmId; private int _projectId; @@ -460,6 +463,10 @@ public override void SetAlgorithm(IAlgorithm algorithm, decimal startingPortfoli ResamplePeriod = TimeSpan.FromMinutes(resampleMinutes); Log.Trace("BacktestingResultHandler(): Sample Period Set: " + resampleMinutes.ToStringInvariant("00.00")); + // Drawdown uses a finer resample period (10x more samples) for more accurate calculation + var drawdownResampleMinutes = totalMinutes < MinimumSamplePeriod * DrawdownSamples ? MinimumSamplePeriod : totalMinutes / DrawdownSamples; + _drawdownResamplePeriod = TimeSpan.FromMinutes(drawdownResampleMinutes); + ConfigureConsoleTextWriter(algorithm); } @@ -738,7 +745,12 @@ public virtual void ProcessSynchronousEvents(bool forceProcess = false) // Invalidate the processed days count so it gets recalculated _progressMonitor.InvalidateProcessedDays(); - // Update the equity bar + // Update the equity bar and sample close for drawdown at finer granularity + if (time > _nextDrawdownSample || forceProcess) + { + _nextDrawdownSample = time.Add(_drawdownResamplePeriod); + UpdateAlgorithmEquityForDrawdown(time); + } UpdateAlgorithmEquity(); if (time > _nextSample || forceProcess) diff --git a/Engine/Results/BaseResultsHandler.cs b/Engine/Results/BaseResultsHandler.cs index b7163cf4923a..22bd1d90a0ce 100644 --- a/Engine/Results/BaseResultsHandler.cs +++ b/Engine/Results/BaseResultsHandler.cs @@ -58,6 +58,7 @@ public abstract class BaseResultsHandler private string _hostName; private Bar _currentAlgorithmEquity; + private readonly List _equityForDrawdown = new(); private List _temporaryPerformanceValues; private List _temporaryBenchmarkValues; @@ -1066,7 +1067,8 @@ protected StatisticsResults GenerateStatisticsResults(Dictionary statisticsResults = StatisticsBuilder.Generate(trades, profitLoss, equity.Values, performanceValues, benchmarkValues, portfolioTurnover.Values, StartingPortfolioValue, Algorithm.Portfolio.TotalFees, TotalTradesCount(), estimatedStrategyCapacity, AlgorithmCurrencySymbol, Algorithm.Transactions, Algorithm.RiskFreeInterestRateModel, - Algorithm.Settings.TradingDaysPerYear.Value // already set in Brokerage|Backtesting-SetupHandler classes + Algorithm.Settings.TradingDaysPerYear.Value, // already set in Brokerage|Backtesting-SetupHandler classes + _equityForDrawdown.Count > 0 ? _equityForDrawdown : null ); } else @@ -1222,6 +1224,15 @@ protected void UpdateAlgorithmEquity() UpdateAlgorithmEquity(CurrentAlgorithmEquity); } + /// + /// Records the current portfolio close value into the drawdown equity series. + /// Called at a finer sample rate than the chart equity series. + /// + protected void UpdateAlgorithmEquityForDrawdown(DateTime time) + { + _equityForDrawdown.Add(new ChartPoint(time, CurrentAlgorithmEquity.Close)); + } + protected virtual void UpdatePortfolioValues(DateTime time, bool force = false) { _portfolioValue = new ReferenceWrapper(Algorithm?.Portfolio.TotalPortfolioValue ?? 0); diff --git a/Tests/Python/PythonWrapperTests.cs b/Tests/Python/PythonWrapperTests.cs index be2daf7130f9..dc8cad538022 100644 --- a/Tests/Python/PythonWrapperTests.cs +++ b/Tests/Python/PythonWrapperTests.cs @@ -67,7 +67,7 @@ public void SettlementModelPythonWrapperWorks() {"Average Win", "0%"}, {"Average Loss", "0%"}, {"Compounding Annual Return", "119.460%"}, - {"Drawdown", "0%"}, + {"Drawdown", "1.000%"}, {"Expectancy", "0"}, {"Net Profit", "1.010%"}, {"Sharpe Ratio", "-5.989"},