Files
quantconnect--lean/Tests/Engine/AlgorithmTimeLimitManagerTests.cs
Martin-Molinero bbbab6d9a8
Regression Tests / build (push) Has been cancelled
Python Virtual Environments / build (push) Has been cancelled
Benchmarks / build (push) Has been cancelled
Build & Test Lean / build (push) Has been cancelled
Research Regression Tests / build (push) Has been cancelled
Refactor alpha statistics phase I (#7055)
* Refactor alpha statistics

- Refactor alpha statistics, cleaning up and simplifying no longer required calculations and scoring
- Adding new InsightEvaluator abstraction, adding C# & PY regression
  algorithms

* Optimization backtest result json converter update

* Address reviews

- Remove IAlphaHandler, move insight storage responsability to IResultHandler
  and centralizing insight collection on the QCAlgorithm.Insights to be
  reused by the framework models
- Fix portfolio turnover single day backtests and duplicate time
  sampling handling. Updating regression algorithms

* Add InsightCollection tests and minor fixes

* Adding more & improved tests
2023-03-10 13:12:23 -03:00

88 lines
2.7 KiB
C#

/*
* QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals.
* Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using NUnit.Framework;
using QuantConnect.Algorithm.CSharp;
using QuantConnect.Configuration;
using QuantConnect.Lean.Engine;
using QuantConnect.Util.RateLimit;
namespace QuantConnect.Tests.Engine
{
[TestFixture]
public class AlgorithmTimeLimitManagerTests
{
[OneTimeSetUp]
public void TearUp()
{
// clear the config
Config.Reset();
}
[OneTimeTearDown]
public void TearDown()
{
// clear the config
Config.Reset();
}
[Test]
public void StopsAlgorithm()
{
Config.Set("algorithm-manager-time-loop-maximum", "0.05");
var parameter = new RegressionTests.AlgorithmStatisticsTestParameters(nameof(TrainingInitializeRegressionAlgorithm),
new Dictionary<string, string>(),
Language.CSharp,
AlgorithmStatus.RuntimeError);
AlgorithmRunner.RunLocalBacktest(parameter.Algorithm,
parameter.Statistics,
parameter.Language,
parameter.ExpectedFinalStatus);
}
[Test]
public void RaceCondition()
{
var timeManager = new AlgorithmTimeLimitManager(TokenBucket.Null, TimeSpan.FromMinutes(1));
const int loops = 1000000;
var task = Task.Factory.StartNew(() =>
{
var count = 0;
while (count++ < loops)
{
var result = timeManager.IsWithinLimit();
Assert.IsTrue(result.IsWithinCustomLimits, result.ErrorMessage);
}
});
var task2 = Task.Factory.StartNew(() =>
{
var count = 0;
while (count++ < loops)
{
timeManager.StartNewTimeStep();
}
});
Task.WaitAll(task, task2);
}
}
}