---
id: "P:cAlgo.API.OptimizationProcess.Passes"
kind: "property"
type: "T:cAlgo.API.OptimizationProcess"
url: "https://help.ctrader.com/ctrader-algo/references/Plugin/Optimization/OptimizationProcess/Passes/"
---

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

# OptimizationProcess.Passes

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

## Passes

Gets the passes completed so far, ordered by pass id. While running this grows as passes finish; on completion it holds every pass.

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
IReadOnlyList<OptimizationPass> Passes {get;}
```

Python:

```python
optimizationProcess.Passes: Sequence[OptimizationPass]
```

### Returns

`IReadOnlyList<OptimizationPass>` — 

Available since cAlgo.API 5.9.

### Examples

C#:

```csharp
Optimization.Completed += args =>
{
    var profitablePasses = args.Process.Passes.Count(pass => pass.NetProfit > 0);
    Print("{0} of {1} passes were profitable", profitablePasses, args.Process.Passes.Count);
};
```

Python:

```python
def on_start(self):
    api.Optimization.Completed += self.on_optimization_completed

def on_optimization_completed(self, args):
    profitablePasses = len([p for p in args.Process.Passes if p.NetProfit > 0])
    api.Print(f"{profitablePasses} of {args.Process.Passes.Count} passes were profitable")
```

