---
id: "M:cAlgo.API.BacktestingDataSources.Add(System.String,cAlgo.API.BacktestingDataSourceOptions)"
kind: "method"
type: "T:cAlgo.API.BacktestingDataSources"
url: "https://help.ctrader.com/ctrader-algo/references/Plugin/Backtesting/DataSource/BacktestingDataSources/Add/"
---

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

# BacktestingDataSources.Add

Member of [BacktestingDataSources](https://help.ctrader.com/ctrader-algo/references/Plugin/Backtesting/DataSource/BacktestingDataSources/index.md).

## Add(string name, BacktestingDataSourceOptions options)

Adds a new backtesting data source.

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
BacktestingDataSource Add(string name, BacktestingDataSourceOptions options)
```

Python:

```python
backtestingDataSources.Add(name: str, options: BacktestingDataSourceOptions) -> BacktestingDataSource
```

### Parameters

- `name` (`string`, Python `str`): Data source unique name.
- `options` (`BacktestingDataSourceOptions`, Python `BacktestingDataSourceOptions`): Data source options.

### Returns

`BacktestingDataSource` — BacktestingDataSource

Available since cAlgo.API 5.3.

### Examples

C#:

```csharp
protected override void OnStart()
{
    var options = new BacktestingDataSourceOptions(BacktestingDataSourceDataType.OpenPrices, OnMinMaxTimeRequested, OnDataRequested);
    var dataSource = Backtesting.DataSources.Add("My Data", options);
    Print("Added backtesting data source {0}", dataSource.Name);
}

private BacktestingMinMaxTime OnMinMaxTimeRequested(BacktestingDataSourceMinMaxTimeArgs args)
{
    return new BacktestingMinMaxTime(Server.Time.AddYears(-1), Server.Time);
}

private void OnDataRequested(BacktestingDataRequest request)
{
    var bars = MarketData.GetBars(request.PriceDataSourceId.TimeFrame, request.PriceDataSourceId.Symbol.Name);
    var data = bars.Where(bar => bar.OpenTime >= request.StartTime && bar.OpenTime <= request.EndTime)
        .Select(bar => new BacktestingBar(bar.OpenTime, bar.Open, bar.High, bar.Low, bar.Close, (long)bar.TickVolume))
        .ToArray();
    request.Complete(new BacktestingBarsData(data));
}
```

Python:

```python
from System import Action, Func, Array

def on_start(self):
    options = BacktestingDataSourceOptions(BacktestingDataSourceDataType.OpenPrices, Func[BacktestingDataSourceMinMaxTimeArgs, BacktestingMinMaxTime](self.on_min_max_time_requested), Action[BacktestingDataRequest](self.on_data_requested))
    dataSource = api.Backtesting.DataSources.Add("My Data", options)
    api.Print(f"Added backtesting data source {dataSource.Name}")

def on_min_max_time_requested(self, args):
    return BacktestingMinMaxTime(api.Server.Time.AddYears(-1), api.Server.Time)

def on_data_requested(self, request):
    bars = api.MarketData.GetBars(request.PriceDataSourceId.TimeFrame, request.PriceDataSourceId.Symbol.Name)
    data = [BacktestingBar(bar.OpenTime, bar.Open, bar.High, bar.Low, bar.Close, int(bar.TickVolume)) for bar in bars if bar.OpenTime >= request.StartTime and bar.OpenTime <= request.EndTime]
    request.Complete(BacktestingBarsData(Array[BacktestingBar](data)))
```

