# DataMarketplace

Signals Framework is designed to enable you to create strategies based on any data stream. At the moment, we are offering historical data from crypto exchanges, which you can access in your strategy through the `Bars` method of the `DataMarketplace` object.

## Select market(s) from the Data Marketplace

#### Single Market Strategies

For [Single Market Strategies](https://help.signals.network/getting-started/strategies/strategy-types/single-market-strategy), the dropdown in the Markets section in the editor sidebar lets you select a single market that wil be available for your strategy. At any time, you can select a different market from the dropdown and replace the one already connected with your strategy. This way you can run the the model on different markets without a need of changing a single line of code.

![](https://1280131605-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LL8qCacd77-C_Tcc0xo%2F-LnCgFblrigBuk7tLYC3%2F-LnCW2yKdQTfh1I-4AH5%2FScreenshot%202019-08-26%2012.41.15.png?alt=media\&token=1a9d375c-8516-44f5-ae29-bc5611658928)

#### Multi Market Strategies

For [Multi Market Strategies](https://help.signals.network/getting-started/strategies/strategy-types/multi-market-strategy), you can select multiple markets for a single strategy. Each selected market has indicated and index to the right of the dropdown, which can be used in code to reference the market. In the code, you can access the concrete market with array index operator indicated to the right next to each dropdown - e.g. use `Markets[1]` for the ETH/USDT asset pairing on Poloniex.

![Selecting a third data series, it will be accessible through Markets\[2\] in the code.](https://1280131605-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LL8qCacd77-C_Tcc0xo%2F-LnCgFblrigBuk7tLYC3%2F-LnCXwUB-bFPy5dnihMW%2FScreenshot%202019-08-26%2012.49.14.png?alt=media\&token=1a5ff6ea-f1fd-49f6-895b-e12359976d2e)

## Initialize bars on the market(s)

### Bars Method

Define the time scale of the constructed bars by specifing the period type and length. For 5-minute bars, the period type should be set to Minute and period to 5. &#x20;

#### Parameters

| Name         | Type          | Description                                                                                                                           |
| ------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `periodType` | BarPeriodType | Period type together with period defines the time scale of Bars which you want to use. PeriodType could be Minute, Hour, or Day.      |
| `period`     | int           | The number of periods which define the size of the Bar. For 5-minute bars, the BarPeriodType should be set to Minute and period to 5. |

#### Example

{% tabs %}
{% tab title="Basic example" %}

```csharp
// Using Bars method for initializing 1 day bars
dailyBars = data.Bars(BarPeriodType.Day, 1)

// Using Bars method for initializing 5 hours bars
fiveHourBar = data.Bars(BarPeriodType.Hour, 5)
```

{% endtab %}

{% tab title="Complete example" %}

```csharp
using Signals.DataSeries.Bars;
using Signals.Framework;

public class MyStrategy : SingleMarketStrategy
{
    private Bars dailyBars;

    public override void Setup(DataMarketplace data, IndicatorsMarketplace indicators)
    {
        dailyBars = data.Bars(BarPeriodType.Day, 1).WithOffset(2);
    }

    public override void RegisterActions()
    {
        OnUpdateOf(dailyBars).Do(() =>
        {
            // Prints the latest close value value
            Log("The latest close value is " + dailyBars[0].Close.ToString());
            
            // Prints the previous close value value
            Log("The previous close value is " + dailyBars[1].Close.ToString());
        });
    }
}
```

{% endtab %}
{% endtabs %}

### OnMarket Method

This is an optional method, which is useful only in [Multi Market Strategies](https://help.signals.network/getting-started/strategies/strategy-types/multi-market-strategy). It allows you to define [market](https://help.signals.network/framework-documentation/untitled/properties/market) on which you want to construct the series on. You don't need to use this method with [Single Market Strategies](https://help.signals.network/getting-started/strategies/strategy-types/single-market-strategy) - if this method is not used, the default value is applied - `Markets[0]` - i.e. the first market selected in the strategy settings in the sidebar.

#### Parameters

| Name     | Type                                                                                      | Description                                            |
| -------- | ----------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| `market` | [Market](https://help.signals.network/framework-documentation/untitled/properties/market) | Market on which you want to construct the data series. |

#### Example

{% tabs %}
{% tab title="Basic example" %}

```csharp
// Initiating 1 day bars with the second selected market
ethBars = data.Bars(BarPeriodType.Day, 1).OnMarket(Markets[1])
```

{% endtab %}

{% tab title="Complete example" %}

```csharp
using Signals.DataSeries.Bars;
using Signals.Framework;

public class MyStrategy : SingleMarketStrategy
{
    private Bars dailyBarsFirstMarket;
    private Bars dailyBarsSecondMarket;

    public override void Setup(DataMarketplace data, IndicatorsMarketplace indicators)
    {
        dailyBarsFirstMarket = data.Bars(BarPeriodType.Day, 1).OnMarket(Markets[0]).WithOffset(25);
        dailyBarsSecondMarket = data.Bars(BarPeriodType.Day, 1).OnMarket(Markets[2]).WithOffset(25);
    }

    public override void RegisterActions()
    {
        OnUpdateOf(dailyBarsFirstMarket).Do(() =>
        {
            // Prints the latest close value on the first selected market
            Log("1st Market: The latest close value is " + dailyBarsFirstMarket[0].Close.ToString());
            
            // Prints the previous close value on the first selected market
            Log("1st Market: The previous close value is " + dailyBarsFirstMarket[1].Close.ToString());
        });
        
        OnUpdateOf(dailyBarsSecondMarket).Do(() =>
        {
            // Prints the latest close value on the second selected market
            Log("2nd Market: The latest close value is " + dailyBarsSecondMarket[0].Close.ToString());
            
            // Prints the previous close value on the second selected market
            Log("2nd Market: The previous close value is " + dailyBarsSecondMarket[1].Close.ToString());
        });
    }
}
```

{% endtab %}
{% endtabs %}

### WithOffset Method

After you define what kind of data you want to use in your strategy, you need to also define the number of data points which your strategy needs to operate on, i.e. how many historical bars you can access at any moment.&#x20;

#### Parameters

| Name     | Type | Description                                                               |
| -------- | ---- | ------------------------------------------------------------------------- |
| `offset` | int  | The number of bars that you want to access in the logic of your strategy. |

#### Example

{% tabs %}
{% tab title="Basic example" %}

```csharp
// Initiating 5 minute bars with 10 bars into the history
fiveMinuteBars = data.Bars(BarPeriodType.Minutes, 5).WithOffset(10);

// Initiating daily bars with 2 bars into the history
dailyBars = data.Bars(BarPeriodType.Day, 1).WithOffset(2);

if (dailyBars[0].Close > dailyBars[1].Close) {
    Log("Today's close value is higher.");
}
```

{% endtab %}

{% tab title="Complete example" %}

```csharp
using Signals.DataSeries.Bars;
using Signals.Framework;

public class MyStrategy : SingleMarketStrategy
{
    private Bars dailyBars;

    public override void Setup(DataMarketplace data, IndicatorsMarketplace indicators)
    {
        dailyBars = data.Bars(BarPeriodType.Day, 1).WithOffset(2);
    }

    public override void RegisterActions()
    {
        OnUpdateOf(dailyBars).Do(() =>
        {
            // Prints the latest close value value
            Log("The latest close value is " + dailyBars[0].Close.ToString());
            
            // Prints the previous close value value
            Log("The previous close value is " + dailyBars[1].Close.ToString());
        });
    }
}
```

{% endtab %}
{% endtabs %}
