Table of Contents

Distribution

You can give other ATAS users access to your extensions through the Personal Area: upload the DLL, choose who gets access and for how long, and turn access off at any time. The platform installs such a DLL into the Indicators folder of the user, so the heatmap indicators, columns and modules it contains are delivered together with its indicators. Selling through the ATAS marketplace follows the same path; contact ATAS for the current terms.

Connectors cannot be distributed this way: the Personal Area installs DLLs into the Indicators folder, while connectors are loaded only from the CustomConnectors folder, where the user puts them.

Enable the module section

  1. Register in the Personal Area.
  2. Turn on Activate the Module Section in Profile → For Developers.
  3. The My Modules section appears in the left menu: here you add modules, choose the users who have access to them and set the expiration dates.

Mark the classes

Every class you distribute gets a unique identifier with the [FeatureId] attribute (namespace OFT.Attributes); the older ATAS.Indicators.Attributies.FeatureId is obsolete. Access is checked only for the classes marked with it: a class without [FeatureId] is available to anyone who has the file. The attribute works for chart indicators, strategies, heatmap indicators, SmartDOM and Watchlist columns and custom modules.

using ATAS.Indicators;
using OFT.Attributes;

namespace ATAS.Docs.Samples.Publishing;

[FeatureId("DFD43423-6645-4490-B5F7-45579FF940EE")]
public class FeatureIdIndicator : Indicator
{
    protected override void OnCalculate(int bar, decimal value)
    {
    }
}

One identifier may mark several classes; the access of the whole group is then controlled as one module.

A marked class is offered only to the accounts that have the feature; an instance of it saved in the layout of an account without the feature stays inert («Not available») and is not created. Heatmap indicators are an exception to the last point: when the platform loads a DLL, it runs the static constructor of every heatmap indicator class and creates one instance to read its descriptor, whatever the account, so keep their constructors free of side effects.

Compile the module and obfuscate it: the platform adds no copy protection to the files delivered through the Personal Area, so protecting the code is up to you, and obfuscation is the usual and sufficient way.

Upload the module

  1. Open the Modules section and press Add module.
  2. Fill in the form: Module name, Module UID (the identifier from [FeatureId]), Description and the compiled DLL as File.
  3. For each module, choose the users who have access and the expiration date.

The users do not download anything themselves: when a user signs in, the platform downloads the modules available to the account, installs them into the indicators or strategies folder and replaces the installed file when you upload a new version. A module whose access has expired is not downloaded, and a module already on the computer is neither shown nor usable once the access is gone.

Upload a single classic build: both the classic ATAS and ATAS X download the same file (see ATAS X and macOS).

Managing access through the API

The same operations are available through a public API, without signing in to the Personal Area:

  1. POST /seller/modules/upload uploads the DLL (string($binary), up to 20 MB) and returns an uploadFileKey.
  2. Within 5 minutes, POST /seller/modules adds the description of the module: the name, a unique UID, a short description and the uploadFileKey. Skip the first two steps for a module that already exists.
  3. GET /seller/modules lists your modules with their internal ids.
  4. POST /seller/modules/{id}/subscriptions gives a user access: the e-mail of the user, the expiration date and the module id.

The API also updates and deletes modules, checks a UID for uniqueness, changes the expiration date of a subscription, lists and blocks the subscribers of a module and lists the modules of a subscriber. The description of the methods, examples and the possible errors are in the "My modules" → "API documentation" section of your account.