{"record":{"id":"3fcb2ec5849e0bd6","repo":"StockSharp/StockSharp","slug":"nameof-minspreadstepcount-minspreadstepcount","errorCode":null,"errorMessage":"{nameof(MinSpreadStepCount)} ({MinSpreadStepCount}) > {nameof(MaxSpreadStepCount)} ({MaxSpreadStepCount})","messagePattern":"(.+?) \\((.+?)\\) > (.+?) \\((.+?)\\)","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"Algo.Testing/Generation/MarketDepthGenerator.cs","lineNumber":117,"sourceCode":"\t\t\t_maxAsksDepth = value;\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// Shall order books be generated after each trade. The default is <see langword=\"false\" />.\n\t/// </summary>\n\tpublic bool GenerateDepthOnEachTrade { get; set; }\n\n\t/// <summary>\n\t/// Generate <see cref=\"QuoteChange.OrdersCount\"/>.\n\t/// </summary>\n\tpublic bool GenerateOrdersCount { get; set; }\n\n\t/// <inheritdoc />\n\tpublic override void Init()\n\t{\n\t\tif (MinSpreadStepCount > MaxSpreadStepCount)\n\t\t\tthrow new ArgumentException($\"{nameof(MinSpreadStepCount)} ({MinSpreadStepCount}) > {nameof(MaxSpreadStepCount)} ({MaxSpreadStepCount})\");\n\n\t\tbase.Init();\n\t}\n\n\tprivate int _maxGenerations = 20;\n\n\t/// <summary>\n\t/// The maximal number of generations after last occurrence of source data for the order book.\n\t/// </summary>\n\t/// <remarks>\n\t/// The default value equals 20.\n\t/// </remarks>\n\tpublic int MaxGenerations\n\t{\n\t\tget => _maxGenerations;\n\t\tset\n\t\t{\n\t\t\tif (value < 1)","sourceCodeStart":99,"sourceCodeEnd":135,"githubUrl":"https://github.com/StockSharp/StockSharp/blob/601a191de678bff83da28b14828f8885214ca71c/Algo.Testing/Generation/MarketDepthGenerator.cs#L99-L135","documentation":"Thrown by MarketDepthGenerator.Init() when MinSpreadStepCount is greater than MaxSpreadStepCount. The spread is sampled uniformly inside [min,max], so an inverted range is a configuration contradiction. This cross-property invariant is only checked at Init, not at each setter.","triggerScenarios":"Calling gen.Init() after setting MinSpreadStepCount above MaxSpreadStepCount (e.g. Min=5, Max=2). Also fires if you raise Min without also raising Max, or lower Max below an existing Min.","commonSituations":"Config where min-spread > max-spread; UI letting users set bounds independently without a cross-check; loading partial overrides that leave the pair inconsistent.","solutions":["Ensure MinSpreadStepCount <= MaxSpreadStepCount before calling Init().","After loading config, normalize: if min > max, set max = min (or clamp min to max).","Add a UI/validation rule that rejects inverted bounds at edit time."],"exampleFix":"// before\ngen.MinSpreadStepCount = 5;\ngen.MaxSpreadStepCount = 2;\ngen.Init(); // throws\n// after\ngen.MinSpreadStepCount = 5;\ngen.MaxSpreadStepCount = Math.Max(5, cfgMax);\ngen.Init();","handlingStrategy":"validation","validationCode":"if (minSpread > maxSpread)\n    throw new InvalidOperationException($\"min {minSpread} > max {maxSpread}\");\ngen.MinSpreadStepCount = minSpread;\ngen.MaxSpreadStepCount = maxSpread;\ngen.Init();","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Cross-check MinSpreadStepCount <= MaxSpreadStepCount before Init().","Normalize inverted bounds at config load (set max = max(min, cfgMax)).","Add a UI rule rejecting inverted ranges at edit time."],"tags":["validation","market-depth-generator","argument","initialization","configuration"],"backgroundTag":null,"analyzedSha":"601a191de678bff83da28b14828f8885214ca71c","analyzedAt":"2026-08-13T20:43:24.460Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}