Skip to content

Commit 7942296

Browse files
committed
Minor fixes and cleanup
1 parent 535583d commit 7942296

File tree

2 files changed

+12
-16
lines changed

2 files changed

+12
-16
lines changed

Common/Api/OptimizationBacktestJsonConverter.cs

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ namespace QuantConnect.Api
3030
/// </summary>
3131
public class OptimizationBacktestJsonConverter : JsonConverter
3232
{
33-
3433
private static Dictionary<string, int> StatisticsIndices = new()
3534
{
3635
{ PerformanceMetrics.Alpha, 0 },
@@ -60,19 +59,10 @@ public class OptimizationBacktestJsonConverter : JsonConverter
6059
{ PerformanceMetrics.DrawdownRecovery, 24 },
6160
};
6261

63-
private static string[] _statisticNames;
64-
65-
private static string[] StatisticNames
66-
{
67-
get
68-
{
69-
_statisticNames ??= StatisticsIndices
70-
.OrderBy(kvp => kvp.Value)
71-
.Select(kvp => kvp.Key)
72-
.ToArray();
73-
return _statisticNames;
74-
}
75-
}
62+
private static string[] StatisticNames { get; } = StatisticsIndices
63+
.OrderBy(kvp => kvp.Value)
64+
.Select(kvp => kvp.Key)
65+
.ToArray();
7666

7767
// Only 21 Lean statistics where supported when the serialized statistics where a json array
7868
private static int ArrayStatisticsCount = 21;
@@ -211,9 +201,11 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
211201
{
212202
if (jStatistics.Type == JTokenType.Array)
213203
{
204+
var statsCount = Math.Min(ArrayStatisticsCount, (jStatistics as JArray).Count);
214205
statistics = new Dictionary<string, string>(StatisticsIndices
215-
.Take(ArrayStatisticsCount)
216-
.Select(kvp => KeyValuePair.Create(kvp.Key, jStatistics[kvp.Value].Value<string>())));
206+
.Where(kvp => kvp.Value < statsCount)
207+
.Select(kvp => KeyValuePair.Create(kvp.Key, jStatistics[kvp.Value].Value<string>()))
208+
.Where(kvp => kvp.Value != null));
217209
}
218210
else
219211
{

Tests/Api/OptimizationBacktestJsonConverterTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ public class OptimizationBacktestJsonConverterTests
5252
private const string _validOldStatsDeserialization3 = "{\"name\":\"ImABacktestName\",\"id\":\"backtestId\",\"progress\":0.0,\"exitCode\":0," +
5353
"\"statistics\":[0.374,0.217,0.047,-4.51,2.86,-0.664,52.602,17.800,6300000.00,0.196,1.571,27.0,123.888,77.188,0.63,1.707,1390.49,180.0,0.233,-0.558,73.0]," +
5454
"\"parameterSet\":{\"pinocho\":\"19\",\"pepe\":\"-1\"},\"equity\":[[1,1.0],[2,2.0],[3,3.0]]}";
55+
private const string _validOldStatsDeserializationWithLessStats = "{\"name\":\"ImABacktestName\",\"id\":\"backtestId\",\"progress\":0.0,\"exitCode\":0," +
56+
"\"statistics\":[0.374,0.217,0.047,-4.51,2.86,-0.664,52.602,17.800,6300000.00,0.196,1.571,27.0,123.888,77.188,0.63]," +
57+
"\"parameterSet\":{\"pinocho\":\"19\",\"pepe\":\"-1\"},\"equity\":[[1,1.0],[2,2.0],[3,3.0]]}";
5558

5659
[Test]
5760
public void SerializationNulls()
@@ -187,6 +190,7 @@ public void SerializationWithCustomStatistics()
187190
[TestCase(_validOldStatsDeserialization, false, 21)]
188191
[TestCase(_validOldStatsDeserialization2, false, 21)]
189192
[TestCase(_validOldStatsDeserialization3, false, 21)]
193+
[TestCase(_validOldStatsDeserializationWithLessStats, false, 15)]
190194
[TestCase(_validSerializationWithCustomStats, true, 25)]
191195
public void Deserialization(string serialization, bool hasCustomStats, int expectedLeanStats)
192196
{

0 commit comments

Comments
 (0)