diff --git a/.github/workflows/api-tests.yml b/.github/workflows/api-tests.yml index a9361f687038..b3965a54960d 100644 --- a/.github/workflows/api-tests.yml +++ b/.github/workflows/api-tests.yml @@ -9,14 +9,19 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 # Only run on push events (not on pull_request) for security reasons in order to be able to use secrets if: ${{ github.event_name == 'push' }} steps: - name: Checkout uses: actions/checkout@v2 - - name: Free space - run: df -h && rm -rf /usr/share/dotnet && sudo rm -rf /usr/local/lib/android && sudo rm -rf /opt/ghc && rm -rf /opt/hostedtoolcache* && df -h + - name: Liberate disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: true + large-packages: false + docker-images: false + swap-storage: false - name: Run API Tests uses: addnab/docker-run-action@v3 with: diff --git a/.github/workflows/gh-actions.yml b/.github/workflows/gh-actions.yml index fd4345487441..1e69c304cbaa 100644 --- a/.github/workflows/gh-actions.yml +++ b/.github/workflows/gh-actions.yml @@ -9,12 +9,18 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@v2 - - name: Free space - run: df -h && rm -rf /usr/share/dotnet && sudo rm -rf /usr/local/lib/android && sudo rm -rf /opt/ghc && rm -rf /opt/hostedtoolcache* && df -h + + - name: Liberate disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: true + large-packages: false + docker-images: false + swap-storage: false - uses: addnab/docker-run-action@v3 with: diff --git a/.github/workflows/rebase-org-branches.yml b/.github/workflows/rebase-org-branches.yml index a5f95a522213..aaaa1c4e2b6f 100644 --- a/.github/workflows/rebase-org-branches.yml +++ b/.github/workflows/rebase-org-branches.yml @@ -7,7 +7,7 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v2 with: diff --git a/.github/workflows/regression-tests.yml b/.github/workflows/regression-tests.yml index a8891dc2fff3..130e72ccd2e9 100644 --- a/.github/workflows/regression-tests.yml +++ b/.github/workflows/regression-tests.yml @@ -9,12 +9,17 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@v2 - - name: Free space - run: df -h && rm -rf /usr/share/dotnet && sudo rm -rf /usr/local/lib/android && sudo rm -rf /opt/ghc && rm -rf /opt/hostedtoolcache* && df -h + - name: Liberate disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: true + large-packages: false + docker-images: false + swap-storage: false - uses: addnab/docker-run-action@v3 with: diff --git a/.github/workflows/report-generator.yml b/.github/workflows/report-generator.yml index e50a885c4f6e..718693575cf1 100644 --- a/.github/workflows/report-generator.yml +++ b/.github/workflows/report-generator.yml @@ -9,12 +9,17 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@v2 - - name: Free space - run: df -h && rm -rf /usr/share/dotnet && sudo rm -rf /usr/local/lib/android && sudo rm -rf /opt/ghc && rm -rf /opt/hostedtoolcache* && df -h + - name: Liberate disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: true + large-packages: false + docker-images: false + swap-storage: false - uses: addnab/docker-run-action@v3 with: diff --git a/.github/workflows/research-regression-tests.yml b/.github/workflows/research-regression-tests.yml index 4b300feeb0e5..8e55b8666cb3 100644 --- a/.github/workflows/research-regression-tests.yml +++ b/.github/workflows/research-regression-tests.yml @@ -9,12 +9,17 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@v2 - - name: Free space - run: df -h && rm -rf /usr/share/dotnet && sudo rm -rf /usr/local/lib/android && sudo rm -rf /opt/ghc && rm -rf /opt/hostedtoolcache* && df -h + - name: Liberate disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: true + large-packages: false + docker-images: false + swap-storage: false - uses: addnab/docker-run-action@v3 with: diff --git a/.github/workflows/virtual-environments.yml b/.github/workflows/virtual-environments.yml index c840aefd9b4e..22f876a8abd6 100644 --- a/.github/workflows/virtual-environments.yml +++ b/.github/workflows/virtual-environments.yml @@ -9,12 +9,17 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@v2 - - name: Free space - run: df -h && rm -rf /usr/share/dotnet && sudo rm -rf /usr/local/lib/android && sudo rm -rf /opt/ghc && rm -rf /opt/hostedtoolcache* && df -h + - name: Liberate disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: true + large-packages: false + docker-images: false + swap-storage: false - uses: addnab/docker-run-action@v3 with: diff --git a/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj b/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj index bf9c3ff262da..3b86b148aaec 100644 --- a/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj +++ b/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Algorithm.CSharp QuantConnect.Algorithm.CSharp - net6.0 + net9.0 false bin\$(Configuration)\ AllEnabledByDefault diff --git a/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj b/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj index fa1f265c6a54..84f5c496f0a5 100644 --- a/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj +++ b/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Algorithm.Framework QuantConnect.Algorithm.Framework - net6.0 + net9.0 false bin\$(Configuration)\ AllEnabledByDefault diff --git a/Algorithm.Python/CallbackCommandRegressionAlgorithm.py b/Algorithm.Python/CallbackCommandRegressionAlgorithm.py index 094b86b158cd..6fe1f06b9433 100644 --- a/Algorithm.Python/CallbackCommandRegressionAlgorithm.py +++ b/Algorithm.Python/CallbackCommandRegressionAlgorithm.py @@ -76,7 +76,7 @@ def initialize(self): bool_command.something_else = { "Property": 10 } bool_command.array_test = [ "SPY", "BTCUSD" ] link = self.link(bool_command) - if "&command[array_test][0]=SPY&command[array_test][1]=BTCUSD&command[result]=True&command[something_else][Property]=10&command[$type]=BoolCommand" not in link: + if "&command%5barray_test%5d%5b0%5d=SPY&command%5barray_test%5d%5b1%5d=BTCUSD&command%5bresult%5d=True&command%5bsomething_else%5d%5bProperty%5d=10&command%5b%24type%5d=BoolCommand" not in link: raise ValueError(f'Invalid link was generated! {link}') potential_command = VoidCommand() @@ -85,12 +85,12 @@ def initialize(self): potential_command.parameters = { "tag": "Signal X" } command_link = self.link(potential_command) - if "command[target][0]=BAC&command[quantity]=10&command[parameters][tag]=Signal+X&command[$type]=VoidCommand" not in command_link: + if "&command%5btarget%5d%5b0%5d=BAC&command%5bquantity%5d=10&command%5bparameters%5d%5btag%5d=Signal+X&command%5b%24type%5d=VoidCommand" not in command_link: raise ValueError(f'Invalid link was generated! {command_link}') self.notify.email("email@address", "Trade Command Event", f"Signal X trade\nFollow link to trigger: {command_link}") untyped_command_link = self.link({ "symbol": "SPY", "parameters": { "quantity": 10 } }) - if "&command[symbol]=SPY&command[parameters][quantity]=10" not in untyped_command_link: + if "&command%5bsymbol%5d=SPY&command%5bparameters%5d%5bquantity%5d=10" not in untyped_command_link: raise ValueError(f'Invalid link was generated! {untyped_command_link}') self.notify.email("email@address", "Untyped Command Event", f"Signal Y trade\nFollow link to trigger: {untyped_command_link}") diff --git a/Algorithm.Python/QuantConnect.Algorithm.Python.csproj b/Algorithm.Python/QuantConnect.Algorithm.Python.csproj index eab90b412dad..661aa9769e96 100644 --- a/Algorithm.Python/QuantConnect.Algorithm.Python.csproj +++ b/Algorithm.Python/QuantConnect.Algorithm.Python.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Algorithm.Python QuantConnect.Algorithm.Python - net6.0 + net9.0 AllEnabledByDefault bin\$(Configuration)\ false diff --git a/Algorithm/QuantConnect.Algorithm.csproj b/Algorithm/QuantConnect.Algorithm.csproj index af31c8e90149..2f56b3634017 100644 --- a/Algorithm/QuantConnect.Algorithm.csproj +++ b/Algorithm/QuantConnect.Algorithm.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Algorithm QuantConnect.Algorithm - net6.0 + net9.0 ..\ false AllEnabledByDefault diff --git a/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj b/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj index 29f454310502..1cfd0a97ade2 100644 --- a/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj +++ b/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.AlgorithmFactory QuantConnect.AlgorithmFactory - net6.0 + net9.0 false bin\$(Configuration)\ AllEnabledByDefault diff --git a/Api/QuantConnect.Api.csproj b/Api/QuantConnect.Api.csproj index 109e307ff0d2..ce418f98ec03 100644 --- a/Api/QuantConnect.Api.csproj +++ b/Api/QuantConnect.Api.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Api QuantConnect.Api - net6.0 + net9.0 ..\ true AllEnabledByDefault diff --git a/Brokerages/QuantConnect.Brokerages.csproj b/Brokerages/QuantConnect.Brokerages.csproj index cc3a37530ffb..d2222ce6e49a 100644 --- a/Brokerages/QuantConnect.Brokerages.csproj +++ b/Brokerages/QuantConnect.Brokerages.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Brokerages QuantConnect.Brokerages - net6.0 + net9.0 AllEnabledByDefault false bin\$(Configuration)\ diff --git a/Common/Brokerages/BybitBrokerageModel.cs b/Common/Brokerages/BybitBrokerageModel.cs index 7c6a3e5295ac..d687ba88ad12 100644 --- a/Common/Brokerages/BybitBrokerageModel.cs +++ b/Common/Brokerages/BybitBrokerageModel.cs @@ -15,6 +15,7 @@ using System; using System.Collections.Generic; +using System.Linq; using QuantConnect.Benchmarks; using QuantConnect.Orders; using QuantConnect.Orders.Fees; diff --git a/Common/QuantConnect.csproj b/Common/QuantConnect.csproj index 088dfd992381..ca20add0d8f8 100644 --- a/Common/QuantConnect.csproj +++ b/Common/QuantConnect.csproj @@ -2,7 +2,7 @@ Debug AnyCPU - net6.0 + net9.0 QuantConnect.Common ..\ true diff --git a/Common/Util/LinqExtensions.cs b/Common/Util/LinqExtensions.cs index 2117e2d03b82..38c4ae89ec58 100644 --- a/Common/Util/LinqExtensions.cs +++ b/Common/Util/LinqExtensions.cs @@ -26,18 +26,6 @@ namespace QuantConnect.Util /// public static class LinqExtensions { - /// - /// Creates a dictionary enumerable of key value pairs - /// - /// The key type - /// The value type - /// The IEnumerable of KeyValuePair instances to convert to a dictionary - /// A dictionary holding the same data as the enumerable - public static Dictionary ToDictionary(this IEnumerable> enumerable) - { - return enumerable.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); - } - /// /// Creates a new read-only dictionary from the key value pairs /// diff --git a/Compression/QuantConnect.Compression.csproj b/Compression/QuantConnect.Compression.csproj index 083aefed130b..c5f4799bfbed 100644 --- a/Compression/QuantConnect.Compression.csproj +++ b/Compression/QuantConnect.Compression.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Compression QuantConnect.Compression - net6.0 + net9.0 AllEnabledByDefault false bin\$(Configuration)\ diff --git a/Configuration/QuantConnect.Configuration.csproj b/Configuration/QuantConnect.Configuration.csproj index f0ef8301c96a..9b27b189cedf 100644 --- a/Configuration/QuantConnect.Configuration.csproj +++ b/Configuration/QuantConnect.Configuration.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Configuration QuantConnect.Configuration - net6.0 + net9.0 ..\ true AllEnabledByDefault diff --git a/DockerfileJupyter b/DockerfileJupyter index 52c078e3e99c..669021394b67 100644 --- a/DockerfileJupyter +++ b/DockerfileJupyter @@ -37,9 +37,6 @@ ENV PYTHONPATH=${WORK}:${PYTHONPATH} RUN mkdir -p /root/.ipython/profile_default/startup/ && \ ln -s /Lean/Launcher/bin/Debug/start.py /root/.ipython/profile_default/startup/start.py -# conda libc is old and causes issues in research we want to use the hosts version which is updated -RUN mkdir -p /opt/miniconda3/lib/ && ln -vsf /lib/x86_64-linux-gnu/libstdc++.so.6 /opt/miniconda3/lib/libstdc++.so.6 - RUN find ${WORK} -type f -not -name '*.py*' -not -name '*.xml' -not -name '*.exe.config' -not -name '*.exe' -not -name '*.so' -not -name '*.dll' -not -name '*.ipynb' -not -name '*.csx' -not -name 'QuantConnect.Lean.Launcher.runtimeconfig.json' -not -name 'decimal.py' -delete # Create initialize script diff --git a/DownloaderDataProvider/QuantConnect.DownloaderDataProvider.Launcher.csproj b/DownloaderDataProvider/QuantConnect.DownloaderDataProvider.Launcher.csproj index 54f42879b7ad..470a284a7adb 100644 --- a/DownloaderDataProvider/QuantConnect.DownloaderDataProvider.Launcher.csproj +++ b/DownloaderDataProvider/QuantConnect.DownloaderDataProvider.Launcher.csproj @@ -6,7 +6,7 @@ Exe QuantConnect.DownloaderDataProvider.Launcher QuantConnect.DownloaderDataProvider.Launcher - net6.0 + net9.0 AllEnabledByDefault false bin\$(Configuration)\ diff --git a/Engine/DataFeeds/DataQueueHandlerManager.cs b/Engine/DataFeeds/DataQueueHandlerManager.cs index 7a842f3ce957..715ae3a034f7 100644 --- a/Engine/DataFeeds/DataQueueHandlerManager.cs +++ b/Engine/DataFeeds/DataQueueHandlerManager.cs @@ -32,7 +32,6 @@ namespace QuantConnect.Lean.Engine.DataFeeds /// public class DataQueueHandlerManager : IDataQueueHandler, IDataQueueUniverseProvider { - private ITimeProvider _frontierTimeProvider; private readonly IAlgorithmSettings _algorithmSettings; private readonly Dictionary> _dataConfigAndDataHandler = new(); @@ -44,6 +43,12 @@ public DataQueueHandlerManager(IAlgorithmSettings settings) _algorithmSettings = settings; } + /// + /// Frontier time provider to use + /// + /// Protected for testing purposes + protected ITimeProvider FrontierTimeProvider { get; set; } + /// /// Collection of data queue handles being used /// @@ -73,7 +78,7 @@ public IEnumerator Subscribe(SubscriptionDataConfig dataConfig, EventH { // Emit ticks & custom data as soon as we get them, they don't need any kind of batching behavior applied to them // only use the frontier time provider if we need to - var immediateEmission = dataConfig.Resolution == Resolution.Tick || dataConfig.IsCustomData || _frontierTimeProvider == null; + var immediateEmission = dataConfig.Resolution == Resolution.Tick || dataConfig.IsCustomData || FrontierTimeProvider == null; var exchangeTimeZone = dataConfig.ExchangeTimeZone; IEnumerator enumerator; @@ -84,7 +89,7 @@ public IEnumerator Subscribe(SubscriptionDataConfig dataConfig, EventH // let's only wake up the main thread if the data point is allowed to be emitted, else we could fill forward previous bar and not let this one through var dataAvailable = eventArgs as NewDataAvailableEventArgs; if (dataAvailable == null || dataAvailable.DataPoint == null - || dataAvailable.DataPoint.EndTime.ConvertToUtc(exchangeTimeZone) <= _frontierTimeProvider.GetUtcNow()) + || dataAvailable.DataPoint.EndTime.ConvertToUtc(exchangeTimeZone) <= FrontierTimeProvider.GetUtcNow()) { newDataAvailableHandler?.Invoke(sender, eventArgs); } @@ -113,7 +118,7 @@ public IEnumerator Subscribe(SubscriptionDataConfig dataConfig, EventH return enumerator; } - var utcStartTime = _frontierTimeProvider.GetUtcNow(); + var utcStartTime = FrontierTimeProvider.GetUtcNow(); var exchangeHours = MarketHoursDatabase.FromDataFolder().GetExchangeHours(dataConfig.Symbol.ID.Market, dataConfig.Symbol, dataConfig.Symbol.SecurityType); if (LeanData.UseStrictEndTime(_algorithmSettings.DailyPreciseEndTime, dataConfig.Symbol, dataConfig.Increment, exchangeHours)) @@ -122,7 +127,7 @@ public IEnumerator Subscribe(SubscriptionDataConfig dataConfig, EventH enumerator = new StrictDailyEndTimesEnumerator(enumerator, exchangeHours, utcStartTime.ConvertFromUtc(exchangeTimeZone)); } - return new FrontierAwareEnumerator(enumerator, _frontierTimeProvider, + return new FrontierAwareEnumerator(enumerator, FrontierTimeProvider, new TimeZoneOffsetProvider(exchangeTimeZone, utcStartTime, Time.EndOfTime) ); } @@ -178,7 +183,7 @@ public void SetJob(LiveNodePacket job) DataHandlers.Add(dataHandler); } - _frontierTimeProvider = InitializeFrontierTimeProvider(); + FrontierTimeProvider = InitializeFrontierTimeProvider(); } /// diff --git a/Engine/DataFeeds/Enumerators/LiveSubscriptionEnumerator.cs b/Engine/DataFeeds/Enumerators/LiveSubscriptionEnumerator.cs index 0c7ae62b4f0d..917f21ad2ea0 100644 --- a/Engine/DataFeeds/Enumerators/LiveSubscriptionEnumerator.cs +++ b/Engine/DataFeeds/Enumerators/LiveSubscriptionEnumerator.cs @@ -80,7 +80,14 @@ public bool MoveNext() } var result = _underlyingEnumerator.MoveNext(); - _current = _underlyingEnumerator.Current; + if (result) + { + _current = _underlyingEnumerator.Current; + } + else + { + _current = null; + } if (_current != null && _current.Symbol != _requestedSymbol) { diff --git a/Engine/DataFeeds/Enumerators/RefreshEnumerator.cs b/Engine/DataFeeds/Enumerators/RefreshEnumerator.cs index 72fa82616bba..4c5954e0a744 100644 --- a/Engine/DataFeeds/Enumerators/RefreshEnumerator.cs +++ b/Engine/DataFeeds/Enumerators/RefreshEnumerator.cs @@ -60,7 +60,10 @@ public bool MoveNext() try { moveNext = _enumerator.MoveNext(); - _current = _enumerator.Current; + if (moveNext) + { + _current = _enumerator.Current; + } } catch (IOException exception) { diff --git a/Engine/QuantConnect.Lean.Engine.csproj b/Engine/QuantConnect.Lean.Engine.csproj index 5d4f43417f73..090746c15c64 100644 --- a/Engine/QuantConnect.Lean.Engine.csproj +++ b/Engine/QuantConnect.Lean.Engine.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Lean.Engine QuantConnect.Lean.Engine - net6.0 + net9.0 ..\ true publish\ diff --git a/Indicators/QuantConnect.Indicators.csproj b/Indicators/QuantConnect.Indicators.csproj index b044f2f14180..1736fc61357d 100644 --- a/Indicators/QuantConnect.Indicators.csproj +++ b/Indicators/QuantConnect.Indicators.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Indicators QuantConnect.Indicators - net6.0 + net9.0 AllEnabledByDefault false bin\$(Configuration)\ diff --git a/Launcher/QuantConnect.Lean.Launcher.csproj b/Launcher/QuantConnect.Lean.Launcher.csproj index be72e18761df..d948abec2537 100644 --- a/Launcher/QuantConnect.Lean.Launcher.csproj +++ b/Launcher/QuantConnect.Lean.Launcher.csproj @@ -5,7 +5,7 @@ Exe QuantConnect.Lean.Launcher QuantConnect.Lean.Launcher - net6.0 + net9.0 AllEnabledByDefault false bin\$(Configuration)\ diff --git a/Logging/QuantConnect.Logging.csproj b/Logging/QuantConnect.Logging.csproj index 4e4aa64991b8..7c932c6eb0d7 100644 --- a/Logging/QuantConnect.Logging.csproj +++ b/Logging/QuantConnect.Logging.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Logging QuantConnect.Logging - net6.0 + net9.0 ..\ true AllEnabledByDefault diff --git a/Messaging/QuantConnect.Messaging.csproj b/Messaging/QuantConnect.Messaging.csproj index a37c4480c6c2..76e896c2c550 100644 --- a/Messaging/QuantConnect.Messaging.csproj +++ b/Messaging/QuantConnect.Messaging.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Messaging QuantConnect.Messaging - net6.0 + net9.0 AllEnabledByDefault false bin\$(Configuration)\ diff --git a/Optimizer.Launcher/QuantConnect.Optimizer.Launcher.csproj b/Optimizer.Launcher/QuantConnect.Optimizer.Launcher.csproj index ddd049dcad3d..7d740baac8bf 100644 --- a/Optimizer.Launcher/QuantConnect.Optimizer.Launcher.csproj +++ b/Optimizer.Launcher/QuantConnect.Optimizer.Launcher.csproj @@ -5,7 +5,7 @@ Exe QuantConnect.Optimizer.Launcher QuantConnect.Optimizer.Launcher - net6.0 + net9.0 true false bin\$(Configuration)\ diff --git a/Optimizer/QuantConnect.Optimizer.csproj b/Optimizer/QuantConnect.Optimizer.csproj index fd82049e648d..d1ffd365f640 100644 --- a/Optimizer/QuantConnect.Optimizer.csproj +++ b/Optimizer/QuantConnect.Optimizer.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Optimizer QuantConnect.Optimizer - net6.0 + net9.0 true false bin\$(Configuration)\ diff --git a/Queues/QuantConnect.Queues.csproj b/Queues/QuantConnect.Queues.csproj index 013e69d19a75..83822ebc3894 100644 --- a/Queues/QuantConnect.Queues.csproj +++ b/Queues/QuantConnect.Queues.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Queues QuantConnect.Queues - net6.0 + net9.0 false bin\$(Configuration)\ bin\$(Configuration)\QuantConnect.Queues.xml diff --git a/Report/QuantConnect.Report.csproj b/Report/QuantConnect.Report.csproj index d35d6b1d3e04..a8ceb5240cdf 100644 --- a/Report/QuantConnect.Report.csproj +++ b/Report/QuantConnect.Report.csproj @@ -5,7 +5,7 @@ Exe QuantConnect.Report QuantConnect.Report - net6.0 + net9.0 true false bin\$(Configuration)\ diff --git a/Research/QuantConnect.Research.csproj b/Research/QuantConnect.Research.csproj index e5bc65cd1c5e..c6c609a2cabf 100644 --- a/Research/QuantConnect.Research.csproj +++ b/Research/QuantConnect.Research.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Research QuantConnect.Research - net6.0 + net9.0 AllEnabledByDefault bin\$(Configuration)\ false diff --git a/Tests/Api/AuthenticationTests.cs b/Tests/Api/AuthenticationTests.cs index 495cc1969b46..c171b8809b68 100644 --- a/Tests/Api/AuthenticationTests.cs +++ b/Tests/Api/AuthenticationTests.cs @@ -45,7 +45,7 @@ public void PopulateQueryString() var queryString = HttpUtility.ParseQueryString(string.Empty); Authentication.PopulateQueryString(queryString, new[] { new KeyValuePair("command", payload) }); - Assert.AreEqual("command[SomeArray][0]=1&command[SomeArray][1]=2&command[SomeArray][2]=3&command[Symbol]=SPY&command[Parameters][Quantity]=10", queryString.ToString()); + Assert.AreEqual("command%5bSomeArray%5d%5b0%5d=1&command%5bSomeArray%5d%5b1%5d=2&command%5bSomeArray%5d%5b2%5d=3&command%5bSymbol%5d=SPY&command%5bParameters%5d%5bQuantity%5d=10", queryString.ToString()); } } } diff --git a/Tests/Indicators/PythonIndicatorNoinheritanceTests.cs b/Tests/Indicators/PythonIndicatorNoinheritanceTests.cs index f895a4f59de7..cafef8f5c64a 100644 --- a/Tests/Indicators/PythonIndicatorNoinheritanceTests.cs +++ b/Tests/Indicators/PythonIndicatorNoinheritanceTests.cs @@ -96,7 +96,7 @@ protected override void RunTestIndicator(IndicatorBase indicator) } if (closeIndex * targetIndex < 0) { - Assert.Fail($"Didn't find one of 'Close' or '{line}' in the header: ", TestColumnName); + Assert.Fail($"Didn't find one of 'Close' or '{TestColumnName}' in the header: {line}"); } continue; diff --git a/Tests/Indicators/PythonIndicatorNoinheritanceTestsLegacy.cs b/Tests/Indicators/PythonIndicatorNoinheritanceTestsLegacy.cs index 662b144b0868..b247d37f0c96 100644 --- a/Tests/Indicators/PythonIndicatorNoinheritanceTestsLegacy.cs +++ b/Tests/Indicators/PythonIndicatorNoinheritanceTestsLegacy.cs @@ -95,7 +95,7 @@ protected override void RunTestIndicator(IndicatorBase indicator) } if (closeIndex * targetIndex < 0) { - Assert.Fail($"Didn't find one of 'Close' or '{line}' in the header: ", TestColumnName); + Assert.Fail($"Didn't find one of 'Close' or '{TestColumnName}' in the header: {line}"); } continue; diff --git a/Tests/Indicators/PythonIndicatorTests.cs b/Tests/Indicators/PythonIndicatorTests.cs index b572219f7586..a2807ce13bd9 100644 --- a/Tests/Indicators/PythonIndicatorTests.cs +++ b/Tests/Indicators/PythonIndicatorTests.cs @@ -112,7 +112,7 @@ protected override void RunTestIndicator(IndicatorBase indicator) } if (closeIndex * targetIndex < 0) { - Assert.Fail($"Didn't find one of 'Close' or '{line}' in the header: ", TestColumnName); + Assert.Fail($"Didn't find one of 'Close' or '{TestColumnName}' in the header: {line}"); } continue; diff --git a/Tests/Indicators/TestHelper.cs b/Tests/Indicators/TestHelper.cs index 21b08d17fd2b..0eac582ffde7 100644 --- a/Tests/Indicators/TestHelper.cs +++ b/Tests/Indicators/TestHelper.cs @@ -75,7 +75,7 @@ public static void TestIndicator(IndicatorBase indicator, st { if (!(parts.ContainsKey("Close") && parts.ContainsKey(targetColumn))) { - Assert.Fail("Didn't find one of 'Close' or '{0}' in the header.", targetColumn); + Assert.Fail($"Didn't find one of 'Close' or '{targetColumn}' in the header."); break; } diff --git a/Tests/QuantConnect.Tests.csproj b/Tests/QuantConnect.Tests.csproj index 88daa6e7d5f5..0a712089fda9 100644 --- a/Tests/QuantConnect.Tests.csproj +++ b/Tests/QuantConnect.Tests.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Tests QuantConnect.Tests - net6.0 + net9.0 ..\ AllEnabledByDefault false @@ -45,13 +45,20 @@ - - + + all + + + + + + + diff --git a/ToolBox/QuantConnect.ToolBox.csproj b/ToolBox/QuantConnect.ToolBox.csproj index 782dc9c5f97a..9ae34cc44de9 100644 --- a/ToolBox/QuantConnect.ToolBox.csproj +++ b/ToolBox/QuantConnect.ToolBox.csproj @@ -5,7 +5,7 @@ Exe QuantConnect.ToolBox QuantConnect.ToolBox - net6.0 + net9.0 AllEnabledByDefault false bin\$(Configuration)\