---
id: "T:cAlgo.API.OptimizationProcess"
kind: "interface"
namespace: "cAlgo.API"
url: "https://help.ctrader.com/ctrader-algo/references/Plugin/Optimization/OptimizationProcess/"
---

> Documentation index for agents: https://help.ctrader.com/ctrader-algo/llms.txt · machine index: https://help.ctrader.com/ctrader-algo/api.json

# OptimizationProcess (interface)

Represents an optimization process with methods and properties to monitor its status and results.

Environments: Desktop supported · CLI not supported · Cloud not supported.

- CLI: Available to plugins only, and plugins cannot run in the CLI.
- Cloud: Available to plugins only, and plugins cannot run in the cloud.

## Definition

```csharp
public interface OptimizationProcess
```

Available since cAlgo.API 5.9.

## Examples

C#:

```csharp
if (AlgoRegistry.Get("Sample Trend cBot", AlgoKind.Robot) is not RobotType robotType)
    return;
var criteria = new[] { new OptimizationCriterion(OptimizationCriterionType.NetProfit, OptimizationCriterionDirection.Maximize) };
var settings = new OptimizationSettings(new DateTime(2025, 1, 1), new DateTime(2025, 2, 1), 10000, criteria);
var process = Optimization.Start(robotType, "EURUSD", TimeFrame.Hour, settings, new OptimizationIntegerParameter("SlowPeriods", 5, 50, 5));
process.ProgressChanged += args => Print("Progress: {0:F1}%", args.Progress);
process.Completed += args => Print("Completed with {0} passes, error: {1}", process.Passes.Count, process.OptimizationError);
```

Python:

```python
from System import DateTime
algoType = api.AlgoRegistry.Get("Sample Trend cBot", AlgoKind.Robot)
if algoType is None:
    return
criteria = [OptimizationCriterion(OptimizationCriterionType.NetProfit, OptimizationCriterionDirection.Maximize)]
settings = OptimizationSettings(DateTime(2025, 1, 1), DateTime(2025, 2, 1), 10000, criteria)
process = api.Optimization.Start(RobotType(algoType), "EURUSD", TimeFrame.Hour, settings, OptimizationIntegerParameter("SlowPeriods", 5, 50, 5))
process.ProgressChanged += lambda args: api.Print(f"Progress: {args.Progress:.1f}%")
process.Completed += lambda args: api.Print(f"Completed with {args.Process.Passes.Count} passes, error: {args.Process.OptimizationError}")
```

## Methods

- `void Terminate()` — Terminates the optimization process. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Optimization/OptimizationProcess/Terminate/index.md)

## Properties

- `OptimizationPass BestPass {get;}` — Gets the best pass by the configured criteria or custom fitness, or null if no pass has completed. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Optimization/OptimizationProcess/BestPass/index.md)
- `bool IsCompleted {get;}` — Gets a value indicating whether the optimization process is completed. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Optimization/OptimizationProcess/IsCompleted/index.md)
- `string JsonReport {get;}` — Gets the optimization result as JSON (the .optres content): configuration plus every pass with its statistics. Returns null if the optimization is not finished or an error occurred. The format matches the desktop optimization "Save results", so the JSON can be opened or imported by the desktop optimization UI. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Optimization/OptimizationProcess/JsonReport/index.md)
- `OptimizationError OptimizationError {get;}` — Gets the error information if the optimization process failed. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Optimization/OptimizationProcess/OptimizationError/index.md)
- `IReadOnlyList<OptimizationPass> Passes {get;}` — Gets the passes completed so far, ordered by pass id. While running this grows as passes finish; on completion it holds every pass. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Optimization/OptimizationProcess/Passes/index.md)

## Events

- `event Action<OptimizationCompletedEventArgs> Completed;` — Occurs when the optimization process is completed. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Optimization/OptimizationProcess/Completed/index.md)
- `event Action<OptimizationPassCompletedEventArgs> PassCompleted;` — Occurs when an individual optimization pass completes. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Optimization/OptimizationProcess/PassCompleted/index.md)
- `event Action<OptimizationProgressChangedEventArgs> ProgressChanged;` — Occurs when the optimization progress changes. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Optimization/OptimizationProcess/ProgressChanged/index.md)

