# cTrader

## **Adding licensing to your indicator/cBot**

After you have created an indicator or robot you will need to integrate [Licensing Library](https://jiribeloch.gitbook.io/poshtrader-help-center/developer/licensing-library) to validate users' licenses and protect your product from unauthorized distribution.

1. Add [**PoshTrader.Licensing.dll**](https://jiribeloch.gitbook.io/poshtrader-help-center/developer/licensing-library/..#shared-licensing-library) as a reference using [Reference Manager](https://help.ctrader.com/ctrader-automate/guides/referencing_dll)
2. Import namespace of the library by adding `using PoshTrader.Licensing;`
3. Add **Item Attributes** to the main class
4. Grant **Full Access** rights so licensing can communicate with our server
5. Declare `ItemLicense` object
6. Create the license on startup
7. Check license status during runtime

{% tabs %}
{% tab title="Indicator" %}

```csharp
using System;
using cAlgo.API;
using PoshTrader.Licensing;

namespace cAlgo
{
    [Item(ID, "Sample Indicator", Version = "1.0.0", Author = "John Doe")]
    [Indicator(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
    public class SampleIndicator : Indicator
    {
        private ItemLicense _license;

        protected override void Initialize()
        {
            _license = new ItemLicense(this);

            if (!_license.IsValid())
            {
                throw new Exception("Product license validation failed.");
            }

            // Put your Initialize logic here
        }

        public override void Calculate(int index)
        {
            if (!_license.IsValid())
                return;
                
            // Put your Calculate logic here
        }
    }
}
```

{% endtab %}

{% tab title="Robot" %}

```csharp
using System;
using cAlgo.API;
using PoshTrader.Licensing;

namespace cAlgo
{
    [Item(ID, "Sample Robot", Version = "1.0.0", Author = "John Doe")]
    [Indicator(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
    public class SampleRobot : Robot
    {
        private ItemLicense _license;

        protected override void OnStart()
        {
            _license = new ItemLicense(this);

            if (!_license.IsValid())
            {
                throw new Exception("Product license validation failed.");
            }

            // Put your OnStart logic here
        }
    }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**Tips:** You can build an installation algo file by excluding **Version** in Item Attributes. This will allow you to publish installers of your indicators and cBots on the official cTrader website.

See an example here: <https://ctrader.com/algos/indicators/show/2247>
{% endhint %}

## **Creating a distribution file**

To create the distribution file, please follow the steps below for creating an Algo file containing your indicators and/or robots.

1. Navigate to the **Automate** tab in the left sidebar
2. Select an indicator/robot you wish to export
3. Press **`Build`** (Do **NOT** use **`Build with Source Code`** which would make your code unprotected!)

{% hint style="info" %}
After you finish building your indicator/cBot you will find the distribution file as a **.algo** file located in **%UserProfile%\Documents\cAlgo\Sources\\** in **Indicators** or **Robots** folder.
{% endhint %}
