{"record":{"id":"ed0c865a1920dfd1","repo":"StockSharp/StockSharp","slug":"specified-argument-was-out-of-the-range-of-valid-v-ed0c86","errorCode":null,"errorMessage":"Specified argument was out of the range of valid values. (Parameter 'parameters')","messagePattern":"Specified argument was out of the range of valid values\\. \\(Parameter 'parameters'\\)","errorType":"validation","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"Algo.Gpu/Indicators/GpuPassThroughCalculator.cs","lineNumber":53,"sourceCode":"\t/// <param name=\"context\">ILGPU context.</param>\n\t/// <param name=\"accelerator\">ILGPU accelerator.</param>\n\tpublic GpuPassThroughCalculator(Context context, Accelerator accelerator)\n\t\t: base(context, accelerator)\n\t{\n\t\t_kernel = Accelerator.LoadAutoGroupedStreamKernel<Index3D, ArrayView<GpuCandle>, ArrayView<GpuIndicatorResult>, ArrayView<int>, ArrayView<int>, ArrayView<GpuPassThroughParams>>(PassThroughParamsSeriesKernel);\n\t}\n\n\t/// <inheritdoc />\n\tpublic override GpuIndicatorResult[][][] Calculate(GpuCandle[][] candlesSeries, GpuPassThroughParams[] parameters)\n\t{\n\t\tArgumentNullException.ThrowIfNull(candlesSeries);\n\t\tArgumentNullException.ThrowIfNull(parameters);\n\n\t\tif (candlesSeries.Length == 0)\n\t\t\tthrow new ArgumentOutOfRangeException(nameof(candlesSeries));\n\n\t\tif (parameters.Length == 0)\n\t\t\tthrow new ArgumentOutOfRangeException(nameof(parameters));\n\n\t\tvar seriesCount = candlesSeries.Length;\n\n\t\tvar totalSize = 0;\n\t\tvar seriesOffsets = new int[seriesCount];\n\t\tvar seriesLengths = new int[seriesCount];\n\n\t\tfor (var s = 0; s < seriesCount; s++)\n\t\t{\n\t\t\tseriesOffsets[s] = totalSize;\n\t\t\tvar len = candlesSeries[s]?.Length ?? 0;\n\t\t\tseriesLengths[s] = len;\n\t\t\ttotalSize += len;\n\t\t}\n\n\t\tvar flatCandles = new GpuCandle[totalSize];\n\t\tvar maxLen = 0;\n\t\tvar offset = 0;","sourceCodeStart":35,"sourceCodeEnd":71,"githubUrl":"https://github.com/StockSharp/StockSharp/blob/601a191de678bff83da28b14828f8885214ca71c/Algo.Gpu/Indicators/GpuPassThroughCalculator.cs#L35-L71","documentation":"GpuPassThroughCalculator.Calculate throws ArgumentOutOfRangeException when parameters is empty. The guard at line 52-53 requires at least one GpuPassThroughParams entry since kernel extents and output sizing depend on parameters.Length.","triggerScenarios":"Calling GpuPassThroughCalculator.Calculate(candles, Array.Empty<GpuPassThroughParams>()). A params builder returns an empty array because no variants matched a config range.","commonSituations":"A pass-through diagnostic harness where the params list is built from a filter that can be empty. Config reloads that drop all param entries. Param sweeps whose min/step/range resolve to zero iterations.","solutions":["Check parameters.Length > 0 before the call and short-circuit with an empty result if no variants are needed.","Ensure the upstream param builder always yields at least a default entry.","Catch ArgumentOutOfRangeException only as a last resort; validation-first is the contract this class enforces."],"exampleFix":"// before\ncalc.Calculate(candles, params);\n\n// after\nif (params.Length == 0)\n    return Array.Empty<GpuIndicatorResult[][]>();\ncalc.Calculate(candles, params);","handlingStrategy":"validation","validationCode":"if (parameters is null || parameters.Length == 0)\n    return Array.Empty<GpuIndicatorResult[][]>();\nvar results = calculator.Calculate(candlesSeries, parameters);","typeGuard":"static bool HasParams<T>(T[] parameters) => parameters is { Length: > 0 };","tryCatchPattern":null,"preventionTips":["Always validate parameters.Length > 0 at the pipeline boundary before invoking any GPU calculator.","Make param builders guarantee at least a default entry rather than returning empty arrays.","Treat empty params as a valid 'no work' case and short-circuit with an empty result."],"tags":["argument-validation","gpu","indicator","pass-through","precondition"],"backgroundTag":null,"analyzedSha":"601a191de678bff83da28b14828f8885214ca71c","analyzedAt":"2026-08-13T20:43:24.460Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}