Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
de360a72f8 |
11
.github/workflows/api-tests.yml
vendored
11
.github/workflows/api-tests.yml
vendored
@@ -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:
|
||||
|
||||
12
.github/workflows/gh-actions.yml
vendored
12
.github/workflows/gh-actions.yml
vendored
@@ -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:
|
||||
|
||||
2
.github/workflows/rebase-org-branches.yml
vendored
2
.github/workflows/rebase-org-branches.yml
vendored
@@ -7,7 +7,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
|
||||
11
.github/workflows/regression-tests.yml
vendored
11
.github/workflows/regression-tests.yml
vendored
@@ -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:
|
||||
|
||||
11
.github/workflows/report-generator.yml
vendored
11
.github/workflows/report-generator.yml
vendored
@@ -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:
|
||||
|
||||
11
.github/workflows/research-regression-tests.yml
vendored
11
.github/workflows/research-regression-tests.yml
vendored
@@ -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:
|
||||
|
||||
11
.github/workflows/virtual-environments.yml
vendored
11
.github/workflows/virtual-environments.yml
vendored
@@ -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:
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Algorithm.CSharp</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Algorithm.CSharp</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Algorithm.Framework</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Algorithm.Framework</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
|
||||
@@ -76,7 +76,7 @@ class CallbackCommandRegressionAlgorithm(QCAlgorithm):
|
||||
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 @@ class CallbackCommandRegressionAlgorithm(QCAlgorithm):
|
||||
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}")
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Algorithm.Python</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Algorithm.Python</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Algorithm</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Algorithm</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.AlgorithmFactory</RootNamespace>
|
||||
<AssemblyName>QuantConnect.AlgorithmFactory</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Api</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Api</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||
<RestorePackages>true</RestorePackages>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Brokerages</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Brokerages</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using QuantConnect.Benchmarks;
|
||||
using QuantConnect.Orders;
|
||||
using QuantConnect.Orders.Fees;
|
||||
|
||||
@@ -4376,9 +4376,14 @@ namespace QuantConnect
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieve a common custom data types from the given symbols if any
|
||||
/// </summary>
|
||||
/// <param name="symbols">The target symbols to search</param>
|
||||
/// <returns>The custom data type or null</returns>
|
||||
public static Type GetCustomDataTypeFromSymbols(Symbol[] symbols)
|
||||
{
|
||||
if (symbols.Any())
|
||||
if (symbols.Length != 0)
|
||||
{
|
||||
if (!SecurityIdentifier.TryGetCustomDataTypeInstance(symbols[0].ID.Symbol, out var dataType)
|
||||
|| symbols.Any(x => !SecurityIdentifier.TryGetCustomDataTypeInstance(x.ID.Symbol, out var customDataType) || customDataType != dataType))
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<AssemblyName>QuantConnect.Common</AssemblyName>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||
<RestorePackages>true</RestorePackages>
|
||||
|
||||
@@ -26,18 +26,6 @@ namespace QuantConnect.Util
|
||||
/// </summary>
|
||||
public static class LinqExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a dictionary enumerable of key value pairs
|
||||
/// </summary>
|
||||
/// <typeparam name="K">The key type</typeparam>
|
||||
/// <typeparam name="V">The value type</typeparam>
|
||||
/// <param name="enumerable">The IEnumerable of KeyValuePair instances to convert to a dictionary</param>
|
||||
/// <returns>A dictionary holding the same data as the enumerable</returns>
|
||||
public static Dictionary<K, V> ToDictionary<K, V>(this IEnumerable<KeyValuePair<K, V>> enumerable)
|
||||
{
|
||||
return enumerable.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new read-only dictionary from the key value pairs
|
||||
/// </summary>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Compression</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Compression</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Configuration</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Configuration</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||
<RestorePackages>true</RestorePackages>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>QuantConnect.DownloaderDataProvider.Launcher</RootNamespace>
|
||||
<AssemblyName>QuantConnect.DownloaderDataProvider.Launcher</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
|
||||
@@ -32,7 +32,6 @@ namespace QuantConnect.Lean.Engine.DataFeeds
|
||||
/// </summary>
|
||||
public class DataQueueHandlerManager : IDataQueueHandler, IDataQueueUniverseProvider
|
||||
{
|
||||
private ITimeProvider _frontierTimeProvider;
|
||||
private readonly IAlgorithmSettings _algorithmSettings;
|
||||
private readonly Dictionary<SubscriptionDataConfig, Queue<IDataQueueHandler>> _dataConfigAndDataHandler = new();
|
||||
|
||||
@@ -44,6 +43,12 @@ namespace QuantConnect.Lean.Engine.DataFeeds
|
||||
_algorithmSettings = settings;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Frontier time provider to use
|
||||
/// </summary>
|
||||
/// <remarks>Protected for testing purposes</remarks>
|
||||
protected ITimeProvider FrontierTimeProvider { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Collection of data queue handles being used
|
||||
/// </summary>
|
||||
@@ -73,7 +78,7 @@ namespace QuantConnect.Lean.Engine.DataFeeds
|
||||
{
|
||||
// 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<BaseData> enumerator;
|
||||
@@ -84,7 +89,7 @@ namespace QuantConnect.Lean.Engine.DataFeeds
|
||||
// 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 @@ namespace QuantConnect.Lean.Engine.DataFeeds
|
||||
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 @@ namespace QuantConnect.Lean.Engine.DataFeeds
|
||||
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 @@ namespace QuantConnect.Lean.Engine.DataFeeds
|
||||
DataHandlers.Add(dataHandler);
|
||||
}
|
||||
|
||||
_frontierTimeProvider = InitializeFrontierTimeProvider();
|
||||
FrontierTimeProvider = InitializeFrontierTimeProvider();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -80,7 +80,14 @@ namespace QuantConnect.Lean.Engine.DataFeeds.Enumerators
|
||||
}
|
||||
|
||||
var result = _underlyingEnumerator.MoveNext();
|
||||
_current = _underlyingEnumerator.Current;
|
||||
if (result)
|
||||
{
|
||||
_current = _underlyingEnumerator.Current;
|
||||
}
|
||||
else
|
||||
{
|
||||
_current = null;
|
||||
}
|
||||
|
||||
if (_current != null && _current.Symbol != _requestedSymbol)
|
||||
{
|
||||
|
||||
@@ -60,7 +60,10 @@ namespace QuantConnect.Lean.Engine.DataFeeds.Enumerators
|
||||
try
|
||||
{
|
||||
moveNext = _enumerator.MoveNext();
|
||||
_current = _enumerator.Current;
|
||||
if (moveNext)
|
||||
{
|
||||
_current = _enumerator.Current;
|
||||
}
|
||||
}
|
||||
catch (IOException exception)
|
||||
{
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Lean.Engine</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Lean.Engine</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||
<RestorePackages>true</RestorePackages>
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Indicators</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Indicators</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>QuantConnect.Lean.Launcher</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Lean.Launcher</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Logging</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Logging</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||
<RestorePackages>true</RestorePackages>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Messaging</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Messaging</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>QuantConnect.Optimizer.Launcher</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Optimizer.Launcher</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Optimizer</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Optimizer</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Queues</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Queues</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
<DocumentationFile>bin\$(Configuration)\QuantConnect.Queues.xml</DocumentationFile>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>QuantConnect.Report</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Report</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Research</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Research</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace QuantConnect.Tests.API
|
||||
var queryString = HttpUtility.ParseQueryString(string.Empty);
|
||||
Authentication.PopulateQueryString(queryString, new[] { new KeyValuePair<string, object>("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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ class CustomSimpleMovingAverage():
|
||||
}
|
||||
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;
|
||||
|
||||
@@ -95,7 +95,7 @@ class CustomSimpleMovingAverage():
|
||||
}
|
||||
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;
|
||||
|
||||
@@ -112,7 +112,7 @@ class CustomSimpleMovingAverage(PythonIndicator):
|
||||
}
|
||||
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;
|
||||
|
||||
@@ -75,7 +75,7 @@ namespace QuantConnect.Tests.Indicators
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<RootNamespace>QuantConnect.Tests</RootNamespace>
|
||||
<AssemblyName>QuantConnect.Tests</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
@@ -45,13 +45,20 @@
|
||||
<PackageReference Include="NetMQ" Version="4.0.1.6" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
|
||||
<PackageReference Include="NodaTime" Version="3.0.5" />
|
||||
<PackageReference Include="NUnit" Version="3.13.3" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1">
|
||||
<PackageReference Include="NUnit" Version="4.2.2" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="protobuf-net" Version="3.1.33" />
|
||||
<PackageReference Include="RestSharp" Version="106.12.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Using Include="NUnit.Framework.Legacy.ClassicAssert" Alias="Assert" />
|
||||
<Using Include="NUnit.Framework.Legacy.CollectionAssert" Alias="CollectionAssert" />
|
||||
<Using Include="NUnit.Framework.Legacy.StringAssert" Alias="StringAssert" />
|
||||
<Using Include="NUnit.Framework.Legacy.DirectoryAssert" Alias="DirectoryAssert" />
|
||||
<Using Include="NUnit.Framework.Legacy.FileAssert" Alias="FileAssert" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\Common\Properties\SharedAssemblyInfo.cs" Link="Properties\SharedAssemblyInfo.cs" />
|
||||
<Content Include="Research\RegressionScripts\Test_QuantBookIndicator.py">
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>QuantConnect.ToolBox</RootNamespace>
|
||||
<AssemblyName>QuantConnect.ToolBox</AssemblyName>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
||||
|
||||
Reference in New Issue
Block a user