---
id: "E:cAlgo.API.OptimizationProcess.Completed"
kind: "event"
type: "T:cAlgo.API.OptimizationProcess"
url: "https://help.ctrader.com/ctrader-algo/references/Plugin/Optimization/OptimizationProcess/Completed/"
---

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

# OptimizationProcess.Completed

Member of [OptimizationProcess](https://help.ctrader.com/ctrader-algo/references/Plugin/Optimization/OptimizationProcess/index.md).

## Completed

Occurs when the optimization process is completed.

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.

C#:

```csharp
event Action<OptimizationCompletedEventArgs> Completed;
```

Python:

```python
optimizationProcess.Completed += handler  # handler(obj: OptimizationCompletedEventArgs)
```

### Returns

`Action<OptimizationCompletedEventArgs>` — 

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.Completed += args => Print("Optimization completed, best pass: {0}", args.BestPass?.Id);
```

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.Completed += lambda args: api.Print(f"Optimization completed, passes: {args.Process.Passes.Count}")
```

