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

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

# BacktestingDataRequest (interface)

Represents a backtesting data request for a 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.

## Definition

```csharp
public interface BacktestingDataRequest
```

Available since cAlgo.API 5.3.

## Examples

C#:

```csharp
private void OnDataRequested(BacktestingDataRequest request)
{
    Print("{0} data requested for {1} from {2} to {3}", request.DataType, request.PriceDataSourceId.Symbol.Name, request.StartTime, request.EndTime);
    if (request.DataType != BacktestingDataSourceDataType.Tick)
    {
        request.Fail("Only tick data is provided by this data source");
        return;
    }
    var ticks = MarketData.GetTicks(request.PriceDataSourceId.Symbol.Name);
    var data = ticks.Where(tick => tick.Time >= request.StartTime && tick.Time <= request.EndTime)
        .Select(tick => new BacktestingTick(tick.Time, tick.Bid, tick.Ask));
    request.Complete(new BacktestingTickData(data));
}
```

Python:

```python
from System import Array

def on_data_requested(self, request):
    api.Print(f"{request.DataType} data requested for {request.PriceDataSourceId.Symbol.Name} from {request.StartTime} to {request.EndTime}")
    if request.DataType != BacktestingDataSourceDataType.Tick:
        request.Fail("Only tick data is provided by this data source")
        return
    ticks = api.MarketData.GetTicks(request.PriceDataSourceId.Symbol.Name)
    data = [BacktestingTick(tick.Time, tick.Bid, tick.Ask) for tick in ticks if tick.Time >= request.StartTime and tick.Time <= request.EndTime]
    request.Complete(BacktestingTickData(Array[BacktestingTick](data)))
```

## Methods

- `void Complete(BacktestingData data)` — Completes current request. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Backtesting/DataSource/BacktestingDataRequest/Complete/index.md)
- `void Fail(string errorMessage)` — Notifies current request failure if something went wrong. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Backtesting/DataSource/BacktestingDataRequest/Fail/index.md)

## Properties

- `BacktestingDataSourceDataType DataType {get;}` — Gets request data type. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Backtesting/DataSource/BacktestingDataRequest/DataType/index.md)
- `DateTime EndTime {get;}` — Gets request end time. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Backtesting/DataSource/BacktestingDataRequest/EndTime/index.md)
- `PriceDataSourceId PriceDataSourceId {get;}` — Gets request price data source Id (Symbol and TimeFrame). [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Backtesting/DataSource/BacktestingDataRequest/PriceDataSourceId/index.md)
- `DateTime StartTime {get;}` — Gets request start time. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Backtesting/DataSource/BacktestingDataRequest/StartTime/index.md)
- `BacktestingDataRequestStatus Status {get;}` — Gets current status of request. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Backtesting/DataSource/BacktestingDataRequest/Status/index.md)

## Events

- `event Action<BacktestingDataRequestStatusChangedEventArgs> StatusChanged;` — Occurs when request status is changed. [details](https://help.ctrader.com/ctrader-algo/references/Plugin/Backtesting/DataSource/BacktestingDataRequest/StatusChanged/index.md)

