# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
This site has an agentic ask interface you may use to query the documentation dynamically by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.volven.io/index.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

---

# Introduction

***

{% hint style="info" %}
Need to register an account? Please visit [here](https://docs.volven.io/overview/www.volven.io/sign-up).
{% endhint %}

## >>> Click here for [Volven Algo Guide 2024](https://docsend.com/view/wv4rsczfvkjh7nt4) <<<

## <mark style="color:blue;">Overview</mark>

Welcome to the Volven Terminal Documentation!

Here we've made available all the resources you need to start trading using our terminal, or API. The documentation and API guides will help you get started quickly, and our tutorials will help you become a better trader.

### [Introduction](#introduction)

Where your algorithmic crypto trading journey with Volven begins. Here you'll find all the basics regarding our [features and algorithms](/overview/features-and-algorithms).

### [Getting Started](/getting-started/how-to-add-your-api-key)

Set of guides for desktop and mobile that will help set up your trading workspace and strategy settings.

### API Quickstart (Coming soon)

How to use the Volven API for executing trades from code. Learn how to implement Volven in your own custom trading strategies.&#x20;

### [Modules](/modules/ui-overview)

Explore the diverse range of specialized tools within the Volven Terminal, each designed to enhance specific aspects of your trading experience, from market analysis to risk management.

### [Strategies](/modules/ui-overview/strategies)

Explore an array of meticulously designed and thoroughly tested trading strategies within Volven. This section provides comprehensive insights into each strategy's mechanics, enabling you to make informed decisions tailored to your trading goals and risk tolerance.

### [Parameters](/strategies/parameter-explanations)

Delve into the heart of your trading algorithms by understanding the various customizable parameters in Volven. Learn how to fine-tune settings, optimize performance, and adapt your strategies to ever-changing market conditions, ensuring your trades align perfectly with your objectives.

### Mobile App

Take your trading on the go with the Volven Mobile App. Discover seamless functionality and real-time market insights in the palm of your hand, ensuring you never miss out on potential trading opportunities while staying in control of your strategies, anytime, anywhere.


# Signing up

How to get started

1. Go to our [sign-up page](https://volven.io/sign-up)
2. Register with e-mail and password.&#x20;

{% hint style="danger" %}
*Check your junk folder for e-mail confirmation code.*
{% endhint %}

A subscription is required in order to trade with Volven Terminal. Find pricing details [here.](https://volven.io/pricing/)

**Basic package**

Gives access to using the ["Smart Order (SMO)"](/strategies/smart-order) and ["Slicer (SC)"](/strategies/slicer) strategies on iOS. In order to log in to the desktop terminal, an upgrade to Experienced or Day Trader is required.

**Experienced**

Gives access to the desktop terminal and additional access to ["Time-Weighted Average Price (TWAP)"](/strategies/time-weighted-average-price) and ["Advanced Limit Order (ALO)"](/strategies/advanced-limit-order), and allows the user to run five strategies simultaneously.&#x20;

**Day Trader**

Gives additional access to ["TWAP Arbitrage (TARB)"](/strategies/twap-arbtirage), ["Bulk Converter (BC)"](/strategies/bulk-converter), and ["Cobra (CO)"](/strategies/cobra) strategies. You also get direct contact with our support team, and can run 20 strategies simultaneously.


# What is Volven Terminal?

Volven is a pioneering crypto trading platform, empowering institutions with cutting-edge algorithms and intelligent trading strategies.

{% hint style="warning" %}
**The world's most high-performance trading terminal.** It's time to trade smarter.
{% endhint %}

## The preferred trading platform for active traders

Clients choose Volven because we've developed a terminal that we, as professional traders, would like to trade with.

### Why should you choose Volven?

* Intuitive platform, complete with essential functionality
* Adoptable trading interface, streamlined for seamless integration
* Best in class trading technology, read to amplify your operations
* Simplified trading environment for swift action
* Trading interface designed for convenience and accessibility
* Value enhancing set of execution algorithms

> Our clients range from crypto enthusiasts, to funds, brokers, and other finance professionals.
>
> Trade from our leading trading terminal, or take your trades anywhere with the Volven iOS app. Seamlessly integrated with our terminal, it offers a user-friendly interface and real-time updates.
>
> Execute trades, monitor portfolios, and stay ahead of the market trends, all from the convenience of your mobile device.

## Quick links

{% content-ref url="/pages/a5IJjI3aZLbnP2fCaeML" %}
[Features and Algorithms](/overview/features-and-algorithms)
{% endcontent-ref %}


# Features and Algorithms

{% hint style="info" %}
**Good execution is the holy grail of trading.** We're committed to continuously enhance our algorithms, develop new ones, and most importantly deliver a best-in-class crypto trading terminal. Innovation is the core of what we do.
{% endhint %}

## Why trade with Volven?

It's time to trade smarter. Volven's interface and algorithmic trade execution helps you make better decisions, ultimately saving you money in trading costs and maximizing your profit potential.

<div data-full-width="false"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FxnUBtoGoyjSMjsGYr214%2FTerminal_floating-noframe.png?alt=media&amp;token=fe5d6616-324f-4aeb-85e5-1adaa79701f5" alt="Trading Terminal for crypto"><figcaption></figcaption></figure></div>

### Algorithms

#### Time-Weighted Average Price (TWAP)

TWAP is typically used for larger orders to minimise the market impact or for traders that want to participate in a specific price range. Volven has re-invented the traditional rule-based TWAP by implementing artificial intelligence. The strategy distributes trades dynamically across a specific time horizon the user sets, aiming to achieve an execution price better than VWAP. The strategy is given the flexibility to seize opportunities by tracking momentum, abnormal changes in trading volume and identifying the most advantageous levels of order execution.

{% content-ref url="/pages/wHoFQyYZBlVXDuQuT8ey" %}
[Time-Weighted Average Price](/strategies/time-weighted-average-price)
{% endcontent-ref %}

***

#### TWAP Arbitrage (TARB)

TARB Is an intelligent replacement for the popular grid strategy. Instead of a predefined static level where you trade, this strategy allows you to dynamically monetise on price fluctuation by launching 2 TWAP strategies, BUY and SELL. The 2 TWAP strategies work with each other with a minimum profit margin set by the trader. You can use the parameters we have predefined for you or choose your own.

{% content-ref url="/pages/R1ZzIAnaeJ8Kge8Gxeiy" %}
[TWAP Arbtirage](/strategies/twap-arbtirage)
{% endcontent-ref %}

***

#### Slicer

A Slicer is a dynamic AI-based algorithmic crypto strategy and can be described as a short-term TWAP strategy. The strategy will spread the executions of the order up to 15 min from the start.

{% content-ref url="/pages/65eBoCgW2qR5kLrDCfj5" %}
[Slicer](/strategies/slicer)
{% endcontent-ref %}

***

#### Cobra

Cobra is a fire-and-forget strategy that opens and exists positions automatically with dynamic take profit and stop loss levels.

{% content-ref url="/pages/OMlY8I5pW0O5sVtie5Jh" %}
[Cobra](/strategies/cobra)
{% endcontent-ref %}

***

#### Smart Order

The ”Go-To” strategy for quick and precise execution. Smart Order replaces the traditional limit and market orders. Execute effortlessly by placing your order with dynamic price tracking or traditional limit or market orders. With dynamic price limit, your order will be filled within seconds.

{% content-ref url="/pages/ZWLkmjzrw8Ed1UA3v4Aa" %}
[Smart Order](/strategies/smart-order)
{% endcontent-ref %}

***

#### Advanced Limit Order

The ALO is a trading strategy that automatically manages your take profit and stop loss.

{% content-ref url="/pages/qNEeKa1UhF5Z8PYsDIaM" %}
[Advanced Limit Order](/strategies/advanced-limit-order)
{% endcontent-ref %}

<br>


# How to add your API Key

{% hint style="info" %}
**To enable trading** in the Volven Terminal, you are required to add an API Key for the exchange you would like to trade on. These pages are dedicated to help you with that.
{% endhint %}

## Exchange Links

You'll find where to register your API Keys under "*Exchange Links*" in your account settings.

<div data-full-width="false"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FFYiHRC9l0DeLIeMWZfrI%2FMy%20Account%20(Link%20Exchange).jpg?alt=media&amp;token=82df029d-04ff-42d2-a77f-9e89849e73fa" alt="Add API Key with Volven Terminal "><figcaption></figcaption></figure></div>

* Select your exchange.
* Some exchanges may require a custom passphrase, make sure to not forget it.

{% content-ref url="/pages/yxaMQtR17IyM7rmJm8HZ" %}
[How to create Binance API Key](/getting-started/how-to-add-your-api-key/how-to-create-binance-api-key)
{% endcontent-ref %}

{% content-ref url="/pages/kg6vP9KDKF1YKvEcBRX6" %}
[How to create Bybit API Key](/getting-started/how-to-add-your-api-key/how-to-create-bybit-api-key)
{% endcontent-ref %}

{% content-ref url="/pages/Ni0CEuD4E8lpOEt2hrjH" %}
[How to create Crypto.com API Key](/getting-started/how-to-add-your-api-key/how-to-create-crypto.com-api-key)
{% endcontent-ref %}

{% content-ref url="/pages/BRvh9aFS375k11iV9gT1" %}
[How to create OKX API Key](/getting-started/how-to-add-your-api-key/how-to-create-okx-api-key)
{% endcontent-ref %}

<div data-full-width="false"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FRM7T30dRM0HsZ6ZLc2gx%2FInput%20Your%20Key.png?alt=media&amp;token=9fed36dc-e433-43cd-a13c-47f669bfdea1" alt="How to add  Binance API Key "><figcaption></figcaption></figure></div>

1. Give your API Key a name. It can be anything, but we recommend to name it according to where you are trading for ease of mind.
2. Paste your API Key
3. Paste your API Secret
4. *(If required)* Type in your passphrase

Once complete, your exchange connection(s) should look like this:

<div data-full-width="false"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FGxn63rl7JN6jms5nOIb7%2FScreenshot%202023-12-06%20134247.png?alt=media&amp;token=09825551-b0a2-442e-8e08-aaef0fa4b721" alt="Overview of API Keys with crypto exchanges "><figcaption></figcaption></figure></div>

At this point you're good to go! **Launch the terminal and happy trading!**


# How to create Binance API Key

1. Go to the [Binance API Key Management](https://www.binance.com/en/my/settings/api-management) page.
2. Click "**Create API**"
3. Choose "**System generated"** and click "**Next"**

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2F66nT5O6xVsc2AzKsdSdQ%2F3-Choose-API-Key-Type.webp?alt=media&amp;token=7c22a16b-872e-4318-bd24-312534be8c84" alt="Add API Key with Binance "><figcaption></figcaption></figure>

4. Give the API Key a name of your choosing. Example: **Volven API**, then complete the security verification.
5. Click "**Edit restrictions**"

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FkXzT2s1yudJyyZ9RKqNv%2F7-Edit-Restrictions.webp?alt=media&amp;token=a1d8955b-be4d-4ce2-ad60-1ae8273b0fad" alt="Add API Key Binance, edit restrictions "><figcaption></figcaption></figure>

## IP Whitelisting

IP Whitelisting is required on Binance to trade with API. Please copy the *entire* box below, and paste into the **"Restrict access to trusted IPs only"** field to whitelist Volven IPs and click **Confirm**.

```
54.150.136.230 3.115.44.38 52.193.136.158 52.194.199.49
```

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2Fc6rwrIw4EZ9nGy9HA072%2FIP%20Whitelist.webp?alt=media&amp;token=c7d02ab4-fc3b-4380-97ca-8b2c551bc2eb" alt="Add API Key Binance, Spot and Futures "><figcaption></figcaption></figure></div>

6. Check "**Enable Spot & Margin Trading"**&#x20;
7. Check **"Enable Futures"**
8. Check **"Permits Universal Transfer"**
9. Check **"Enable European Options"** *(Optional)*
10. Click **Save** and finish the security verification to complete your API Key.

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FDM0fkyqo9hoIPsrTjR39%2FBinance%20API%20Key%20Check%20Boxes.png?alt=media&amp;token=cbcd225e-36a0-4d29-8e53-514c4e55394e" alt="Add API Key Binance, enable Spot and Futures"><figcaption></figcaption></figure></div>

Go to your [Volven account dashboard](https://volven.io/my-account/#exchange_links). Click **"Link Exchange"**, name your key (F.ex. "John Doe - Binance") and copy/paste the API Key & Secret Key into Binance.

{% content-ref url="/pages/A1nlAJwOBsjLnyviRrYW" %}
[How to add your API Key](/getting-started/how-to-add-your-api-key)
{% endcontent-ref %}

***If you prefer, you can scan the QR code in the Volven app instead.***

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FfbIYYDDJ1zoFmKPGSnfK%2FScan%20QR.webp?alt=media&amp;token=5d2a4425-7e22-4233-b9cd-b856056e9f79" alt="Add API Key Binance with Volven iOS APP " width="256"><figcaption></figcaption></figure>


# How to create Bybit API Key

1. Go to the [Bybit API Key Management](https://www.bybit.com/app/user/api-management) page.
2. Click **"Create New Key"**
3. Click **"System-generated API Keys"**
4. Select **"API Transaction"**
5. Name the API Key, for example: **Volven API**
6. Select **"Read-Write"** and **"Only IPs with permissions granted are allowed to access the OpenAPI"**, then copy the below Volven IPs and paste into the box.

```
54.150.136.230,3.115.44.38,52.193.136.158,52.194.199.49
```

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FIC0ieTFqYHcxINp9MtYa%2Fbybit%20ip%20restrictions%20api%20key.png?alt=media&amp;token=7f7cb794-1713-4c06-8099-c9d3f16e83d7" alt="Add API Key ByBit "><figcaption></figcaption></figure>

**Currently we only support Standard Account on Bybit.** The implementation for Universal Trading Account (UTA) will be pushed early 2024.

7. Check **"Standard Account"** to give correct permissions.
8. Check **"Account Transfer"** to be able to make internal transfers between your own Bybit wallets in the terminal. It's very handy, and safe!
9. Click **"Submit"** and complete the Security Verification. Don't close the next window before you have copied the API Key & API Secret!

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FoMZ3xEZoIkAj8aFGHdMT%2Fapi%20key%20permissions%20bybit.jpg?alt=media&amp;token=d350afe7-62cb-4d34-a088-35638d4c9eb2" alt="Add API Key Permissions, Spot and Future  "><figcaption></figcaption></figure></div>

Go to your [Volven account dashboard](https://volven.io/my-account/#exchange_links). Click **"Link Exchange"**, name your key (F.ex. "John Doe - Bybit") and copy/paste the API Key & Secret Key into Bybit.

{% content-ref url="/pages/A1nlAJwOBsjLnyviRrYW" %}
[How to add your API Key](/getting-started/how-to-add-your-api-key)
{% endcontent-ref %}


# How to create Crypto.com API Key

1. Go to the [Crypto.com API Key Management](https://crypto.com/exchange/user/settings/api-management) page.
2. Click **"Create a new API key".**
3. Label your key. For example: **Volven API** and complete the Security Verification.
4. Check **"Can Read"** *(checked by default).*
5. Check **"Enable Trading"**
6. Select **"Restricted to certain IPs (Upt to 10)",** enter one IP at the time and click  **"+"**&#x20;
   * 54.150.136.230
   * 3.115.44.38
   * 52.193.136.158
   * 52.194.199.49
7. **Before** you click **"Save"**, make sure to save your API Key and Secret Key.

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FmQw0Qk77MPhLpwDJGlQJ%2Fhow%20to%20create%20crypto.com%20api%20key.png?alt=media&amp;token=52b1f9e8-d820-47d7-8d8d-ea9af70a266b" alt="Add API Key, Crypto.com"><figcaption></figcaption></figure>

8. Click **"Save"**

Go to your [Volven account dashboard](https://volven.io/my-account/#exchange_links). Click **"Link Exchange"**, name your key (F.ex. "John Doe - Crypto.com") and copy/paste the API Key & Secret Key into Crypto.com.

{% content-ref url="/pages/A1nlAJwOBsjLnyviRrYW" %}
[How to add your API Key](/getting-started/how-to-add-your-api-key)
{% endcontent-ref %}


# How to create OKX API Key

1. Go to the [OKX API Key Management](https://www.okx.com/account/my-api) page.
2. Click **"Create V5 API Key"**
3. Name the API Key. For example: **Volven API**
4. Enter your own passphrase, **and remember it!** It's needed for later.
5. Copy the below Volven IPs and paste into the **"IP address (optional)"** box

```
54.150.136.230,3.115.44.38,52.193.136.158,52.194.199.49
```

6. Check **"Read"** *(checked by default)*
7. Check **"Trade"**&#x20;

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FGgpQzoGmfXcmXKJ1BHjh%2Fhow%20to%20create%20okx%20api%20key.png?alt=media&amp;token=06420408-d3a8-4003-bc13-67f789eb38bb" alt="Add API Key OKX"><figcaption></figcaption></figure>

8. Click **"Confirm"** and complete the Security Verification.&#x20;

Go to your [Volven account dashboard](https://volven.io/my-account/#exchange_links). Click **"Link Exchange"**, name your key (F.ex. "John Doe - OKX"), copy/paste the API Key & Secret Key, and type in your passphrase into OKX.

{% content-ref url="/pages/A1nlAJwOBsjLnyviRrYW" %}
[How to add your API Key](/getting-started/how-to-add-your-api-key)
{% endcontent-ref %}


# Security

## Multi-Factor Authentication

We recommend using 2FA as this adds another layer of security to your account. MFA requires more than one kind of credential to sign into an account - such as requiring both a password and a one-time code generated by the app.&#x20;

You can enable MFA for your account [here.](https://volven.io/my-account/#security)

***

## IP Whitelisting

Please make sure that your API Keys make use of IP Restrictions limited to the Volven IPs.

### Volven IPs

```
54.150.136.230
3.115.44.38
52.193.136.158
52.194.199.49
```


# UI Overview

## Work in progress. Find direct links here.

{% content-ref url="/pages/QNacSMSpeMgNDeemAB3L" %}
[Ticker](/modules/ui-overview/ticker)
{% endcontent-ref %}

{% content-ref url="/pages/JJtWt4UT43G4AbP4ZCS8" %}
[Strategies](/modules/ui-overview/strategies)
{% endcontent-ref %}

{% content-ref url="/pages/4Vg57dpxygYZv7kgs2SI" %}
[Balances Chart](/modules/ui-overview/balances-chart)
{% endcontent-ref %}

{% content-ref url="/pages/rAETBnr8aAE6Wx5UaP0s" %}
[Public Trades](/modules/ui-overview/public-trades)
{% endcontent-ref %}

{% content-ref url="/pages/XoEii2ONQ1pv9PEoevI9" %}
[Order book](/modules/ui-overview/order-book)
{% endcontent-ref %}

{% content-ref url="/pages/ZVQjZRxUFi4i5pDspHPU" %}
[Chart](/modules/ui-overview/chart)
{% endcontent-ref %}

{% content-ref url="/pages/kqk7PHG16CEuMGYuHOVE" %}
[Trades](/modules/ui-overview/trades)
{% endcontent-ref %}

{% content-ref url="/pages/nTaaiEbvpjnCICVHTRy8" %}
[Orders](/modules/ui-overview/orders)
{% endcontent-ref %}

{% content-ref url="/pages/nBfDLEGFODMMizHDZrYZ" %}
[Futures Positions](/modules/ui-overview/futures-positions)
{% endcontent-ref %}

{% content-ref url="/pages/D6jITZc4DyfcjdD7GryB" %}
[Futures Settings](/modules/ui-overview/futures-settings)
{% endcontent-ref %}

{% content-ref url="/pages/I4ZSEU7S8u5lMIksM90B" %}
[Accounts](/modules/ui-overview/accounts)
{% endcontent-ref %}


# Ticker

The benefit of algorithmic trading is the ability to monitor and participate in the markets 24/7.

Each row displays market data of a product, and can be **expanded** to view the product details on your selected exchanges, as highlighted below. To create a strategy, click the **"Buy"** or **"Sell"** button on the row with the exchange you would like to trade on. This opens the strategy creation panel.

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FNXzdFk1bUHSCQLaaK4R6%2Fdefault%20view.jpg?alt=media&amp;token=a99d7eea-0121-4391-93e6-6349073a9b0b" alt="Volven Terminal, Ticker Module"><figcaption></figcaption></figure></div>

{% hint style="info" %}
To add/view more products, **just start typing in the Ticker.** For example: "ADAUSDT".&#x20;

You can filter by spot, futures, and exchanges. The selection window will also provide details if the futures products are perpetuals or delivery. Click the heart to add/remove.
{% endhint %}

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FE2kQxjtasPsu4xRdzPYm%2Ffind%20pairs.jpg?alt=media&amp;token=63f8a4ec-974b-4d55-bbfe-b7d1f7a21a2d" alt="Volven Terminal, search for crypto symbols "><figcaption><p>Searching for ADAUSDT will show all related products.</p></figcaption></figure></div>

Ticker comes with a preset of default columns. Columns can be adjusted through the settings in the Ticker dropdown. **Click the arrow in the top left to open the dropdown**, and you will find the settings (cogwheel) in the top righ&#x74;**.**&#x20;

<table data-full-width="true"><thead><tr><th width="228">Default Columns</th><th>Purpose</th></tr></thead><tbody><tr><td>Pairs</td><td>Name of the product. (Name of exchange when expanded)</td></tr><tr><td>Own Bid Price</td><td>Shows the limit price of your best buy order for the product</td></tr><tr><td>Own Sell Price</td><td>Shows the limit price of your best sell order for the product</td></tr><tr><td>Buy</td><td>Opens the create strategy panel for that product and exchange, with buy side pre-selected</td></tr><tr><td>Sell</td><td>Opens the create strategy panel for that product and exchange, with sell side pre-selected</td></tr><tr><td>Bid</td><td>The best bid in the market</td></tr><tr><td>Ask</td><td>The best ask in the market</td></tr><tr><td>24h Range</td><td>High/Low range last 24hrs, with a current price indicator</td></tr><tr><td>Product</td><td>The product icons. For example BTC/USDT will show Bitcoin and USDT icons. Text on hover.</td></tr></tbody></table>

{% hint style="info" %}
The price of your orders will be shown in the **Own Bid Price** and **Own Ask Price** columns.

We've added color coding to give you a visual representation of your orders as follows.

* <mark style="color:purple;background-color:purple;">Purple</mark>: You are the best bid/ask
* <mark style="color:green;background-color:green;">Green</mark>: You are within 0.5% of the best bid/ask
* <mark style="color:yellow;background-color:yellow;">Yellow</mark>: You are beyond 0.5% of the best bid/ask

*Inspired by Formula 1 lap times*
{% endhint %}

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FvDUiQOQ6abWbRlqQgg1i%2Fcolor%20coding.jpg?alt=media&amp;token=971e4b42-6f57-466b-aaea-0a4c409ba904" alt="Volven Terminal, Bid/Ask orders "><figcaption></figcaption></figure></div>

To **Insert, Remove,** or **Rename** columns, right click on any column name.

To resize a column, hover on the column name edge and drag left or right.


# Strategies

Trading strategies is the core of Volven.

## Strategy Details

The strategy module is the beating heart of the terminal. This is where you view the live report and details of your strategies. You can filter out the strategies through the buttons on the top of the left pane, where you view the master strategies.

**All the details inside a strategy can be clicked, hovered or dragged to show more information.**

### Live Report

{% hint style="info" %}
Every strategy will have their own **Card** with high-level information about the performance. These cards can be clicked to open up the strategy **"Live Report"**. Here's an example of a TWAP live report.

**Information in the live report can be clicked, hovered or dragged for more details.**
{% endhint %}

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FFYa7TYLs9nkkrOSuSVZ6%2FScreenshot%202023-12-06%20142916.png?alt=media&amp;token=5873bb49-17fe-44da-a47f-24f2975e234c" alt="Volven Terminal, Strategy module, crypto algorithms"><figcaption></figcaption></figure>

Every strategy has a unique live report designed to highlight the important elements of that strategy type. Each of them will be covered in the different strategy documentation pages.

### The Mother / Child Hierarchy

A strategy is always a mother, or a child strategy. The mother strategy is the "master strategy" and will always be in the left pane of the strategy module, and the children that it "spawns" can be monitored in the **"Children"** tab in the right pane. Here are the children from the above strategy.

{% hint style="info" %}
User can only manage / update the mother strategies (e.g.: run, stop, modify) and these actions will be propagated down the hierarchy.
{% endhint %}

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FxSS2RrzQcdxoKimDuWz4%2Fchildren.jpg?alt=media&amp;token=f94c5783-1583-402c-a3a0-80a44eacf3e7" alt="Volven Terminal, Strategy view, child strategies. "><figcaption><p>Full transparency of strategies builds trust! You should feel in control of your trading.</p></figcaption></figure>

Here you can see that a TWAP spawns multiple Slicers (SC) for a dynamic execution. Each Slicer has sent multiple orders at different sizes and intervals. The gauge inside the Slicer card tells you how much of it's intended volume it filled, and the bottom bar on each order (inside the Slicers) indicates how much was filled of the order. Clicking the **"Order"** tab will display just the orders.

### Child Strategy Details

{% hint style="info" %}
You can click a child strategy to inspect it.
{% endhint %}

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2Fi2IUW7JKG8BBOkNoLoRY%2Fchild%20strategy%20details.jpg?alt=media&amp;token=5e44ec7f-a252-4f2d-8beb-b64bcd37714d" alt="Volven Terminal, Crypto trading "><figcaption></figcaption></figure>

### Updating a live trading strategy

You can update the parameters of a live trading strategy by clicking the settings button. It's important to note that the update applies to the mother strategy. This will open the **update panel.**

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FrEYNVirrZnbch7KcXbI7%2Fupdate%20algorithmic%20trading%20strategy.jpg?alt=media&amp;token=b39fa845-bbe8-4760-a3c9-f4c6ee1f90eb" alt="Volven Terminal, TWAP Live report "><figcaption></figcaption></figure>

## Algorithmic Trading Strategies in Volven

<table data-full-width="true"><thead><tr><th width="344">Strategy</th><th width="385">Purpose</th><th>Subscription Requirement</th></tr></thead><tbody><tr><td>Smart Order (SMO)</td><td>Fast and passive trade execution</td><td>Basic</td></tr><tr><td>Slicer (SC)</td><td>Mini TWAP, maximum duration 15mins</td><td>Basic</td></tr><tr><td>Advanced Limit Order (ALO)</td><td>Limit order with Take Profit and Stop Loss</td><td>Experienced</td></tr><tr><td>Time-Weighted Average Price (TWAP)</td><td>Executes your order over a given time period</td><td>Experienced</td></tr><tr><td>TWAP Arbitrage (TARB)</td><td>TWAP with dynamic Take Profit and Stop Loss</td><td>Day Trader</td></tr><tr><td>Bulk Converter (BC)</td><td>Trades assets a in many-to-one format</td><td>Day Trader</td></tr><tr><td>Cobra (CO, <em>In development</em>)</td><td>Countertrades abnormal spikes and flushes</td><td>Day Trader</td></tr><tr><td>Drive Market Making (DMM)</td><td>In-house market making algorithm</td><td>On-demand rental</td></tr><tr><td>Single Exchange Market Making (SMM)</td><td>In-house market making algorithm</td><td>On-demand rental</td></tr><tr><td>Trend Market Making (TMM)</td><td>In-house market making algorithm</td><td>On-demand rental</td></tr></tbody></table>


# Actions

Every mother strategy has strategy actions that the user can activate. These actions are Run, Pause, Stop, Flush, Duplicate, and Delete. These actions are available as buttons to the left of the strategy cards.

<img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FNEijUYkUKk8BRMLlNf6z%2FStrategy%20Actions.png?alt=media&amp;token=83f8ca9f-52c8-4b25-a536-0cb8d467f743" alt="Volven Terminal, Overview algorithms " data-size="original">

![](https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FSkc3MlhDEZryd8cnsQBO%2FPlay.png?alt=media\&token=14c57502-6271-4532-838d-75be585058d9)  **Run**: Resumes a paused strategy.

![](https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FLSWPF9J0fF06sx0wRvSc%2FPause.png?alt=media\&token=6187a16e-50ed-4ece-b483-40e42cc484b7)   **Pause**: Pauses an active strategy. Strategy can be resumes with "Run"

![](https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FOf74IHeFF5brywmRyZJJ%2FStop.png?alt=media\&token=359f542a-5683-430f-9fe1-ea69ae725ca7)   **Stop**: Stops an active or paused strategy. A stopped strategy cannot be resumed

![](https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FOUQ92PDTTwAP4koTR3Pl%2FBin.png?alt=media\&token=c112f8c1-e45c-4fbf-9d5f-8fc805accf2a) **Delete**: Deletes a strategy from the strategy view.&#x20;

![](https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FqrdPI1Uix0iXZB798K1t%2FDuplicate.png?alt=media\&token=dc010b25-966a-4782-8bfc-4c15a14f282c)**Duplicate**: Opens the strategy creation panel, with pre-defined parameters copied from the duplicated strategy.

![](https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FSIBGOTQErn6OTRBLBPtW%2FFlush%202.png?alt=media\&token=49c92328-555e-4626-aa93-d9cda62f0ff8)**Flush**: Unique to the [TMM](/strategies/market-making/trend-market-making) strategy, this action will "flush" your current position, meaning that strategy will reduce its long and short position to zero.


# Statuses


# Balances Chart

Manage your portfolio from a single module

## Balance Chart Details

The balance chart is an **interactable pie-chart** that enables you to view, transfer, and trade all your assets from a single module. There's a lot more functionality to this module than what meets the eye.

### The Pie-Chart

The pie-chart is made up of two circles. The inner circle makes up the total value of each asset that you own. The outer circle shows how the asset is distributed across your account. By hovering over an asset will also get a list view of the asset distribution.

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FYy1jrjVfRslmus6vcFgY%2Fimage.png?alt=media&amp;token=1e6f2409-1dd1-4dcd-bd57-0405dddf7ee1" alt="Crypto Portfolio Overview "><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Clicking on an asset** will display more detailed wallet distribution across the exchanges
{% endhint %}

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FeUhoDeB7wlGv8utEBujn%2Fimage.png?alt=media&amp;token=8b78ad7d-1f94-4a5c-be1c-8b341aeec84e" alt="Transfer Crypto between wallets "><figcaption></figcaption></figure></div>

### Internal Transfers

{% hint style="warning" %}
Try making an **internal transfer** by dragging from one internal wallet to another.&#x20;
{% endhint %}

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FIntfm6h06BkVSCAcW1YA%2Finternal%20transfer%20crypto%20wallets%20trading%20terminal.jpg?alt=media&amp;token=2230ea6f-c208-42fd-b630-8f75188e931a" alt="Volven Converter,  Transfer Crypto between wallets"><figcaption></figcaption></figure></div>

### Multi-exchange Converter

You can convert an asset on multiple venues to another asset by dragging the asset on top of another. Here's an example of dragging USDT which the account holds on Binance, OKX and Crypto.com, and releasing it on XRP. This will issue a Basket Order to convert all USDT across the exchanges to XRP.

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FL5SiSiUIfay0cPLSN9nM%2Fmutilexchange%20crypto%20conversion.jpg?alt=media&amp;token=7b94779e-46d5-4cc3-9752-e9f9d978d83a" alt="Multi-exchange Converter "><figcaption></figcaption></figure></div>

After confirming the size of the Basket Order, it will create a strategy that performs the conversion on all exchanges in the most cost-effective way possible. In the event that one of the exchanges doesn't support trading the two assets against each other (in this case XRP/USDT), then the strategy will find the shortest path and re-route the order.

### Single-exchange Converter

You can also perform the same action on a single exchange, by dragging the **exchange distribution of the asset** on top of another asset. In the example below, we drag the Binance distribution of USDT, and release it on the XRP asset. This will convert your Binance USDT to XRP.

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FZfkHxS2gxxgbMS15Njo2%2Fsingle%20exchange%20crypto%20conversion.jpg?alt=media&amp;token=9cc41938-506c-4033-b1f3-03a881d639d8" alt="Single Crypto exchange converter "><figcaption></figcaption></figure></div>


# Public Trades

## Never miss a trade

Get a front-row seat to all trades happening in the market.

{% hint style="warning" %}
This module is currently in a very raw state. We will make updates to include filters and overall visual improvements in the near future.
{% endhint %}

To change or add products to the view, open the settings from the dropdown menu and add products just like how it works in the Ticker module.

<div data-full-width="false"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2F4Yi98qQEWpEKI4f1jKp8%2Fimage.png?alt=media&amp;token=4ef89125-e679-4d96-893d-445ff286e200" alt="Public Trades, Crypto Exchanges. "><figcaption></figcaption></figure></div>

| Default Columns | Purpose                               |
| --------------- | ------------------------------------- |
| Exchange        | Which exchange the trade was executed |
| Side            | Was the taker BUY or SELL side        |
| Product         | Pair traded with text on hover        |
| Size            | Size of the trade                     |
| Price           | Executed trade price                  |
| Trade Value     | Quote value of the trade              |
| Time            | The time of the trade                 |


# Order book

## Monitor the liquidity

{% hint style="warning" %}
This module is currently in a very raw state. We will make updates to include filters and overall visual improvements in the near future.
{% endhint %}

**To subscribe to an order book, open the settings from the dropdown menu and select the product.**

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2Fg2uRp44NHEB7tZUj3MHT%2Forderbook.jpg?alt=media&amp;token=2b445524-0d41-4abf-a4b2-a87a2a7c786a" alt="Order book, btc/usdt" width="424"><figcaption></figcaption></figure>


# Chart

TradingView Integration

## How to change product

We've integrated with TradingView, the most widely used charting tool. Like any other module the chart can be dragged, resized and zoomed. You can enable drawing on the chart from the settings in the dropdown menu, and you can add multiple charts to your workspace.

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FhoMCFlbTPa3bnvKvjng1%2Fimage.png?alt=media&amp;token=099f9c6b-310f-4f3c-aebc-09aad074fb40" alt="Chart BTC/USDT"><figcaption></figcaption></figure>

***

*We have some awesome designs, lined up for development to enable trading from the chart, here's a sneak peek.*

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FL0qoifrSIGjGf2TY3Wnb%2Fimage.png?alt=media&amp;token=b7df1061-2568-477e-b4f5-963804d7dabb" alt="Chart ETH/USDT, Trading "><figcaption><p>Design sketch of trading from the chart.</p></figcaption></figure>


# Trades

Overview of your own historical trades

## Your trades

To view your latest trades on exchange in Volven, open up the "Trades" module. Here you will find a clear overview of your recently executed trades, both manual and algorithmic. It follows the same data format as "Public Trades".

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2Fr3v5DpL8HWDE8mcAh3fN%2Fimage.png?alt=media&amp;token=3bd5313a-88e3-4a5f-90dd-57c629c03b22" alt="Own Trades, Crypto Trading "><figcaption></figcaption></figure></div>

| Default Columns | Purpose                               |
| --------------- | ------------------------------------- |
| Exchange        | Which exchange the trade was executed |
| Side            | Was the taker BUY or SELL side        |
| Product         | Pair traded with text on hover        |
| Size            | Size of the trade                     |
| Price           | Executed trade price                  |
| Trade Value     | Quote value of the trade              |
| Time            | The time of the trade                 |


# Orders

Manage and view your open and historical orders.

Algorithmic trading tends to generate high quantity of orders. In Volven Terminal you can easily view and manage all open and historical orders across all exchanges in one format.

{% hint style="info" %}
You can search for product, exchange and order type. You can also filter based on order status and order type.
{% endhint %}

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FoS6RLNEPQXq3oLkuQk2L%2Fimage.png?alt=media&amp;token=c9b8f278-22e8-435d-91ca-0598a9520092" alt="Live Orders, Crypto Trading "><figcaption></figcaption></figure></div>

| Default Columns | Purpose                                       |
| --------------- | --------------------------------------------- |
| Exchange        | Which exchange the trade was executed         |
| Status          | Buy or Sell order, and order status           |
| Product         | Pair traded with text on hover                |
| Type            | Order type (for example Limit, Market)        |
| Size            | Size of the trade                             |
| Price Limit     | Price limit of the order                      |
| Order Value     | Quote value of the trade                      |
| Filled          | Gauge that fills and shows percentage of fill |
| Time Placed     | The time of the trade                         |
| Actions         | Cancel button to cancel the order             |


# Futures Positions

Multi exchange position view

## Access to all your positions

View the different positions you have open across multiple venues in one window.

{% hint style="warning" %}
This module is currently in a very raw state. We will make updates to more functionalities and visual improvements in the near future.
{% endhint %}

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FsUgTy3gUi6SSxrjRF1RK%2Fimage.png?alt=media&amp;token=5605a1c2-f86c-4f17-9da6-a586e0916232" alt="Future Positions, Crypto Trading "><figcaption></figcaption></figure>

| Default Columns   | Purpose                                      |
| ----------------- | -------------------------------------------- |
| Exchange          | Which exchange the trade was executed        |
| Product           | Pair traded with text on hover               |
| Side              | Long or Short                                |
| Size              | Size of the positions (in base)              |
| Leverage          | Leverage tied to the position                |
| Margin Mode       | Isolated or Cross margin                     |
| Entry Price       | Your average entry price                     |
| Mark Price        | Price used to calculate PnL & Liq. price     |
| Liquidation Price | Price where exchange will liquidate position |
| Margin            | Your margin in the position                  |
| Profit and Loss % | Return on Investment in Quote and (Percent)  |


# Futures Settings

Manage your leverage and positions modes across exchanges

{% hint style="info" %}
The easiest way to access futures settings for a product is from the Ticker view (if you are subscribed to the product). If the product is a futures product it will have an *icon* next to the exchange name. **Click it** to open the futures settings for that product.
{% endhint %}

<div data-full-width="true"><figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FIqtElrucRwkpRGcytgFa%2FFutures%20Settings.jpg?alt=media&amp;token=03bd0729-6729-4620-bc1c-e40be82d92dd" alt="Ticker View, Crypto Trading "><figcaption><p>This will open the below panel</p></figcaption></figure></div>

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2Fp9HI4kiQW27nfEpk1LSk%2Fimage.png?alt=media&amp;token=2ce7e3eb-0a7e-44b4-94ba-8366606b100d" alt="Future Settings, Binance "><figcaption></figcaption></figure>

## Changing the settings

### Margin mode

You can choose between "Cross" and "Isolated" margin modes. [Here's an article](https://academy.binance.com/en/articles/what-are-isolated-margin-and-cross-margin-in-crypto-trading) on the difference.

### Leverage

Exchanges and products have different leverage brackets. You can also be restricted by your own leverage tier in some cases. If you try to exceed your max leverage, you will receive an error message.

### Position Mode

You can choose between **"One-way"** and **"Hedge mode".** Hedge mode allows you to have one long and one short position in the same product at the same time, while in one-way mode you are restricted to one position, either long or short.


# Accounts

Manage your API Keys in the terminal

## API Keys

In the accounts window you can view and manage all your API Keys. You can also register new API Keys from the settings menu, accessed from the dropdown in the top left corner of the module.

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FZ330tcUirOcIWosAFcQ6%2FAccounts.jpg?alt=media&amp;token=d0cff1aa-1590-4c5d-8582-e8de9b54f2be" alt="API Keys, Crypto Trading "><figcaption></figcaption></figure>

{% content-ref url="/pages/A1nlAJwOBsjLnyviRrYW" %}
[How to add your API Key](/getting-started/how-to-add-your-api-key)
{% endcontent-ref %}

### Editing permissions

{% hint style="info" %}
Click the edit button (pencil, far right). Editing allow you to enable/disable Spot or Futures trading with the API Key, given that it has sufficient permissions.&#x20;

If you have multiple API Keys for an exchange, the key marked as "Main" will be the default API Key selected when you create a new strategy.
{% endhint %}

<figure><img src="https://3358302989-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjfcxHmGphFAULb2DlSuK%2Fuploads%2FHsKPhnyhB7Wyd5t0RO0n%2Fimage.png?alt=media&amp;token=efc9d835-7ee6-447d-8355-004bb6ff6d08" alt=""><figcaption></figcaption></figure>


# Market Making


# Drive Market Making

DMM

## In-house market making algorithm


# Trend Market Making

TMM

## In-house market making algorithm


# Single Exchange Market Making

SMM

## In-house market making algorithm


# Multi-Exchange Market Making

MMM

## In-house market making algorithm


# Time-Weighted Average Price

TWAP

{% embed url="<https://www.youtube.com/watch?v=7PK1oT6y3_c>" %}

## What is the Volven TWAP?

TWAP stands for “time-weighted average price" and is a well-known algorithmic trading strategy from traditional finance. Rather than executing a single market- or limit order, Volven TWAP distributes the trades across a given time period.

By predicting market movements, Volven TWAP aims to have the best execution possible, and a good execution is the holy grail of trading.

### Cost-effective trade execution

We focus on developing strategies that provides long-term benefits for our clients. The TWAP aims to achieve the highest rate of passive trade execution, lowering your commissions and increasing spread capture. It holds the discretion to capture momentum, volume surprises and other predicitive movements.

### How to place a Volven TWAP?

<\<Youtube link to launch tutorial>>

### Optional parameters

<table><thead><tr><th width="259">Parameter</th><th>Purpose</th></tr></thead><tbody><tr><td>Price Limit</td><td>Upper barrier for buying, or lower barrier for selling. Prevents your strategy from buying at an unfavorable price.</td></tr><tr><td>Happy Level</td><td>Price level where you are happy to fill the remaining size of the strategy. Strategy will fill as fast as possible at the happy level regardless of the remaining time.</td></tr><tr><td>Trigger Price</td><td>Determines the price where the strategy will start. Meaning the strategy will be waiting until the market crosses the trigger price.</td></tr></tbody></table>


# TWAP Arbtirage

TARB

<\<Youtube link to What is TARB>>

## What is the Volven TARB?

TARB, short for TWAP Arbitrage, is an algorithmic trading strategy with dynamic take profit and stop loss. The strategy opens and closes the positions with the Volven TWAP strategy. The strategy holds the discretion to partially enter and exit the market. Meaning that during the course of its duration you could be entering and taking profits multiple times at different levels.

The TARB makes a profit by generating a net positive spread between its two child TWAPs.&#x20;

TARB's Take Profit and Stop Loss is based on the percentage of returns that you are making. They are not set to fixed levels since the strategy is dynamic and continously enters and exits the market.

### How to place a Volven TARB?

<\<Youtube link to launch tutorial>>

### Optional parameters

<table><thead><tr><th width="259">Parameter</th><th>Purpose</th></tr></thead><tbody><tr><td>Price Limit</td><td>Upper barrier for buying, or lower barrier for selling. Prevents your strategy from buying at an unfavorable price.</td></tr><tr><td>Stop Loss</td><td>If your return on investment is below your stop loss, the strategy will exit the remaining position and stop trading.</td></tr><tr><td>Trigger Price</td><td>Determines the price where the strategy will start. Meaning the strategy will be waiting until the market crosses the trigger price.</td></tr></tbody></table>


# Slicer

SC

<\<Youtube link to What is Slicer>>

## What is the Volven Slicer?

A Slicer is a dynamic execution strategy and can be described as a short-term TWAP strategy. The strategy will spread the executions of the order up to 15 min from the start (default value 1 min). Slicer aims to trade at market VWAP or better in a given time window. The Slicer is given the discretion to capture crypto momentum, volume surprises, and optimal order placement levels. It is a strategy that works well when you have decided on a level where you are happy to add or sell without being static in the market.

Slicer focuses highly on order handling and the importance of having the highest possible fill rate of passive executions. This will lower the commission and increase spread capture

### How to place a Volven Slicer?

<\<Youtube link to launch tutorial>>

### Optional parameters

<table><thead><tr><th width="259">Parameter</th><th>Purpose</th></tr></thead><tbody><tr><td>Price Limit</td><td>Upper barrier for buying, or lower barrier for selling. Prevents your strategy from buying at an unfavorable price.</td></tr></tbody></table>


# Smart Order

SMO

<\<Youtube link to What is Slicer>>

## What is the Volven Smart Order?

Smart Order is a dynamic trading strategy that sends a limit order at the best bid or ask price along with the market. The strategy will follow the market until it is filled, modified, canceled, or limit is reached. Follower order is an algo that works well to get in or out of positions quickly.

Smart Order has **Iceberg** support. Iceberg splits your order into multiple orders, executing one after another. This hides the total size of your order for the rest of the market, just like an iceberg where most of the body is hidden beneath the surface.

### How to place a Volven Smart Order?

<\<Youtube link to launch tutorial>>

### Optional parameters

<table><thead><tr><th width="259">Parameter</th><th>Purpose</th></tr></thead><tbody><tr><td>Price Limit</td><td>Upper barrier for buying, or lower barrier for selling. Prevents your strategy from buying at an unfavorable price.</td></tr><tr><td>Iceberg</td><td>Splits your order into multiple orders, executing one after another. This hides the total size of your order for the rest of the market.</td></tr><tr><td>Spike Protection</td><td>Protects you against trading unfavorably in volatile conditions.</td></tr></tbody></table>


# Bulk Converter

BC

Read and see how it works at the bottom of the Balances Chart page.

{% content-ref url="/pages/4Vg57dpxygYZv7kgs2SI" %}
[Balances Chart](/modules/ui-overview/balances-chart)
{% endcontent-ref %}


# Cobra

CO

## In development


# Advanced Limit Order

ALO

<\<Youtube link to What is ALO>>

## What is the Volven ALO?

The ALO is a trading strategy that automatically manages your take profit and stop loss. The trader provides the entry, TP, and SL (optional) price levels. When the entry order is filled, the trading strategy will monitor the market and automatically exit your position if the market hits the take profit price or stop loss price.

ALO is a great entry-level trading strategy for those looking to learn and understand more about algo trading. Especially in crypto, where the market never sleeps, it is essential to have trading strategies that monitor your positions to maintain an acceptable risk level.

### How to place a Volven ALO?

<\<Youtube link to launch tutorial>>

### Optional parameters

<table><thead><tr><th width="259">Parameter</th><th>Purpose</th></tr></thead><tbody><tr><td>Take Profit</td><td>Your take profit level to exit with the full amount.</td></tr><tr><td>Stop Loss Trigger</td><td>Your stop loss level to exit with the full amount.</td></tr></tbody></table>


# Parameter Explanations

<table data-full-width="true"><thead><tr><th width="259">Parameter</th><th width="161">Strategies</th><th>Purpose</th></tr></thead><tbody><tr><td>Price Limit</td><td>SMO, Slicer, TWAP, TARB</td><td>Upper barrier for buying, or lower barrier for selling. Prevents your strategy from buying at an unfavorable price.</td></tr><tr><td>Happy Level</td><td>TWAP, TARB</td><td>Price level where you are happy to fill the remaining size of the strategy. Strategy will fill as fast as possible at the happy level regardless of the remaining time.</td></tr><tr><td>Trigger Price</td><td>TWAP, TARB</td><td>Determines the price where the strategy will start. Meaning the strategy will be waiting until the market crosses the trigger price.</td></tr><tr><td>Iceberg</td><td>SMO</td><td>Splits your order into multiple orders, executing one after another. This hides the total size of your order for the rest of the market.</td></tr><tr><td>Spike Protections</td><td>SMO</td><td>Protects you against trading unfavorably in volatile conditions.</td></tr><tr><td>Take Profit</td><td>ALO, TARB</td><td>Take Profit level. Behaviour differes between ALO and TARB, please read them individually.</td></tr><tr><td>Stop Loss</td><td>ALO, TARB</td><td>Stop Loss level. Exits with the filled amount of the strategy.</td></tr><tr><td>Reduce Only</td><td>All strategies</td><td>Applies only to Futures. Orders will be sent with reduce only flag, meaning that if there is no position to reduce from, it will be rejected.</td></tr><tr><td>Always passive</td><td>All strategies</td><td>All orders will be forced as maker orders. Rejected orders will be resent at the best bid or best ask.</td></tr></tbody></table>


# Bull & Bear Trader

BULL & BEAR

## What is the Bull- and Bear Trader?

Bull- and Bear Trader are trading strategies that auto-trade either the long or the short side of the market. When you start for example the Bull Trader, it will buy and automatically take profit 24/7 or until you stop it. The strategy is always aware of market conditions and scales its orders accordingly to buy more when it's attractive, and less when it's not. And whenever it finds a good opportunity to take-profit, it will do so.&#x20;

By continuously taking profits, it takes longer to build a large position. This is intentional and reduces your risk in volatile markets while allowing you to capitalise on smaller moves without risking too much of your equity.&#x20;

## When should you start the Bull- or Bear Trader?

* Bull Trader - Start this strategy when you believe the market will go up in the coming days, weeks, or months. It's a long-term trading strategy and should be kept running for as long as you believe in the market direction.
* Bear Trader - Start this strategy when you believe the market will go down. Equally to the Bull Trader, this is a long-term trading strategy and should be kept running for as long as you believe in the market direction.

## Why should you use it?

Trading is difficult, very difficult! The Bull- and Bear Traders are the perfect trading companions that automatically take care of:&#x20;

* When you should build a position
* How much you should risk
* When you should take-profit
* When you should accept a loss

By systematically trading your belief in the market with the Bull- or Bear Trader you won't have to worry about any of these things, and even if you are wrong you can still make a profit.

## How do you get access?

The Bull- and Bear Trader are included in our "Experienced", and "Day Trader" subscriptions.

* [Limited-time offer for Experienced](https://docs.volven.io/strategies/www.volven.io/pricing)

## Parameters

<table><thead><tr><th width="228">Parameter</th><th>Purpose</th></tr></thead><tbody><tr><td>Max Position</td><td>Defines the maximum position the strategy can hold</td></tr><tr><td>Risk</td><td>Defines the tempo of the algorithm. The higher the risk, the higher the frequency of trades and faster accumulation of max position.</td></tr><tr><td>Stop Loss [Optional]</td><td>Defines when the strategy should exit a position with a loss and stop the strategy. Can be set as a trailing stop loss, or based on the invested amount (default).</td></tr></tbody></table>


# Environment

There are three environments that Volven infrastructure operates on:

* DEV (Development environment)
* TEST (Testing environment)
* PROD (Production environment)

Base URL for API connection is:

* `https://apigw.<env>.volven.net` for HTTP &#x20;
* `wss://apigw.<env>.volven.net` for WebSocket&#x20;

where `<env>` is `dev`, `test`, `prod` depending on the environment you want to connect.\
For example, base URL for production is `https://apicf.prod.volven.net`.

{% hint style="warning" %}
TLS layer is required for every API endpoint and trying to access insecure `http://` or `ws://` schema will end up with `301 Moved Permanently` returned with redirection to `https://` or `wss://`
{% endhint %}


# Volven API


# Authentication

In order to authenticate use following endpoint, passing your Volven/TYR Markets user name (which is your email) and password:

```http
POST /httpserver/main/v2/auth/login
{
    "username": "<email>",  
    "password": "<password>"
}
```

If you have 2FA enabled you will get following response:

```http
200 OK
{
    "awsUsername": "9205eec4-8b36-48a4-aa6c-a73e8ce01684",
    "session": "AYABeK9med7n...Z7oBVQAjVJEZ0k",
    "challengeName": "SOFTWARE_TOKEN_MFA",
    "status": "CHALLENGE_REQUIRED"
}
```

In that case you have to provide OTP (one time password) from your configured authenticator app.\
Send it in `challengeAnswer` field along with `awsUsername` and `session` from previous authentication response:

```http
POST /httpserver/main/v2/auth/login
{
    "awsUsername": "9205eec4-8b36-48a4-aa6c-a73e8ce01684",
    "session": "AYABeK9med7n...Z7oBVQAjVJEZ0k",
    "challengeName": "SOFTWARE_TOKEN_MFA",
    "status": "CHALLENGE_REQUIRED",
    "challengeAnswer": "898165"
}
```

Once you are successfully authenticated (with or without 2FA enabled) you will get following response:

```http
200 OK
Authorization: Bearer eyJraWQiOiJWQmd...8yeUJmCX2JXxyJBzHA
{
    "refreshToken": "eyJjdHkiOiJKV1Qi...ULGaonedpIyv86GNpg",
    "expirationTime": 3600,
    "isAppConnected": false
}
```

Now you need to use the token received in `Authorization` header from the response above to authorize all business API request. You simply pass this token in `Authorization` header when performing every HTTP request or initiating WebSocket connection.&#x20;

The token is valid for `expirationTime` number of seconds, which in this case is 1 hour. If you want to use API in continuous manner but authorize only once then use `refreshToken` from the response above. Perform following call periodically before your session expires (for instance 5 minutes before expiration time):

```http
POST /httpserver/main/v2/auth/login
{
    "refreshToken": "eyJjdHkiOiJKV1Qi...ULGaonedpIyv86GNpg"
}
```

You should receive following response meaning that your session has been prolonged and will expire at `expirationTime` (Unix timestamp). You need to replace your existing token with a new one from `Authorization` header from the response below:

```http
200 OK
Authorization: Bearer eyJraWQiOiJWQmd...nFmxU4PiUIV38iEbZA
{
    "expirationTime": 1758546865
}
```


# Strategy API

## Quickstart example: Launch SMO (Smart Order) strategy

### Exchange account

Some strategies run on single account and some on multiple accounts. In this example we will launch SMO strategy on single Bybit account. You need to obtain you exchange account ID first by calling this endpoint:

```
GET /as/v3/accounts
```

You should receive list of your accounts:

```json
200 OK
[
    {
        "id": "99998",
        "createdAt": "2024-08-19T16:32:03.900Z",
        "userId": "42",
        "name": "Bybit",
        "exchangeCode": "BYB",
        "exchange": "BYB",
        "description": "Bybit",
        "apiKey": "nt2jRz4sDBXINYNsAb8H",
        "validatedAt": "2025-01-17T07:26:16.466Z",
        "spot": {
            "isActive": true
        },
        "futures": {
            "isActive": true,
            "settings": {}
        },
        "isMain": true,
        "eventTime": "2025-09-22T12:54:25.732Z",
        "accountType": "SUB_ACCOUNT",
        "whitelistedIps": [
            ""
        ],
        "permissions": [
            ...
        ]
    },
    {
        "id": "99999",
        "createdAt": "2024-10-30T10:09:16.536Z",
        "userId": "42",
        "name": "Binance",
        "exchangeCode": "BIN",
        "exchange": "BIN",
        "description": "Binance",
        "apiKey": "rFTZsjDdrt07NFsHQLCx",
        "validatedAt": "2025-01-17T07:26:21.984Z",
        "spot": {
            "isActive": true
        },
        "futures": {
            "isActive": true,
            "settings": {}
        },
        "isMain": true,
        "eventTime": "2025-09-22T12:54:25.732Z",
        "accountType": "SUB_ACCOUNT",
        "whitelistedIps": [
            ""
        ],
        "permissions": [
            ...
        ]
    }
]
```

As you see, Bybit account has ID of `99998`, so that's what you have to pass as `accountId` in create strategy request.

### Products metadata

Some strategies trade on a single product and some on multiple products. In this example we will launch SMO which is trading on a single product. We need a product code to pass to API when launching strategy. Volven uses its own internal product codes. You can retrieve them (along with more information about products) by calling following endpoint:

```
GET /mms/v2/productDetails
```

or, if you want to narrow results to a single exchange, pass `exchangeCode` query parameter with one of following exchange codes:

* `BIN` - Binance
* `BYB` - Bybit
* `OKX` - OKX
* `CRYPTO` - Crypto.com
* `IB` - Interactive Brokers
* `VB` - TÝR Markets

```
GET /mms/v2/productDetails?exchangeCode=BYB
```

You will receive a list of supported products. Example response (shortened) would look like this:

```json
[
    {
        "productCode": "btcusdt",
        "exchangeProductCode": "BTCUSDT",
        "exchangeCode": "BYB",
        "base": "BTC",
        "quote": "USDT",
        "minSize": "0.000001",
        "maxSize": "17000",
        "minPrice": "0.01",
        "minNotionalValue": "5",
        "sizeIncrement": "0.000001",
        "priceIncrement": "0.01",
        "productType": "SPOT",
        "name": "BTC/USDT",
        "tradingViewSymbol": "BYBIT:BTCUSDT",
        "walletTypes": [
            "BYBIT_SPOT",
            "BYBIT_UNIFIED_TRADING"
        ],
        "volvenName": "BTC/USDT",
        "contractValue": "",
        "contractValueCurrency": "",
        "removed": false
    },
    {
        "productCode": "btcusdt_f",
        "exchangeProductCode": "BTCUSDT",
        "exchangeCode": "BYB",
        "base": "BTC",
        "quote": "USDT",
        "minSize": "0.001",
        "maxSize": "1190.000",
        "minPrice": "0.10",
        "sizeIncrement": "0.001",
        "priceIncrement": "0.10",
        "productType": "FUTURES",
        "name": "BTCUSDT USDT Perpetual",
        "contractType": "PERPETUAL",
        "tradingViewSymbol": "BYBIT:BTCUSDT.P",
        "walletTypes": [
            "BYBIT_DERIVATIVES",
            "BYBIT_UNIFIED_TRADING"
        ],
        "contractCategory": "LINEAR",
        "volvenName": "BTCUSDT Perpetual",
        "contractValue": "",
        "contractValueCurrency": "",
        "removed": false
    }
]
```

{% hint style="warning" %}
Keep in mind that Volven doesn't support all products, if you are interested in a particular product that's not on this list feel free to contact support.&#x20;
{% endhint %}

You need to pass `productCode` as in input to the strategy. Also pay attention to `minSize` (minimum order size in base currency), `minNotionalValue` (minimum order size in quote currency), `sizeIncrement` and `priceIncrement` when providing size/price inputs to the strategy.

### Create strategy

In order to launch SMO strategy send following request:

```json
POST /strategy-orchestrator/strategies/action/create
{
  "strategyType": "SMO",
  "productCode": "btcusdt_f",
  "accountId": "99998",
  "side": "BUY",
  "size": 0.1,
  "priceLimit": 95000,
  "orderMaxSize": 0.03,
  "aggressiveness": 0.5,
  "triggerPrice": 94000,
  "useSpikeProtection": false,
  "alwaysPassive": true,
  "autoRun": true,
}
```

If everything is correct you should receive:

```json
201 Created
{
  "strategyId": "string"
}
```

In case of request validation error you will get explanation of what is wrong:

```json
400 Bad Request
{
  "timestamp": "2025-09-15T14:56:35.228+00:00",
  "status": "400",
  "error": "Bad Request",
  "message": "Validation failed",
  "path": "/strategy-orchestrator/strategies/SMO/action/create",
  "errors": [
    {
      "field": "aggressiveness",
      "description": "must be between 0 and 1"
    },
    {
      "field": "orderMaxSize",
      "description": "must be greater than 0"
    },
    {
      "field": "priceLimit",
      "description": "must be greater than 0"
    },
    {
      "field": "side",
      "description": "must match \"BUY|SELL\""
    }
  ]
}
```

## Full API specification

For more information look into OpenAPI specification described in this document subpages


# Strategy Action Controller

## PUT /strategies/{strategyAppId}/action/stop

> Stop a strategy

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/{strategyAppId}/action/stop":{"put":{"tags":["strategy-action-controller"],"summary":"Stop a strategy","operationId":"stopStrategy","parameters":[{"name":"strategyAppId","in":"path","required":true,"schema":{"type":"string"}},{"name":"se-api-version","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"202":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## PUT /strategies/{strategyAppId}/action/start

> Start a strategy

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/{strategyAppId}/action/start":{"put":{"tags":["strategy-action-controller"],"summary":"Start a strategy","operationId":"startStrategy","parameters":[{"name":"strategyAppId","in":"path","required":true,"schema":{"type":"string"}},{"name":"se-api-version","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"202":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## PUT /strategies/{strategyAppId}/action/schedule-opening-pause

> Schedule opening pause for a strategy

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"ScheduleOpeningPause":{"properties":{"fromTime":{"type":"string","format":"date-time"},"toTime":{"type":"string","format":"date-time"}},"required":["fromTime","toTime"]},"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/{strategyAppId}/action/schedule-opening-pause":{"put":{"tags":["strategy-action-controller"],"summary":"Schedule opening pause for a strategy","operationId":"scheduleOpeningPause","parameters":[{"name":"strategyAppId","in":"path","required":true,"schema":{"type":"string"}},{"name":"se-api-version","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleOpeningPause"}}},"required":true},"responses":{"202":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## PUT /strategies/{strategyAppId}/action/pause

> Pause a strategy

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/{strategyAppId}/action/pause":{"put":{"tags":["strategy-action-controller"],"summary":"Pause a strategy","operationId":"pauseStrategy","parameters":[{"name":"strategyAppId","in":"path","required":true,"schema":{"type":"string"}},{"name":"se-api-version","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"202":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## PUT /strategies/{strategyAppId}/action/flush

> Flush strategy's open positions

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"FlushPosition":{"properties":{"longPositionTargetPercentage":{"type":"number"},"shortPositionTargetPercentage":{"type":"number"}},"required":["longPositionTargetPercentage","shortPositionTargetPercentage"]},"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/{strategyAppId}/action/flush":{"put":{"tags":["strategy-action-controller"],"summary":"Flush strategy's open positions","operationId":"flushStrategy","parameters":[{"name":"strategyAppId","in":"path","required":true,"schema":{"type":"string"}},{"name":"se-api-version","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlushPosition"}}},"required":true},"responses":{"202":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## PUT /strategies/resumeAll

> Resume all strategies

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/resumeAll":{"put":{"tags":["strategy-action-controller"],"summary":"Resume all strategies","operationId":"resumeAll","parameters":[{"name":"se-api-version","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"202":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## PUT /strategies/pauseAll

> Pause all strategies

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/pauseAll":{"put":{"tags":["strategy-action-controller"],"summary":"Pause all strategies","operationId":"pauseAll","parameters":[{"name":"se-api-version","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"202":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## POST /strategies/action/create

> Create new strategy

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"CreateAiRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"aiModelVariant":{"type":"string","description":"Defines which type and variant of AI model should be used.\nVFM6 - Volven Flagship Model ver. 6\nVFM7 - Volven Flagship Model ver. 7\nVFM8 - Volven Flagship Model ver. 8","enum":["VFM6","VFM7","VFM8"]},"aiModelPositionMode":{"type":"string","description":"LONG - model will give long recommendations only (base currency allocation will always stay above or equal to 0)\nSHORT - model will give short recommendations only (base currency allocation will always stay below or equal to 0)\nCOMBINED - model will give both long and short recommendations (base currency allocation can be both positive or negative)","enum":["LONG","SHORT","COMBINED"],"pattern":"LONG|SHORT|COMBINED"},"executionType":{"type":"string","description":"Defines how rebalancing will be executed.\nSMO - Smart Order\nSMO_PL - Smart Order with calculated Price Limit\nSMO_MPL - Smart Order with Price Limit from AI Model\nSMO_FDPL - Smart Order with Futures Dynamic Price Limit (available for futures products only)\nSO_VMO - Strategy Order without Price Limit (Volven Market Order)\nSO_PL - Strategy Order with calculated Price Limit","enum":["SMO","SMO_PL","SMO_MPL","SMO_FDPL","SO_VMO","SO_PL"],"pattern":"SMO|SMO_PL|SMO_MPL|SMO_FDPL|SO_VMO|SO_PL"},"useInitialModelPrice":{"type":"boolean","description":"Whether to use initial AI model execution price instead of last received price."},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"initialBaseCurrencySize":{"type":"number","description":"Initial allocation of base currency that will be used by the strategy for trading","minimum":0},"initialQuoteCurrencyAmount":{"type":"number","description":"Initial allocation of quote currency that will be used by the strategy for trading","minimum":0},"desiredNetProfitPercentage":{"type":"number","description":"When net profit percentage goes above this value then strategy is stopped and position is closed.","maximum":1,"minimum":0.01},"useSpikeProtection":{"type":"boolean"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","initialBaseCurrencySize","initialQuoteCurrencyAmount","productCode","strategyType"]},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."},"CreateAloRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"executionType":{"type":"string","pattern":"SO|SMO|SC"},"maxActiveTime":{"type":"integer","format":"int32"},"runSmoIfNotFilled":{"type":"boolean"},"aggressiveness":{"type":"number","default":0},"orderMaxSize":{"type":"number"},"takeProfitExecutionType":{"type":"string","pattern":"SO|SMO"},"takeProfitPriceLimit":{"$ref":"#/components/schemas/priceLimit"},"takeProfitAggressiveness":{"type":"number","default":0.5},"takeProfitOrderMaxSize":{"type":"number"},"stopLossExecutionType":{"type":"string","pattern":"SO|SMO"},"stopLossTrigger":{"type":"number","minimum":0},"stopLossPriceLimit":{"$ref":"#/components/schemas/priceLimit"},"stopLossAggressiveness":{"type":"number","default":1},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"reduceOnlyEnabled":{"type":"boolean"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType"]},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"CreateBcRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"inputs":{"type":"array","items":{"$ref":"#/components/schemas/Input"}},"accountIds":{"type":"array","deprecated":true,"items":{"type":"string","deprecated":true}},"inputCurrencies":{"type":"array","deprecated":true,"items":{"type":"string","deprecated":true}},"inputSizes":{"type":"array","deprecated":true,"items":{"type":"number","deprecated":true}},"outputCurrency":{"type":"string","minLength":1},"includeFiat":{"type":"boolean"},"ignoreImpossibleConversions":{"type":"boolean"},"executor":{"oneOf":[{"$ref":"#/components/schemas/BcExecutorSc"},{"$ref":"#/components/schemas/BcExecutorSmo"},{"$ref":"#/components/schemas/BcExecutorTwap"}]},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["outputCurrency","strategyType"]},"Input":{"properties":{"accountIds":{"type":"array","items":{"type":"string"}},"sourceCurrency":{"type":"string"},"sourceSize":{"type":"number"},"targetCurrency":{"type":"string"},"targetSize":{"type":"number"},"productType":{"type":"string","enum":["SPOT","FUTURES","CFD","SPOT_MARGIN_ISOLATED","SPOT_MARGIN_CROSS"]}},"required":["accountIds","productType","sourceCurrency","targetCurrency"]},"BcExecutorSc":{"allOf":[{"$ref":"#/components/schemas/BcExecutor"},{"type":"object","properties":{"strategyType":{"type":"string"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"maxActiveTime":{"type":"integer","format":"int32","maximum":900,"minimum":30}}}]},"BcExecutor":{"discriminator":{"propertyName":"strategyType"},"properties":{"strategyType":{"type":"string"}},"required":["strategyType"]},"BcExecutorSmo":{"allOf":[{"$ref":"#/components/schemas/BcExecutor"},{"type":"object","properties":{"strategyType":{"type":"string"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"}}}]},"orderMaxSize":{"type":"number","description":"Max size sent in an order at once. (Iceberg)","minimum":0},"BcExecutorTwap":{"allOf":[{"$ref":"#/components/schemas/BcExecutor"},{"type":"object","properties":{"strategyType":{"type":"string"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"maxActiveTime":{"type":"integer","format":"int32","maximum":86400,"minimum":600}}}]},"CreateBullRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"maxPositionSize":{"type":"number","description":"Passed to every TARB child as max_position_size parameter."},"tempo":{"type":"string","description":"Defines how hourlyVolume should be calculated based on maxPositionSize","minLength":1,"pattern":"LOW|MEDIUM|HIGH"},"useAllowedPositionSize":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"acceptableNetLossPercentage":{"type":"number","maximum":1,"minimum":0.01},"acceptableDrawdownPercentage":{"type":"number","maximum":1,"minimum":0.01},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","maxPositionSize","productCode","strategyType","tempo"]},"CreateBearRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"maxPositionSize":{"type":"number","description":"Passed to every TARB child as max_position_size parameter."},"tempo":{"type":"string","description":"Defines how hourlyVolume should be calculated based on maxPositionSize","minLength":1,"pattern":"LOW|MEDIUM|HIGH"},"useAllowedPositionSize":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"acceptableNetLossPercentage":{"type":"number","maximum":1,"minimum":0.01},"acceptableDrawdownPercentage":{"type":"number","maximum":1,"minimum":0.01},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","maxPositionSize","productCode","strategyType","tempo"]},"CreateBoRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"inputs":{"type":"array","items":{"$ref":"#/components/schemas/Input"}},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["strategyType"]},"CreateCoRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"size":{"$ref":"#/components/schemas/size"},"positionMode":{"type":"string","description":"Defines in which direction positions should be opened.\nLONG - long positions only (open with BUY, close with SELL)\nSHORT - short positions only (open with SELL, close with BUY)\nCOMBINED - both long and short positions","enum":["LONG","SHORT","COMBINED"],"pattern":"LONG|SHORT|COMBINED"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","size","strategyType"]},"CreateCrabRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"stdDevWindow":{"type":"number","default":1012,"description":"Size of moving window (in seconds) used to calculate standard deviation of market price."},"stdDevPercThreshold":{"type":"number","default":0.002,"description":"If relative standard deviation of market price is lower than this value then sideways trend is activated."},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType"]},"CreateDmmRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"hourlyVolume":{"type":"number","description":"Total hourly volume. Half of this value is passed to every TARB child as hourly_volume parameter."},"maxPositionSize":{"type":"number","description":"Passed to every TARB child as max_position_size parameter."},"deviationWindow":{"type":"integer","format":"int32","default":2100,"description":"Size of moving window (in seconds) used to calculate price and volume deviation.","maximum":7200,"minimum":900},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","hourlyVolume","maxPositionSize","productCode","strategyType"]},"CreateOtcqRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"exchangeAccountProducts":{"type":"array","items":{"$ref":"#/components/schemas/ExchangeAccountProduct"}},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"slippage":{"type":"number","default":0},"stopLossTrigger":{"type":"number"},"stopLossVolumeMode":{"type":"string","default":"OFF","pattern":"OFF|ABSOLUTE|DYNAMIC"},"stopLossVolumeDepth":{"type":"number"},"profitMargin":{"type":"number"},"aggressiveness":{"type":"number"},"estimatedExecution":{"type":"array","items":{"$ref":"#/components/schemas/EstimatedExecution"},"minItems":1},"priceOffsets":{"type":"array","deprecated":true,"items":{"$ref":"#/components/schemas/FeeOffset"}},"feeOffsets":{"type":"array","items":{"$ref":"#/components/schemas/FeeOffset"}},"estimationMode":{"type":"string","default":"VOLUME15M","pattern":"ORDERBOOK|VOLUME15M"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["estimatedExecution","side","size","strategyType"]},"ExchangeAccountProduct":{"properties":{"exchangeCode":{"type":"string"},"accountId":{"type":"string"},"productCode":{"type":"string"}}},"EstimatedExecution":{"properties":{"accountId":{"type":"string"},"exchangeCode":{"type":"string"},"size":{"type":"number"},"avgPrice":{"type":"number"},"bestOffer":{"type":"number"}}},"FeeOffset":{"properties":{"exchangeCode":{"type":"string"},"offset":{"type":"number"}}},"CreateScRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"maxActiveTime":{"type":"integer","format":"int32","maximum":900,"minimum":30},"reduceOnlyEnabled":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType"]},"CreateSmmRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"lossPercent":{"type":"number","description":"SL in % used in Predicted Order (PO) strategy (current loss is calculated for BUY side as 'ask-hedge/ask' and for SELL side as 'hedge-bid/hedge')","maximum":0.25,"minimum":0},"maxDoublingLevels":{"type":"integer","format":"int32","default":4,"description":"Max number of doubling levels (when reached, no more baits will be sent)","maximum":6,"minimum":0},"hedgeLifeSec":{"type":"integer","format":"int32","default":60,"description":"After how many seconds hedge order should be canceled","maximum":300,"minimum":0},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType"]},"CreateSmoRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"useSpikeProtection":{"type":"boolean"},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"reduceOnlyEnabled":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType"]},"triggerPrice":{"type":"number","description":"When that price is crossed then execution of strategy is triggered. Must be greater or equal to product min price"},"CreateEtfRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"exchangeAccountProducts":{"type":"array","items":{"$ref":"#/components/schemas/ExchangeAccountProduct"}},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"maxRunningTime":{"type":"integer","format":"int32","maximum":86400,"minimum":600},"numberOfSlices":{"type":"integer","format":"int32","maximum":100,"minimum":3},"sliceExecutionTime":{"type":"integer","format":"int32","minimum":1},"aggressivenessBoostStartOffset":{"type":"integer","format":"int32","deprecated":true},"aggressivenessBoostEndOffset":{"type":"integer","format":"int32","deprecated":true},"initialAggressivenessBoostSeconds":{"type":"integer","format":"int32"},"closingAggressivenessBoostSeconds":{"type":"integer","format":"int32"},"reallocationInterval":{"type":"integer","format":"int32","minimum":1},"slippage":{"type":"number","maximum":0.1,"minimum":0},"priceOffsets":{"type":"array","deprecated":true,"items":{"$ref":"#/components/schemas/FeeOffset"}},"feeOffsets":{"type":"array","items":{"$ref":"#/components/schemas/FeeOffset"}},"volumePercentageAtRisk":{"type":"number","maximum":0.5,"minimum":0},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"useFeeOffsetsCalculation":{"type":"boolean"},"estimationMode":{"type":"string","default":"VOLUME15M","pattern":"ORDERBOOK|VOLUME15M"},"triggerAt":{"type":"string","format":"date-time"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["maxRunningTime","numberOfSlices","side","size","sliceExecutionTime","strategyType"]},"CreateSoRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","priceLimit","productCode","side","size","strategyType"]},"CreateTarbRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"takeProfitPricePercentage":{"type":"number","description":"Take Profit TWAP’s price_limit param will be updated every time Opening TWAP’s average_price changes. It will be set to average_price * (100% +/- take_profit_price_percentage).","maximum":1,"minimum":0},"stopLossPricePercentage":{"type":"number","description":"Stop Loss TWAP’s price_limit param will be updated every time Opening TWAP’s average_price changes. It will be set to average_price * (100% +/- take_profit_price_percentage).","maximum":1,"minimum":0},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"triggerTime":{"type":"integer","format":"int32","description":"Time after which strategy will start trading","minimum":0},"twapMaxActiveTime":{"type":"integer","format":"int32","maximum":8640000,"minimum":600},"happyLevelLimitOpening":{"type":"number"},"happyLevelLimitTp":{"type":"number"},"reduceOnlyEnabled":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType","takeProfitPricePercentage"]},"CreateTmmRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"reduceOnlyEnabled":{"type":"boolean"},"hourlyVolume":{"type":"number","description":"Total hourly volume. Half of this value is passed to every TARB child as hourly_volume parameter."},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"maxPositionSize":{"type":"number","description":"Passed to every TARB child as max_position_size parameter."},"happyLevelPositionPercentage":{"type":"number","maximum":1,"minimum":0},"takeProfitPricePercentage":{"type":"number","maximum":1,"minimum":0},"volumePercentageAtRisk":{"type":"number","maximum":1,"minimum":0.01},"usePositionRebalancing":{"type":"boolean"},"positionNetting":{"type":"number","deprecated":true,"maximum":1,"minimum":0},"longPositionRebalancingThreshold":{"type":"number","maximum":1,"minimum":0},"shortPositionRebalancingThreshold":{"type":"number","maximum":1,"minimum":0},"lowVolatilityMode":{"type":"string","default":"NONE","description":"Defines which child strategy type should be active during low volatility market.","pattern":"NONE|TARB|CRAB"},"lowVolatilityThreshold":{"type":"string","pattern":"LOW|MEDIUM|HIGH"},"stdDevPercThreshold":{"type":"number"},"deviationWindow":{"type":"integer","format":"int32","default":2100,"description":"Size of moving window (in seconds) used to calculate price and volume deviation.","maximum":7200,"minimum":900},"useTargetVolumeFromParent":{"type":"boolean"},"acceptableNetLossPercentage":{"type":"number","maximum":1,"minimum":0.01},"acceptableDrawdownPercentage":{"type":"number","maximum":1,"minimum":0.01},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","hourlyVolume","maxPositionSize","productCode","strategyType"]},"CreateTwapRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"happyLevelLimit":{"type":"number"},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"triggerTime":{"type":"integer","format":"int32","description":"Time when strategy will be started, up 4 hours","minimum":0},"maxActiveTime":{"type":"integer","format":"int32","maximum":8640000,"minimum":600},"reduceOnlyEnabled":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType"]},"CreateAlsRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"positionMode":{"type":"string","enum":["LONG","SHORT","COMBINED"]},"maxPositionSize":{"type":"number"},"aggressiveness":{"type":"number","default":0},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","maxPositionSize","positionMode","productCode","strategyType"]},"CreateAhRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"cryptoAccountId":{"type":"string","minLength":1},"forexAccountId":{"type":"string"},"baits":{"type":"array","items":{"$ref":"#/components/schemas/Bait"}},"quoteCurrency":{"type":"string"},"runMode":{"type":"string","enum":["INSTANT","BACKGROUND"]},"maxProductImbalances":{"type":"array","items":{"$ref":"#/components/schemas/MaxProductImbalance"}},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"aggressiveness":{"type":"number"},"orderMaxValue":{"type":"number"},"maxOrderLifetime":{"type":"integer","format":"int32"},"fairPriceMargin":{"type":"number"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["cryptoAccountId","strategyType"]},"Bait":{"properties":{"productCode":{"type":"string"},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"type":"number"},"value":{"type":"number"}},"required":["productCode","side","size","value"]},"MaxProductImbalance":{"properties":{"productCode":{"type":"string"},"maxImbalance":{"type":"number"}},"required":["maxImbalance","productCode"]},"CreateCtRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountSizes":{"type":"array","items":{"$ref":"#/components/schemas/AccountSize"},"minItems":1},"side":{"type":"string","enum":["BUY","SELL"]},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"useSpikeProtection":{"type":"boolean"},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"reduceOnlyEnabled":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountSizes","productCode","side","strategyType"]},"AccountSize":{"properties":{"accountId":{"type":"string","minLength":1},"size":{"$ref":"#/components/schemas/size"}},"required":["accountId","size"]},"StrategyResult":{"properties":{"strategyId":{"type":"string"}}},"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/action/create":{"post":{"tags":["strategy-action-controller"],"summary":"Create new strategy","operationId":"createStrategy","requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreateAiRequest"},{"$ref":"#/components/schemas/CreateAloRequest"},{"$ref":"#/components/schemas/CreateBcRequest"},{"$ref":"#/components/schemas/CreateBullRequest"},{"$ref":"#/components/schemas/CreateBearRequest"},{"$ref":"#/components/schemas/CreateBoRequest"},{"$ref":"#/components/schemas/CreateCoRequest"},{"$ref":"#/components/schemas/CreateCrabRequest"},{"$ref":"#/components/schemas/CreateDmmRequest"},{"$ref":"#/components/schemas/CreateOtcqRequest"},{"$ref":"#/components/schemas/CreateScRequest"},{"$ref":"#/components/schemas/CreateSmmRequest"},{"$ref":"#/components/schemas/CreateSmoRequest"},{"$ref":"#/components/schemas/CreateEtfRequest"},{"$ref":"#/components/schemas/CreateSoRequest"},{"$ref":"#/components/schemas/CreateTarbRequest"},{"$ref":"#/components/schemas/CreateTmmRequest"},{"$ref":"#/components/schemas/CreateTwapRequest"},{"$ref":"#/components/schemas/CreateAlsRequest"},{"$ref":"#/components/schemas/CreateAhRequest"},{"$ref":"#/components/schemas/CreateCtRequest"}]}}},"required":true},"responses":{"201":{"description":"Created","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StrategyResult"}}}},"400":{"description":"","content":{"*/*":{}}},"422":{"description":"Strategy cannot be created","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## Modify a strategy

> Parameters depends on strategy type. PATCH behavior\
> \- "foo" : null  -> foo := null\
> \- missing "foo" -> foo left unchanged<br>

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"ModifySoRequest":{"properties":{"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."},"ModifySmoRequest":{"properties":{"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"aggressiveness":{"type":"number","default":0,"description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side.","maximum":1,"minimum":-100},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"orderMaxSize":{"type":"number","description":"Max size sent in an order at once. (Iceberg)","minimum":0},"triggerPrice":{"type":"number","description":"When that price is crossed then execution of strategy is triggered. Must be greater or equal to product min price"},"ModifyScRequest":{"properties":{"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ModifyTwapRequest":{"properties":{"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"happyLevelLimit":{"type":"number"},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ModifyTarbRequest":{"properties":{"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"happyLevelLimitOpening":{"type":"number"},"happyLevelLimitTp":{"type":"number"},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ModifyAloRequest":{"properties":{"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"aggressiveness":{"type":"number"},"orderMaxSize":{"type":"number"},"takeProfitPriceLimit":{"$ref":"#/components/schemas/priceLimit"},"takeProfitAggressiveness":{"type":"number"},"takeProfitOrderMaxSize":{"type":"number"},"stopLossPriceLimit":{"$ref":"#/components/schemas/priceLimit"},"stopLossTrigger":{"$ref":"#/components/schemas/priceLimit"},"stopLossAggressiveness":{"type":"number"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ModifyTmmRequest":{"properties":{"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ModifyDmmRequest":{"properties":{"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ModifySmmRequest":{"properties":{"size":{"type":"number"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"lossPercent":{"type":"number"},"maxDoublingLevels":{"type":"integer","format":"int32"},"hedgeLifeSec":{"type":"integer","format":"int32"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ModifyCrabRequest":{"properties":{"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ModifyBullRequest":{"properties":{"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ModifyBearRequest":{"properties":{"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/{strategyAppId}/action/modify":{"patch":{"tags":["strategy-action-controller"],"summary":"Modify a strategy","description":"Parameters depends on strategy type. PATCH behavior\n- \"foo\" : null  -> foo := null\n- missing \"foo\" -> foo left unchanged\n","operationId":"modifyStrategy","parameters":[{"name":"strategyAppId","in":"path","required":true,"schema":{"type":"string"}},{"name":"se-api-version","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ModifySoRequest"},{"$ref":"#/components/schemas/ModifySmoRequest"},{"$ref":"#/components/schemas/ModifyScRequest"},{"$ref":"#/components/schemas/ModifyTwapRequest"},{"$ref":"#/components/schemas/ModifyTarbRequest"},{"$ref":"#/components/schemas/ModifyAloRequest"},{"$ref":"#/components/schemas/ModifyTmmRequest"},{"$ref":"#/components/schemas/ModifyDmmRequest"},{"$ref":"#/components/schemas/ModifySmmRequest"},{"$ref":"#/components/schemas/ModifyCrabRequest"},{"$ref":"#/components/schemas/ModifyBullRequest"},{"$ref":"#/components/schemas/ModifyBearRequest"}]}}},"required":true},"responses":{"202":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## DELETE /strategies/{strategyAppId}/action/delete

> Delete a strategy

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/{strategyAppId}/action/delete":{"delete":{"tags":["strategy-action-controller"],"summary":"Delete a strategy","operationId":"deleteStrategy","parameters":[{"name":"strategyAppId","in":"path","required":true,"schema":{"type":"string"}},{"name":"se-api-version","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"202":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## DELETE /strategies/deleteAll

> Delete all strategies

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/deleteAll":{"delete":{"tags":["strategy-action-controller"],"summary":"Delete all strategies","operationId":"deleteAll","parameters":[{"name":"se-api-version","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"202":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```


# Strategy Read Controller

## POST /strategies/find

> Returns user's root strategies

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"StrategyResponse":{"properties":{"strategyId":{"type":"string"},"version":{"type":"integer","format":"int32"},"engineVer":{"type":"integer","format":"int32"},"eventTime":{"type":"string","format":"date-time"},"state":{"type":"object","additionalProperties":{"type":"string"}},"uiParams":{"type":"object","additionalProperties":{"type":"object"}},"uiData":{"type":"string"}}},"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/find":{"post":{"tags":["strategy-read-controller"],"summary":"Returns user's root strategies","operationId":"findRootStrategies","parameters":[{"name":"createdByUserId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StrategyResponse"}}}}},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Unprocessable Entity","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## POST /strategies/find-families

> Returns user's strategies families

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"StrategyResponse":{"properties":{"strategyId":{"type":"string"},"version":{"type":"integer","format":"int32"},"engineVer":{"type":"integer","format":"int32"},"eventTime":{"type":"string","format":"date-time"},"state":{"type":"object","additionalProperties":{"type":"string"}},"uiParams":{"type":"object","additionalProperties":{"type":"object"}},"uiData":{"type":"string"}}},"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/find-families":{"post":{"tags":["strategy-read-controller"],"summary":"Returns user's strategies families","operationId":"findFamilies","parameters":[{"name":"createdByUserId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StrategyResponse"}}}}},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Unprocessable Entity","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## GET /strategies/find/{strategyAppId}

> Returns given strategy

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"StrategyResponse":{"properties":{"strategyId":{"type":"string"},"version":{"type":"integer","format":"int32"},"engineVer":{"type":"integer","format":"int32"},"eventTime":{"type":"string","format":"date-time"},"state":{"type":"object","additionalProperties":{"type":"string"}},"uiParams":{"type":"object","additionalProperties":{"type":"object"}},"uiData":{"type":"string"}}},"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/find/{strategyAppId}":{"get":{"tags":["strategy-read-controller"],"summary":"Returns given strategy","operationId":"findStrategy","parameters":[{"name":"strategyAppId","in":"path","required":true,"schema":{"type":"string"}},{"name":"createdByUserId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StrategyResponse"}}}},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Unprocessable Entity","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## GET /strategies/find/root/{rootId}

> Returns all strategies with given root id

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"StrategyResponse":{"properties":{"strategyId":{"type":"string"},"version":{"type":"integer","format":"int32"},"engineVer":{"type":"integer","format":"int32"},"eventTime":{"type":"string","format":"date-time"},"state":{"type":"object","additionalProperties":{"type":"string"}},"uiParams":{"type":"object","additionalProperties":{"type":"object"}},"uiData":{"type":"string"}}},"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategies/find/root/{rootId}":{"get":{"tags":["strategy-read-controller"],"summary":"Returns all strategies with given root id","operationId":"findStrategyFamily","parameters":[{"name":"rootId","in":"path","required":true,"schema":{"type":"string"}},{"name":"createdByUserId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StrategyResponse"}}}}},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Unprocessable Entity","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```


# Strategy Type Controller

## GET /strategyParameters

> Get all strategy types' parameters

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"servers":[{"url":"/strategy-orchestrator"}],"security":[{"User token":[]}],"components":{"securitySchemes":{"User token":{"type":"http","scheme":"Bearer","bearerFormat":"JWT"}},"schemas":{"StrategyType":{"properties":{"strategyType":{"type":"string"},"params":{"type":"array","items":{"$ref":"#/components/schemas/StrategyParameter"}}}},"StrategyParameter":{"properties":{"mandatory":{"type":"boolean"},"name":{"type":"string"},"dataType":{"type":"string","enum":["STRING","DECIMAL","LONG","FLAG","DATE","TIME","DATETIME","COMPONENT"]},"mutability":{"type":"string","enum":["INIT","NOT_RUNNING","ALWAYS"]},"defaultValue":{"type":"string"}}},"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}},"paths":{"/strategyParameters":{"get":{"tags":["strategy-type-controller"],"summary":"Get all strategy types' parameters","operationId":"strategyParameters","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StrategyType"}}}}},"400":{"description":"Bad Request","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"Unprocessable Entity","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Internal Server Error","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```


# Models

## The priceLimit object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0}}}}
```

## The orderMaxSize object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"orderMaxSize":{"type":"number","description":"Max size sent in an order at once. (Iceberg)","minimum":0}}}}
```

## The size object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"size":{"type":"number","description":"Total size to buy/sell.","minimum":0}}}}
```

## The alwaysPassive object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"}}}}
```

## The ignoreWarnings object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The triggerPrice object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"triggerPrice":{"type":"number","description":"When that price is crossed then execution of strategy is triggered. Must be greater or equal to product min price"}}}}
```

## The ApiError object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ApiError":{"properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"integer","format":"int32"},"path":{"type":"string"},"errorCode":{"type":"string"},"error":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorWithFields"},"uniqueItems":true}}},"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}}}
```

## The ErrorWithFields object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ErrorWithFields":{"properties":{"fields":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true},"rejectedValue":{"type":"string"},"description":{"type":"string","minLength":1},"firstField":{"type":"string"}},"required":["description","fields"]}}}}
```

## The ScheduleOpeningPause object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ScheduleOpeningPause":{"properties":{"fromTime":{"type":"string","format":"date-time"},"toTime":{"type":"string","format":"date-time"}},"required":["fromTime","toTime"]}}}}
```

## The FlushPosition object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"FlushPosition":{"properties":{"longPositionTargetPercentage":{"type":"number"},"shortPositionTargetPercentage":{"type":"number"}},"required":["longPositionTargetPercentage","shortPositionTargetPercentage"]}}}}
```

## The AdditionalInfo object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"AdditionalInfo":{"properties":{"tradeId":{"type":"string","minLength":1},"hedgeMarketPrice":{"type":"number"},"quoteCurrencyRate":{"type":"number"}},"required":["hedgeMarketPrice","quoteCurrencyRate","tradeId"]}}}}
```

## The Bait object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"Bait":{"properties":{"productCode":{"type":"string"},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"type":"number"},"value":{"type":"number"}},"required":["productCode","side","size","value"]}}}}
```

## The SubmitTransaction object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"SubmitTransaction":{"properties":{"bait":{"$ref":"#/components/schemas/Bait"},"quoteCurrency":{"type":"string"},"additionalInfo":{"$ref":"#/components/schemas/AdditionalInfo"}},"required":["additionalInfo","bait","quoteCurrency"]},"Bait":{"properties":{"productCode":{"type":"string"},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"type":"number"},"value":{"type":"number"}},"required":["productCode","side","size","value"]},"AdditionalInfo":{"properties":{"tradeId":{"type":"string","minLength":1},"hedgeMarketPrice":{"type":"number"},"quoteCurrencyRate":{"type":"number"}},"required":["hedgeMarketPrice","quoteCurrencyRate","tradeId"]}}}}
```

## The AllocationQuery object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"AllocationQuery":{"properties":{"exchangeProducts":{"type":"array","items":{"$ref":"#/components/schemas/ExchangeProduct"},"minItems":1},"side":{"type":"string","enum":["BUY","SELL"]},"feeOffsets":{"type":"array","items":{"$ref":"#/components/schemas/FeeOffset"}},"size":{"type":"number"},"stopLossPrice":{"type":"number"},"estimationMode":{"type":"string","enum":["ORDERBOOK","VOLUME15M"]}},"required":["exchangeProducts","side","size"]},"ExchangeProduct":{"properties":{"exchangeCode":{"type":"string"},"productCode":{"type":"string"}}},"FeeOffset":{"properties":{"exchangeCode":{"type":"string"},"offset":{"type":"number"}}}}}}
```

## The ExchangeProduct object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ExchangeProduct":{"properties":{"exchangeCode":{"type":"string"},"productCode":{"type":"string"}}}}}}
```

## The FeeOffset object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"FeeOffset":{"properties":{"exchangeCode":{"type":"string"},"offset":{"type":"number"}}}}}}
```

## The EstimatedExecution object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"EstimatedExecution":{"properties":{"accountId":{"type":"string"},"exchangeCode":{"type":"string"},"size":{"type":"number"},"avgPrice":{"type":"number"},"bestOffer":{"type":"number"}}}}}}
```

## The StrategyResponse object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"StrategyResponse":{"properties":{"strategyId":{"type":"string"},"version":{"type":"integer","format":"int32"},"engineVer":{"type":"integer","format":"int32"},"eventTime":{"type":"string","format":"date-time"},"state":{"type":"object","additionalProperties":{"type":"string"}},"uiParams":{"type":"object","additionalProperties":{"type":"object"}},"uiData":{"type":"string"}}}}}}
```

## The CreateAiRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateAiRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"aiModelVariant":{"type":"string","description":"Defines which type and variant of AI model should be used.\nVFM6 - Volven Flagship Model ver. 6\nVFM7 - Volven Flagship Model ver. 7\nVFM8 - Volven Flagship Model ver. 8","enum":["VFM6","VFM7","VFM8"]},"aiModelPositionMode":{"type":"string","description":"LONG - model will give long recommendations only (base currency allocation will always stay above or equal to 0)\nSHORT - model will give short recommendations only (base currency allocation will always stay below or equal to 0)\nCOMBINED - model will give both long and short recommendations (base currency allocation can be both positive or negative)","enum":["LONG","SHORT","COMBINED"],"pattern":"LONG|SHORT|COMBINED"},"executionType":{"type":"string","description":"Defines how rebalancing will be executed.\nSMO - Smart Order\nSMO_PL - Smart Order with calculated Price Limit\nSMO_MPL - Smart Order with Price Limit from AI Model\nSMO_FDPL - Smart Order with Futures Dynamic Price Limit (available for futures products only)\nSO_VMO - Strategy Order without Price Limit (Volven Market Order)\nSO_PL - Strategy Order with calculated Price Limit","enum":["SMO","SMO_PL","SMO_MPL","SMO_FDPL","SO_VMO","SO_PL"],"pattern":"SMO|SMO_PL|SMO_MPL|SMO_FDPL|SO_VMO|SO_PL"},"useInitialModelPrice":{"type":"boolean","description":"Whether to use initial AI model execution price instead of last received price."},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"initialBaseCurrencySize":{"type":"number","description":"Initial allocation of base currency that will be used by the strategy for trading","minimum":0},"initialQuoteCurrencyAmount":{"type":"number","description":"Initial allocation of quote currency that will be used by the strategy for trading","minimum":0},"desiredNetProfitPercentage":{"type":"number","description":"When net profit percentage goes above this value then strategy is stopped and position is closed.","maximum":1,"minimum":0.01},"useSpikeProtection":{"type":"boolean"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","initialBaseCurrencySize","initialQuoteCurrencyAmount","productCode","strategyType"]},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateAloRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateAloRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"executionType":{"type":"string","pattern":"SO|SMO|SC"},"maxActiveTime":{"type":"integer","format":"int32"},"runSmoIfNotFilled":{"type":"boolean"},"aggressiveness":{"type":"number","default":0},"orderMaxSize":{"type":"number"},"takeProfitExecutionType":{"type":"string","pattern":"SO|SMO"},"takeProfitPriceLimit":{"$ref":"#/components/schemas/priceLimit"},"takeProfitAggressiveness":{"type":"number","default":0.5},"takeProfitOrderMaxSize":{"type":"number"},"stopLossExecutionType":{"type":"string","pattern":"SO|SMO"},"stopLossTrigger":{"type":"number","minimum":0},"stopLossPriceLimit":{"$ref":"#/components/schemas/priceLimit"},"stopLossAggressiveness":{"type":"number","default":1},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"reduceOnlyEnabled":{"type":"boolean"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType"]},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The BcExecutor object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"BcExecutor":{"discriminator":{"propertyName":"strategyType"},"properties":{"strategyType":{"type":"string"}},"required":["strategyType"]}}}}
```

## The BcExecutorSc object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"BcExecutorSc":{"allOf":[{"$ref":"#/components/schemas/BcExecutor"},{"type":"object","properties":{"strategyType":{"type":"string"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"maxActiveTime":{"type":"integer","format":"int32","maximum":900,"minimum":30}}}]},"BcExecutor":{"discriminator":{"propertyName":"strategyType"},"properties":{"strategyType":{"type":"string"}},"required":["strategyType"]},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"}}}}
```

## The BcExecutorSmo object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"BcExecutorSmo":{"allOf":[{"$ref":"#/components/schemas/BcExecutor"},{"type":"object","properties":{"strategyType":{"type":"string"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"}}}]},"BcExecutor":{"discriminator":{"propertyName":"strategyType"},"properties":{"strategyType":{"type":"string"}},"required":["strategyType"]},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"orderMaxSize":{"type":"number","description":"Max size sent in an order at once. (Iceberg)","minimum":0}}}}
```

## The BcExecutorTwap object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"BcExecutorTwap":{"allOf":[{"$ref":"#/components/schemas/BcExecutor"},{"type":"object","properties":{"strategyType":{"type":"string"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"maxActiveTime":{"type":"integer","format":"int32","maximum":86400,"minimum":600}}}]},"BcExecutor":{"discriminator":{"propertyName":"strategyType"},"properties":{"strategyType":{"type":"string"}},"required":["strategyType"]},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"}}}}
```

## The CreateBcRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateBcRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"inputs":{"type":"array","items":{"$ref":"#/components/schemas/Input"}},"accountIds":{"type":"array","deprecated":true,"items":{"type":"string","deprecated":true}},"inputCurrencies":{"type":"array","deprecated":true,"items":{"type":"string","deprecated":true}},"inputSizes":{"type":"array","deprecated":true,"items":{"type":"number","deprecated":true}},"outputCurrency":{"type":"string","minLength":1},"includeFiat":{"type":"boolean"},"ignoreImpossibleConversions":{"type":"boolean"},"executor":{"oneOf":[{"$ref":"#/components/schemas/BcExecutorSc"},{"$ref":"#/components/schemas/BcExecutorSmo"},{"$ref":"#/components/schemas/BcExecutorTwap"}]},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["outputCurrency","strategyType"]},"Input":{"properties":{"accountIds":{"type":"array","items":{"type":"string"}},"sourceCurrency":{"type":"string"},"sourceSize":{"type":"number"},"targetCurrency":{"type":"string"},"targetSize":{"type":"number"},"productType":{"type":"string","enum":["SPOT","FUTURES","CFD","SPOT_MARGIN_ISOLATED","SPOT_MARGIN_CROSS"]}},"required":["accountIds","productType","sourceCurrency","targetCurrency"]},"BcExecutorSc":{"allOf":[{"$ref":"#/components/schemas/BcExecutor"},{"type":"object","properties":{"strategyType":{"type":"string"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"maxActiveTime":{"type":"integer","format":"int32","maximum":900,"minimum":30}}}]},"BcExecutor":{"discriminator":{"propertyName":"strategyType"},"properties":{"strategyType":{"type":"string"}},"required":["strategyType"]},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"BcExecutorSmo":{"allOf":[{"$ref":"#/components/schemas/BcExecutor"},{"type":"object","properties":{"strategyType":{"type":"string"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"}}}]},"orderMaxSize":{"type":"number","description":"Max size sent in an order at once. (Iceberg)","minimum":0},"BcExecutorTwap":{"allOf":[{"$ref":"#/components/schemas/BcExecutor"},{"type":"object","properties":{"strategyType":{"type":"string"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"maxActiveTime":{"type":"integer","format":"int32","maximum":86400,"minimum":600}}}]},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The Input object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"Input":{"properties":{"accountIds":{"type":"array","items":{"type":"string"}},"sourceCurrency":{"type":"string"},"sourceSize":{"type":"number"},"targetCurrency":{"type":"string"},"targetSize":{"type":"number"},"productType":{"type":"string","enum":["SPOT","FUTURES","CFD","SPOT_MARGIN_ISOLATED","SPOT_MARGIN_CROSS"]}},"required":["accountIds","productType","sourceCurrency","targetCurrency"]}}}}
```

## The CreateBullRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateBullRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"maxPositionSize":{"type":"number","description":"Passed to every TARB child as max_position_size parameter."},"tempo":{"type":"string","description":"Defines how hourlyVolume should be calculated based on maxPositionSize","minLength":1,"pattern":"LOW|MEDIUM|HIGH"},"useAllowedPositionSize":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"acceptableNetLossPercentage":{"type":"number","maximum":1,"minimum":0.01},"acceptableDrawdownPercentage":{"type":"number","maximum":1,"minimum":0.01},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","maxPositionSize","productCode","strategyType","tempo"]},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateBearRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateBearRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"maxPositionSize":{"type":"number","description":"Passed to every TARB child as max_position_size parameter."},"tempo":{"type":"string","description":"Defines how hourlyVolume should be calculated based on maxPositionSize","minLength":1,"pattern":"LOW|MEDIUM|HIGH"},"useAllowedPositionSize":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"acceptableNetLossPercentage":{"type":"number","maximum":1,"minimum":0.01},"acceptableDrawdownPercentage":{"type":"number","maximum":1,"minimum":0.01},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","maxPositionSize","productCode","strategyType","tempo"]},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateBoRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateBoRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"inputs":{"type":"array","items":{"$ref":"#/components/schemas/Input"}},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["strategyType"]},"Input":{"properties":{"accountIds":{"type":"array","items":{"type":"string"}},"sourceCurrency":{"type":"string"},"sourceSize":{"type":"number"},"targetCurrency":{"type":"string"},"targetSize":{"type":"number"},"productType":{"type":"string","enum":["SPOT","FUTURES","CFD","SPOT_MARGIN_ISOLATED","SPOT_MARGIN_CROSS"]}},"required":["accountIds","productType","sourceCurrency","targetCurrency"]},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateCoRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateCoRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"size":{"$ref":"#/components/schemas/size"},"positionMode":{"type":"string","description":"Defines in which direction positions should be opened.\nLONG - long positions only (open with BUY, close with SELL)\nSHORT - short positions only (open with SELL, close with BUY)\nCOMBINED - both long and short positions","enum":["LONG","SHORT","COMBINED"],"pattern":"LONG|SHORT|COMBINED"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","size","strategyType"]},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateCrabRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateCrabRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"stdDevWindow":{"type":"number","default":1012,"description":"Size of moving window (in seconds) used to calculate standard deviation of market price."},"stdDevPercThreshold":{"type":"number","default":0.002,"description":"If relative standard deviation of market price is lower than this value then sideways trend is activated."},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType"]},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateDmmRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateDmmRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"hourlyVolume":{"type":"number","description":"Total hourly volume. Half of this value is passed to every TARB child as hourly_volume parameter."},"maxPositionSize":{"type":"number","description":"Passed to every TARB child as max_position_size parameter."},"deviationWindow":{"type":"integer","format":"int32","default":2100,"description":"Size of moving window (in seconds) used to calculate price and volume deviation.","maximum":7200,"minimum":900},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","hourlyVolume","maxPositionSize","productCode","strategyType"]},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateOtcqRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateOtcqRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"exchangeAccountProducts":{"type":"array","items":{"$ref":"#/components/schemas/ExchangeAccountProduct"}},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"slippage":{"type":"number","default":0},"stopLossTrigger":{"type":"number"},"stopLossVolumeMode":{"type":"string","default":"OFF","pattern":"OFF|ABSOLUTE|DYNAMIC"},"stopLossVolumeDepth":{"type":"number"},"profitMargin":{"type":"number"},"aggressiveness":{"type":"number"},"estimatedExecution":{"type":"array","items":{"$ref":"#/components/schemas/EstimatedExecution"},"minItems":1},"priceOffsets":{"type":"array","deprecated":true,"items":{"$ref":"#/components/schemas/FeeOffset"}},"feeOffsets":{"type":"array","items":{"$ref":"#/components/schemas/FeeOffset"}},"estimationMode":{"type":"string","default":"VOLUME15M","pattern":"ORDERBOOK|VOLUME15M"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["estimatedExecution","side","size","strategyType"]},"ExchangeAccountProduct":{"properties":{"exchangeCode":{"type":"string"},"accountId":{"type":"string"},"productCode":{"type":"string"}}},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"orderMaxSize":{"type":"number","description":"Max size sent in an order at once. (Iceberg)","minimum":0},"EstimatedExecution":{"properties":{"accountId":{"type":"string"},"exchangeCode":{"type":"string"},"size":{"type":"number"},"avgPrice":{"type":"number"},"bestOffer":{"type":"number"}}},"FeeOffset":{"properties":{"exchangeCode":{"type":"string"},"offset":{"type":"number"}}},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The ExchangeAccountProduct object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ExchangeAccountProduct":{"properties":{"exchangeCode":{"type":"string"},"accountId":{"type":"string"},"productCode":{"type":"string"}}}}}}
```

## The CreateScRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateScRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"maxActiveTime":{"type":"integer","format":"int32","maximum":900,"minimum":30},"reduceOnlyEnabled":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType"]},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateSmmRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateSmmRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"lossPercent":{"type":"number","description":"SL in % used in Predicted Order (PO) strategy (current loss is calculated for BUY side as 'ask-hedge/ask' and for SELL side as 'hedge-bid/hedge')","maximum":0.25,"minimum":0},"maxDoublingLevels":{"type":"integer","format":"int32","default":4,"description":"Max number of doubling levels (when reached, no more baits will be sent)","maximum":6,"minimum":0},"hedgeLifeSec":{"type":"integer","format":"int32","default":60,"description":"After how many seconds hedge order should be canceled","maximum":300,"minimum":0},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType"]},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0},"orderMaxSize":{"type":"number","description":"Max size sent in an order at once. (Iceberg)","minimum":0},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateSmoRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateSmoRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"useSpikeProtection":{"type":"boolean"},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"reduceOnlyEnabled":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType"]},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"orderMaxSize":{"type":"number","description":"Max size sent in an order at once. (Iceberg)","minimum":0},"triggerPrice":{"type":"number","description":"When that price is crossed then execution of strategy is triggered. Must be greater or equal to product min price"},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateEtfRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateEtfRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"exchangeAccountProducts":{"type":"array","items":{"$ref":"#/components/schemas/ExchangeAccountProduct"}},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"maxRunningTime":{"type":"integer","format":"int32","maximum":86400,"minimum":600},"numberOfSlices":{"type":"integer","format":"int32","maximum":100,"minimum":3},"sliceExecutionTime":{"type":"integer","format":"int32","minimum":1},"aggressivenessBoostStartOffset":{"type":"integer","format":"int32","deprecated":true},"aggressivenessBoostEndOffset":{"type":"integer","format":"int32","deprecated":true},"initialAggressivenessBoostSeconds":{"type":"integer","format":"int32"},"closingAggressivenessBoostSeconds":{"type":"integer","format":"int32"},"reallocationInterval":{"type":"integer","format":"int32","minimum":1},"slippage":{"type":"number","maximum":0.1,"minimum":0},"priceOffsets":{"type":"array","deprecated":true,"items":{"$ref":"#/components/schemas/FeeOffset"}},"feeOffsets":{"type":"array","items":{"$ref":"#/components/schemas/FeeOffset"}},"volumePercentageAtRisk":{"type":"number","maximum":0.5,"minimum":0},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"useFeeOffsetsCalculation":{"type":"boolean"},"estimationMode":{"type":"string","default":"VOLUME15M","pattern":"ORDERBOOK|VOLUME15M"},"triggerAt":{"type":"string","format":"date-time"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["maxRunningTime","numberOfSlices","side","size","sliceExecutionTime","strategyType"]},"ExchangeAccountProduct":{"properties":{"exchangeCode":{"type":"string"},"accountId":{"type":"string"},"productCode":{"type":"string"}}},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"orderMaxSize":{"type":"number","description":"Max size sent in an order at once. (Iceberg)","minimum":0},"FeeOffset":{"properties":{"exchangeCode":{"type":"string"},"offset":{"type":"number"}}},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateSoRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateSoRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","priceLimit","productCode","side","size","strategyType"]},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateTarbRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateTarbRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"takeProfitPricePercentage":{"type":"number","description":"Take Profit TWAP’s price_limit param will be updated every time Opening TWAP’s average_price changes. It will be set to average_price * (100% +/- take_profit_price_percentage).","maximum":1,"minimum":0},"stopLossPricePercentage":{"type":"number","description":"Stop Loss TWAP’s price_limit param will be updated every time Opening TWAP’s average_price changes. It will be set to average_price * (100% +/- take_profit_price_percentage).","maximum":1,"minimum":0},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"triggerTime":{"type":"integer","format":"int32","description":"Time after which strategy will start trading","minimum":0},"twapMaxActiveTime":{"type":"integer","format":"int32","maximum":8640000,"minimum":600},"happyLevelLimitOpening":{"type":"number"},"happyLevelLimitTp":{"type":"number"},"reduceOnlyEnabled":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType","takeProfitPricePercentage"]},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"triggerPrice":{"type":"number","description":"When that price is crossed then execution of strategy is triggered. Must be greater or equal to product min price"},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateTmmRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateTmmRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"reduceOnlyEnabled":{"type":"boolean"},"hourlyVolume":{"type":"number","description":"Total hourly volume. Half of this value is passed to every TARB child as hourly_volume parameter."},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"maxPositionSize":{"type":"number","description":"Passed to every TARB child as max_position_size parameter."},"happyLevelPositionPercentage":{"type":"number","maximum":1,"minimum":0},"takeProfitPricePercentage":{"type":"number","maximum":1,"minimum":0},"volumePercentageAtRisk":{"type":"number","maximum":1,"minimum":0.01},"usePositionRebalancing":{"type":"boolean"},"positionNetting":{"type":"number","deprecated":true,"maximum":1,"minimum":0},"longPositionRebalancingThreshold":{"type":"number","maximum":1,"minimum":0},"shortPositionRebalancingThreshold":{"type":"number","maximum":1,"minimum":0},"lowVolatilityMode":{"type":"string","default":"NONE","description":"Defines which child strategy type should be active during low volatility market.","pattern":"NONE|TARB|CRAB"},"lowVolatilityThreshold":{"type":"string","pattern":"LOW|MEDIUM|HIGH"},"stdDevPercThreshold":{"type":"number"},"deviationWindow":{"type":"integer","format":"int32","default":2100,"description":"Size of moving window (in seconds) used to calculate price and volume deviation.","maximum":7200,"minimum":900},"useTargetVolumeFromParent":{"type":"boolean"},"acceptableNetLossPercentage":{"type":"number","maximum":1,"minimum":0.01},"acceptableDrawdownPercentage":{"type":"number","maximum":1,"minimum":0.01},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","hourlyVolume","maxPositionSize","productCode","strategyType"]},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateTwapRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateTwapRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"$ref":"#/components/schemas/size"},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"happyLevelLimit":{"type":"number"},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"triggerTime":{"type":"integer","format":"int32","description":"Time when strategy will be started, up 4 hours","minimum":0},"maxActiveTime":{"type":"integer","format":"int32","maximum":8640000,"minimum":600},"reduceOnlyEnabled":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","productCode","side","size","strategyType"]},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"triggerPrice":{"type":"number","description":"When that price is crossed then execution of strategy is triggered. Must be greater or equal to product min price"},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateAlsRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateAlsRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountId":{"type":"string","minLength":1},"positionMode":{"type":"string","enum":["LONG","SHORT","COMBINED"]},"maxPositionSize":{"type":"number"},"aggressiveness":{"type":"number","default":0},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountId","maxPositionSize","positionMode","productCode","strategyType"]},"orderMaxSize":{"type":"number","description":"Max size sent in an order at once. (Iceberg)","minimum":0},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The CreateAhRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateAhRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"cryptoAccountId":{"type":"string","minLength":1},"forexAccountId":{"type":"string"},"baits":{"type":"array","items":{"$ref":"#/components/schemas/Bait"}},"quoteCurrency":{"type":"string"},"runMode":{"type":"string","enum":["INSTANT","BACKGROUND"]},"maxProductImbalances":{"type":"array","items":{"$ref":"#/components/schemas/MaxProductImbalance"}},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"aggressiveness":{"type":"number"},"orderMaxValue":{"type":"number"},"maxOrderLifetime":{"type":"integer","format":"int32"},"fairPriceMargin":{"type":"number"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["cryptoAccountId","strategyType"]},"Bait":{"properties":{"productCode":{"type":"string"},"side":{"type":"string","enum":["BUY","SELL"]},"size":{"type":"number"},"value":{"type":"number"}},"required":["productCode","side","size","value"]},"MaxProductImbalance":{"properties":{"productCode":{"type":"string"},"maxImbalance":{"type":"number"}},"required":["maxImbalance","productCode"]},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The MaxProductImbalance object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"MaxProductImbalance":{"properties":{"productCode":{"type":"string"},"maxImbalance":{"type":"number"}},"required":["maxImbalance","productCode"]}}}}
```

## The AccountSize object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"AccountSize":{"properties":{"accountId":{"type":"string","minLength":1},"size":{"$ref":"#/components/schemas/size"}},"required":["accountId","size"]},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0}}}}
```

## The CreateCtRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"CreateCtRequest":{"properties":{"strategyId":{"type":"string"},"strategyType":{"type":"string","minLength":1},"productCode":{"type":"string","minLength":1},"accountSizes":{"type":"array","items":{"$ref":"#/components/schemas/AccountSize"},"minItems":1},"side":{"type":"string","enum":["BUY","SELL"]},"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"aggressiveness":{"type":"number","description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side."},"useSpikeProtection":{"type":"boolean"},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"reduceOnlyEnabled":{"type":"boolean"},"alwaysPassive":{"$ref":"#/components/schemas/alwaysPassive"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"},"autoRun":{"type":"boolean"}},"required":["accountSizes","productCode","side","strategyType"]},"AccountSize":{"properties":{"accountId":{"type":"string","minLength":1},"size":{"$ref":"#/components/schemas/size"}},"required":["accountId","size"]},"size":{"type":"number","description":"Total size to buy/sell.","minimum":0},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"orderMaxSize":{"type":"number","description":"Max size sent in an order at once. (Iceberg)","minimum":0},"triggerPrice":{"type":"number","description":"When that price is crossed then execution of strategy is triggered. Must be greater or equal to product min price"},"alwaysPassive":{"type":"boolean","description":"Whether to set “post only” flag on each order.\nIf the order was rejected by the Exchange then it will be resent with a backoff policy:\n- initial backoff period = 1s\n- backoff period is doubled after each order rejection\n- strategy will be paused after 9 failed attempts"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The StrategyResult object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"StrategyResult":{"properties":{"strategyId":{"type":"string"}}}}}}
```

## The ModifySoRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ModifySoRequest":{"properties":{"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The ModifySmoRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ModifySmoRequest":{"properties":{"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"aggressiveness":{"type":"number","default":0,"description":"Used for calculating the price at which orders are being placed. Calculated price = bid + aggressiveness * avg_spread for BUY side or ask - aggressiveness * avg_spread for SELL side.","maximum":1,"minimum":-100},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"orderMaxSize":{"type":"number","description":"Max size sent in an order at once. (Iceberg)","minimum":0},"triggerPrice":{"type":"number","description":"When that price is crossed then execution of strategy is triggered. Must be greater or equal to product min price"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The ModifyScRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ModifyScRequest":{"properties":{"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The ModifyTwapRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ModifyTwapRequest":{"properties":{"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"happyLevelLimit":{"type":"number"},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"triggerPrice":{"type":"number","description":"When that price is crossed then execution of strategy is triggered. Must be greater or equal to product min price"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The ModifyTarbRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ModifyTarbRequest":{"properties":{"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"happyLevelLimitOpening":{"type":"number"},"happyLevelLimitTp":{"type":"number"},"triggerPrice":{"$ref":"#/components/schemas/triggerPrice"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"triggerPrice":{"type":"number","description":"When that price is crossed then execution of strategy is triggered. Must be greater or equal to product min price"},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The ModifyAloRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ModifyAloRequest":{"properties":{"priceLimit":{"$ref":"#/components/schemas/priceLimit"},"aggressiveness":{"type":"number"},"orderMaxSize":{"type":"number"},"takeProfitPriceLimit":{"$ref":"#/components/schemas/priceLimit"},"takeProfitAggressiveness":{"type":"number"},"takeProfitOrderMaxSize":{"type":"number"},"stopLossPriceLimit":{"$ref":"#/components/schemas/priceLimit"},"stopLossTrigger":{"$ref":"#/components/schemas/priceLimit"},"stopLossAggressiveness":{"type":"number"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"priceLimit":{"type":"number","description":"Maximum (for buy side) / minimum (for sell side) price threshold used for every order.","minimum":0},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The ModifyTmmRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ModifyTmmRequest":{"properties":{"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The ModifyDmmRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ModifyDmmRequest":{"properties":{"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The ModifySmmRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ModifySmmRequest":{"properties":{"size":{"type":"number"},"orderMaxSize":{"$ref":"#/components/schemas/orderMaxSize"},"lossPercent":{"type":"number"},"maxDoublingLevels":{"type":"integer","format":"int32"},"hedgeLifeSec":{"type":"integer","format":"int32"},"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"orderMaxSize":{"type":"number","description":"Max size sent in an order at once. (Iceberg)","minimum":0},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The ModifyCrabRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ModifyCrabRequest":{"properties":{"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The ModifyBullRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ModifyBullRequest":{"properties":{"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The ModifyBearRequest object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"ModifyBearRequest":{"properties":{"ignoreWarnings":{"$ref":"#/components/schemas/ignoreWarnings"}}},"ignoreWarnings":{"type":"boolean","description":"If true, action will be performed regardless warnings."}}}}
```

## The StrategyParameter object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"StrategyParameter":{"properties":{"mandatory":{"type":"boolean"},"name":{"type":"string"},"dataType":{"type":"string","enum":["STRING","DECIMAL","LONG","FLAG","DATE","TIME","DATETIME","COMPONENT"]},"mutability":{"type":"string","enum":["INIT","NOT_RUNNING","ALWAYS"]},"defaultValue":{"type":"string"}}}}}}
```

## The StrategyType object

```json
{"openapi":"3.1.0","info":{"title":"Strategy Orchestrator API","version":"0.0.1"},"components":{"schemas":{"StrategyType":{"properties":{"strategyType":{"type":"string"},"params":{"type":"array","items":{"$ref":"#/components/schemas/StrategyParameter"}}}},"StrategyParameter":{"properties":{"mandatory":{"type":"boolean"},"name":{"type":"string"},"dataType":{"type":"string","enum":["STRING","DECIMAL","LONG","FLAG","DATE","TIME","DATETIME","COMPONENT"]},"mutability":{"type":"string","enum":["INIT","NOT_RUNNING","ALWAYS"]},"defaultValue":{"type":"string"}}}}}}
```


# TÝR Markets API


# Authentication

Every API endpoint that starts with `/volven-broker/api/` requires API key authentication.\
Every API endpoint that starts with `/volven-broker/public/` doesn't require any authentication.

#### API Key Authentication

Every request requires following authentication related HTTP headers:

* `X-API-Key`
* `X-API-Timestamp`
* `X-API-Signature`

Some requests require following business related HTTP headers:

* `X-API-User-ID`

{% hint style="danger" %}
Never share your API secret with anyone, even with TÝR Markets employees. Use it internally to sign your request. Make sure to store it securely. Stolen API secret may lead to lost funds.
{% endhint %}

#### X-API-User-ID

Some endpoints require `X-API-User-ID` header to identify the user for whom the action is executed. It can be any user that has been registered via your partner account (if you want to perform the action in the name of one of your users) or can be your partner account (if you want to perform the action as yourself). Check OpenAPI documentation for details.

{% hint style="warning" %}
If user ID is incorrect then `400 Bad Request` will be returned.

If user was not registered via you then `403 Forbidden` will be returned.
{% endhint %}

#### X-API-Key

`X-API-Key` is simply your API Key (example: `0408ad13-cd74-4e99-8fe5-9fd2badd42ec`).

{% hint style="warning" %}
If `X-API-Key` is missing or invalid then `401 Unauthorized` will be returned
{% endhint %}

#### X-API-Timestamp

`X-API-Timestamp` must be actual timestamp in Unix epoch format with millisecond precision (example: `1760721374734`). When the server receives the message it verifies if current time is same as `X-API-Timestamp` value with 5000 ms tolerance.

{% hint style="warning" %}
If `X-API-Timestamp` is missing or time drift is bigger than 5000 ms then `401 Unauthorized` will be returned
{% endhint %}

#### X-API-Signature

`X-API-Signature` is calculated in following way:

1. Prepare canonical request:  timestamp + method + path (with query string, if any) + user ID (if any) + body
2. Sign canonical request with you API Secret using HMAC SHA256 algorithm
3. Encode the signature in Base64 format.

Example:

Assume you request looks like this:

```http
POST /volven-broker/api/orders
X-API-User-ID: 789
{"orderType": "MARKET", "quoteId": "d285d287-5ab6-453b-99ed-ca1765b4231a", "side": "BUY"}
```

Canonical request would look like this:

```
1760721374734POST/volven-broker/api/orders789{"orderType": "MARKET", "quoteId": "d285d287-5ab6-453b-99ed-ca1765b4231a", "side": "BUY"}
```

Final signature would look like this:

```
wUCAlLkxQrOhOi95eheYmcL9mdHjinWvO4vTyDN+Uko=
```

{% hint style="warning" %}
If signature doesn't match then `401 Unauthorized` will be returned
{% endhint %}

#### Final request

Finally, correctly authenticated request will look like this:

```http
POST /volven-broker/api/orders
X-API-User-ID: 789
X-API-Key: 0408ad13-cd74-4e99-8fe5-9fd2badd42ec
X-API-Timestamp: 1760721374734
X-API-Signature: wUCAlLkxQrOhOi95eheYmcL9mdHjinWvO4vTyDN+Uko=
{"orderType": "MARKET", "quoteId": "d285d287-5ab6-453b-99ed-ca1765b4231a", "side": "BUY"}
```

This ensures that the server can verify the authenticity of the request by comparing the received signature with its own calculation. By using these elements — `X-API-Key`, `X-API-Timestamp`, and `X-API-Signature` — your API requests will be secure from replay attacks while maintaining data integrity.

#### Postman authentication script

If you want to quickly test the API before implementing authentication you may use following pre-request script in Postman (make sure to define `API_KEY` , `API_SECRET` and `API_USER_ID` environment variables):

```javascript
(async () => {
    const apiKey = pm.environment.get("API_KEY");
    const secretBase64 = pm.environment.get("API_SECRET"); // Base64-encoded secret key
    const apiUserId = pm.environment.get("API_USER_ID");

    if (!apiKey || !secretBase64) {
        console.error("Missing api_key or api_secret in environment");
        return;
    }

    // Unix timestamp in milliseconds
    const timestamp = Date.now();

    // Construct canonical string
    const method = pm.request.method.toUpperCase();
    const pathWithQuery = pm.request.url.getPathWithQuery();
    const userId = apiUserId ?? "";
    const rawBody = pm.request.body?.raw ?? "";
    const body = pm.variables.replaceIn(rawBody);
    const canonicalRequest = timestamp + method + pathWithQuery + userId + body;

    // Base64 <-> ArrayBuffer helpers
    const base64ToArrayBuffer = (base64) => {
        const binary = atob(base64);
        const len = binary.length;
        const bytes = new Uint8Array(len);
        for (let i = 0; i < len; i++) bytes[i] = binary.charCodeAt(i);
        return bytes.buffer;
    };
    const arrayBufferToBase64 = (buffer) => {
        let binary = "";
        const bytes = new Uint8Array(buffer);
        for (let i = 0; i < bytes.byteLength; i++) {
            binary += String.fromCharCode(bytes[i]);
        }
        return btoa(binary);
    };

    // Generate HMAC-SHA256 signature
    const keyBuffer = base64ToArrayBuffer(secretBase64);
    const cryptoKey = await crypto.subtle.importKey(
        "raw",
        keyBuffer,
        { name: "HMAC", hash: "SHA-256" },
        false,
        ["sign"]
    );
    const sigBuffer = await crypto.subtle.sign("HMAC", cryptoKey, new TextEncoder().encode(canonicalRequest));
    const signatureBase64 = arrayBufferToBase64(sigBuffer);

    // Set authentication headers
    pm.request.headers.upsert({ key: "X-API-Key", value: apiKey });
    pm.request.headers.upsert({ key: "X-API-Timestamp", value: timestamp.toString() });
    pm.request.headers.upsert({ key: "X-API-Signature", value: signatureBase64 });
    pm.request.headers.upsert({ key: "X-API-User-ID", value: apiUserId });

    console.log("Canonical:", canonicalRequest);
    console.log("Signature:", signatureBase64);
    console.log("Timestamp:", timestamp);
})();
```


# Quotes feed

In order to subscribe to quotes feed a connection to following WebSocket endpoint must be established:

```
/volven-broker/public/quotes?userId={userId}
```

Optional `userId` query parameter is needed only when you want to get trading quotes and use them to send market order, otherwise you will get so called anonymous trading quotes that do not have ID and cannot be used for trading.

After establishing connection you can subscribe to one of three types of quotes:

* `BASIC`: just a single price (mid-spread), used for presentation purposes only (it is not a price offered for trading)
* `TRADING`: Two quotes (buy and sell) will be offered with very short validity (few seconds). These are the quotes that once accepted by the user can be traded on using market order.
* `FULL`: Full order book, can be used to check available liquidity distribution.

In order to subscribe one of following messages should be sent over the WebSocket:

1. For basic quotes:

```json
{
    "quoteType": "BASIC",
    "productCode": "btcnok"
}
```

2. For trading quotes:

```json
{
    "quoteType": "TRADING",
    "productCode": "btcnok",
    "inputSize": null,
    "inputValue": "1000"
}
```

`inputSize` is a trade size (in base currency).\
`inputValue` is a trade value (in quote currency).\
Note that exactly one of `inputSize` and `inputValue` must be provided.\
In above example clients wants to get quotes for buying or selling 1000 NOK worth of Bitcoin.

3. For full quotes:

```json
{
    "quoteType": "FULL",
    "productCode": "btcnok"
}
```

Available product codes for TÝR Markets can be obtained by calling product metadata endpoint with `VB` exchange code parameter:

```
GET /mms/v2/productDetails?exchangeCode=VB
```

{% hint style="info" %}
Passing `null` as product code will subscribe to all available products.
{% endhint %}

After successful subscription you will receive subscription acknowledgement message:

```json
{
    "msgType": "ACK",
    "userId": 42,
    "query": {
        "quoteType": "TRADING",
        "productCode": "btcnok",
        "inputSize": null,
        "inputValue": 1000
    },
}
```

But if your subscription request was invalid, you will receive error message instead:

```json
{
    "msgType": "ERR",
    "errorMsg": "Missing 'inputSize' or 'inputValue' field in payload",
}
```

Immediately after ACK message you will be getting quotes for subscribed product(s) twice per second until disconnected (there is no unsubscribe option).

Quote messages will have corresponding `msgType` field:

* `BQ` for basic quote
* `TQ` for trading quote
* `FQ` for full quote

Example trading quote would look like this:

```json
{
    "msgType": "TQ",
    "id": "98033829-efc4-441e-879c-2d7e5feabb72",
    "productCode": "btcnok",
    "baseCcy": "BTC",
    "quoteCcy": "NOK",
    "buyQuote": {
        "price": 1119318,
        "size": 0.000089,
        "value": 99.62,
        "feeInBaseCcy": 0.0000003115,
        "feeInQuoteCcy": 0.35,
        "slippage": 0,
        "slippagePercentage": 0
    },
    "sellQuote": {
        "price": 1119318,
        "size": 0.000089,
        "value": 99.62,
        "feeInBaseCcy": 0.0000003115,
        "feeInQuoteCcy": 0.35,
        "slippage": 0,
        "slippagePercentage": 0
    },
    "avgQuote": {
        "size": 0.000089,
        "value": 99.62,
        "feeInBaseCcy": 0.0000003115,
        "feeInQuoteCcy": 0.35
    },
    "feePercentage": 0.0035,
    "spread": 0,
    "spreadPercentage": 0,
    "dailyChangePercentage": -0.0212,
    "validUntil": "2025-09-22T17:00:47.491044354Z"
}
```

{% hint style="info" %}
In example above buy quote and sell quote are the same, because input size/value was below guaranteed zero spread threshold. In case of bigger size/value the spread might appear and buy/sell quotes will become different. You may then refer to `avgQuote` as quote based on average market price, however it is for display purpose only. The actual market order will always be based on buy/sell quote.
{% endhint %}

{% hint style="info" %}
It is not possible to have multiple subscriptions at the same time.

If you send another subscription request this will replace existing subscription with a new one (you will receive another ACK message).
{% endhint %}


# Webhook notifications

For users who have been registered through a Partner, webhook notifications are sent instead of standard emails. These notifications are sent to a URL provided by the Partner. It is the Partner's responsibility to notify end-users in response to webhook notifications. TÝR Markets will never contact the Partner's users by email, even when sending mass emails (e.g. newsletter, announcements, T\&C updates, etc.).

All notifications will be sent using the following format:

```http
POST <<Webhook URL>>
Content-Type: application/json
X-Webhook-Timestamp: <<Request timestamp>>
X-Webhook-Signature: <<HMAC signature of the request>>
{
  "notificationId": "<<UUID>>",
  "notificationType": "<<notification type>>"
  <<Notification specific fields>>
}
```

For example:

```http
POST https://partner-site.com/tyr-markets-notifications
Content-Type: application/json
X-Webhook-Timestamp: 1787142319072
X-Webhook-Signature: Cb89j6Uofh+ka5ZlwcDw/nam/ib3YlZOkJhT54WiSR0=
{
  "notificationId": "15bc83d1-a298-41fb-a157-bae64b04d47e",
  "notificationType": "DEPOSIT_CONFIRMED",
  "volvenUserId": "7647",
  "transferId": "11950943-12d0-4d5a-b022-2fb2d8ee2406",
  "source": "9GpHcZdNGJ28XaYPg31s6km63TnJx6qu2JDoyknMXtL1",
  "currency": "SOL",
  "amount": "32.6479599"
}
```

{% hint style="info" %}
All notification payloads contain a unique `notificationId` field that might be used as an idempotency check. In some cases (network timeout, client mistakenly returning non success HTTP response code) a single notification can be delivered multiple times to the client.
{% endhint %}

{% hint style="info" %}
All notification payloads contain a `notificationType` field identifying the type of notification. Partners should use this field to determine how to process the notification.
{% endhint %}

{% hint style="warning" %}
Additional fields may be added to notification payloads in the future. Partners should ignore fields they do not recognise.
{% endhint %}

#### Body

The request body is a JSON object encoded as UTF-8.

#### Headers

Following HTTP headers will be present in every webhook notification:

* `X-Webhook-Timestamp` - request timestamp (Unix epoch milliseconds)\
  Partners should verify that the timestamp is within a short time window of the current time (e.g. 15 seconds) to protect against replay attacks.
* `X-Webhook-Signature` - HMAC-SHA256 signature of the request, encoded using Base64

  It is calculated in following way:

  1. Prepare canonical request by concatenating `X-Webhook-Timestamp` header value and raw HTTP request body, for example: `1787142319072{"notificationType":"DEPOSIT_CONFIRMED",...}`
  2. Sign canonical request with Partner's API Secret using HMAC-SHA256 algorithm
  3. Encode the signature in Base64 format.

  Partners should verify the signature to ensure that request comes from TÝR Markets.

{% hint style="info" %}
The Partner API Secret used for webhook signature verification is the same API Secret associated with the Partner’s API Key.
{% endhint %}

#### Response

TÝR Markets will do following action based on the HTTP response code from the Partner:

* 200 - 299: mark the notification as delivered
* any other status code: mark the notification delivery as failed
* timeout / network error: mark the notification delivery as failed (may result with same notification being sent more than once, `notificationId` should be used to detect duplicates)

In case of failed delivery TÝR Markets will retry sending notification to the Partner with linearly increasing backoff, starting with 1 minute and maximum of 100 attempts.

{% hint style="info" %}
Note that response headers and body will be ignored
{% endhint %}

#### Notification types

The following notification types are currently supported:

<details>

<summary>User successfully created</summary>

```json
{
  "notificationType": "USER_CREATED",
  "volvenUserId": "7647",
  "email": "user@domain.com"
}
```

</details>

<details>

<summary>User registration failed</summary>

```json
{
  "notificationType": "SIGNUP_FAILED",
  "email": "user@domain.com",
  "errorMessage": "Error details"
}
```

</details>

<details>

<summary>Deposit confirmed</summary>

```json
{
  "notificationType": "DEPOSIT_CONFIRMED",
  "volvenUserId": "7647",
  "transferId": "11950943-12d0-4d5a-b022-2fb2d8ee2406",
  "source": "9GpHcZdNGJ28XaYPg31s6km63TnJx6qu2JDoyknMXtL1",
  "currency": "SOL",
  "amount": "32.6479599"
}
```

</details>

<details>

<summary>Withdrawal confirmed</summary>

```json
{
  "notificationType": "WITHDRAWAL_CONFIRMED",
  "volvenUserId": "7647",
  "transferId": "11950943-12d0-4d5a-b022-2fb2d8ee2406",
  "target": "9GpHcZdNGJ28XaYPg31s6km63TnJx6qu2JDoyknMXtL1",
  "currency": "SOL",
  "amount": "32.6479599"
}
```

</details>

<details>

<summary>Withdrawal failed</summary>

```json
{
  "notificationType": "WITHDRAWAL_FAILED",
  "volvenUserId": "7647",
  "transferId": "11950943-12d0-4d5a-b022-2fb2d8ee2406",
  "target": "9GpHcZdNGJ28XaYPg31s6km63TnJx6qu2JDoyknMXtL1",
  "currency": "SOL",
  "amount": "32.6479599"
}
```

</details>

<details>

<summary>Withdrawal canceled</summary>

```json
{
  "notificationType": "WITHDRAWAL_CANCELED",
  "volvenUserId": "7647",
  "transferId": "11950943-12d0-4d5a-b022-2fb2d8ee2406",
  "target": "9GpHcZdNGJ28XaYPg31s6km63TnJx6qu2JDoyknMXtL1",
  "currency": "SOL",
  "amount": "32.6479599"
}
```

</details>

{% hint style="warning" %}
New notification types may be introduced in the future. Partners must ignore notification types they do not recognise.
{% endhint %}


# v0.58.3

5th April 2024

## What's new

* Add support for OTCq strategy (works only in SEv2 mode, --useSEv2 true option)
* Add stop action in SEv2 mode
* Add button in About Dialog that brings the user to logs directory
* Get futures settings from FuturesProductSettings feed
* Show confirmation dialog when closing the app
* \<FIX> \[Chart] No [crypto.com](http://crypto.com/) mapping for TradingView charts
* \<FIX> \[Balances Chart] “Show holdings in crypto” option does not save
* \<FIX> \[Balances Chart] Update conversion effect colors according to design
* \<FIX> \[Balances Chart] Conversion effect color should be less visible
* \<FIX> \[Futures Settings] “Failed to parse incoming data” when changing any setting
* \<FIX> \[Strategies] BC is not filtered on the strategies list
* \<FIX> \[Strategies] BC precision is limited to 2 in multiple exchanges mode
* \<FIX> \[Strategies] When user type in to much size vs what is available, it shows just the available USDT
* \<FIX> \[Strategies] Available quote balance is not showing the leveraged amount
* \<FIX> \[Strategies] Fixed unneeded rounding-up when running the strategy + added 0.5% buffer on available size when running strategies


# v0.58.2

29th March 2024

## What's new

* Use strategy items inside root strategy view (improves performance in strategy tree)
* Update BULL and BEAR details panel
* Show confirmation dialog when closing the app
* Add reduce only parameter to two way strategies
* Display Volven name across the app as product name
* \<FIX> \[BULL, BEAR] I don’t see correct value in the gauge on the strategies list
* \<FIX> \[Balances Chart] Conversion effect is never visible
* \<FIX> \[Balances Chart] On ByBit Unified Trading there is no conversion effect
* \<FIX> \[Balances Chart] Pre-set conversion value is different than when dragging
* \<FIX> \[Balances Chart] If show empty wallets is checked it should uncheck hide<10
* \<FIX> \[Balances Chart] Total should show total portfolio value even when user hide values less than 10
* \<FIX> \[Balances Chart] Transfers conversions no error success messages
* \<FIX> \[Conversion dialog] Precision is set to 2 decimals
* \<FIX> \[Strategies list] BC exchange icon is missing
* \<FIX> \[Strategies] BULL / BEAR settings - should be on Buy or Sell side (not both)
* \<FIX> \[Strategies] No Flush for Bull and Bear
* \<FIX> \[Strategy Details] Market change shows wrong precision
* \<FIX> \[Strategy Details] Ticks in sliders are unaligned with the labels
* \<FIX> \[Strategy panels] Stop Loss settings card should not accept zero
* \<FIX> \[TMM] unable to update hourly volume when parameters UI data is empty


# v0.57.0

18th March 2024

* Add bull and bear strategies
* Add multi asset internal transfer
* Update volume section for BULL and BEAR strategies
* Update arrow buttons according to design (Balances chart)
* \<FIX> \[TWAP, TARB] The “Duration” slider does not work correctly


# v0.55.0

12th March 2024

## What's new

* Add multi selection to wallet cards
* Add slider value update by clicking tick labels
* \<FIX> \[Balances Chart filters] IB wallets should not be classified as Futures


# v0.54.0

6th March 2024

## What's new

* Add multi selection to donut chart
* Add separate filters for child strategies
* Increase the number of historical orders
* \<FIX> \[TMM settings] Unable to set the Hourly Volume - field is overwritten with dynamically calculated values


# v0.53.0

22nd February 2024

## What's new

* Make individual nodes expandable in new strategy tree
* \<FIX> \[Balances Chart] Conversions should be only possible on SPOT
* \<FIX> \[Balances Table] Balances table is empty


# v0.52.0

16th February 2024

## What's new

* Added ongoing internal transfer effect
* Disable animations while reusing items
* \[TMM] Add use\_strict\_low\_volatility\_trend\_filtering and use\_macd\_trend\_detector\_stat parameter


# v0.51.0

8th February 2024

## What's new

* Add initial ongoing conversion indicator to balances chart module
* Add TreeView to Strategy module (disabled by default - not fully tested and finished yet)
* \<FIX> \[ALO] Price parameter should be replaced with Price Limit
* \<FIX> \[Strategy panels] Spaces placed in parameter fields truncate the number


# v0.51.1

8th February 2024

## What's new

* \<FIX> Gradient effect is not visible in cards
* \<FIX> Ongoing conversion indicator is not visible


# v0.50.0

1st February 2024

## What's new

* \[Balances chart] Add layout splitter
* \[Strategy panels] Add binding between Hourly Volume and Max Position in TMM
* \[Strategy panels] Display StrategyMode as text if unknown
* \[Strategy list] Hide orders pause indicator when strategy is stopped
* \[Create strategy] Product field is empty at the first show of the panel
* \[Ticker] Unable to trade IB products from ticker
* \[Strategy Panels] TMM/DMM uses wrong precision for Hourly Volume


# v0.50.1

2nd February 2024

## What's new

* \<FIX> App hangs at startup during WebView initialization on Windows


# v0.49.0

26th January 2024

## What's new

* \[Balances Chart] Add possibility to drag one wallet on another
* \[Balances Chart] Add possibility to convert to any by drag
* \[TMM] Add Stop Loss Mode parameter and remove Position Netting and Threshold parameters from TMM
* \[Strategies] Update orders trolley indicator as in the design
* Volven Terminal (macOS) unnecessarily asks for accessibility permission
* \[Ticker] The volvenName is not used for product names
* \[Strategies] Filtering the strategy list by status does not work
* \[Balances Chart] Dragged wallet item is not auto-selected
* \[Balances Chart] Not able to drag item near the edge
* \[Balances Chart] Conversion dialog position should be centred and remembered
* \[Orders] Unable to create spot order
* \[Orders Chart] Small orders are not visible


# v0.48.0

19th January 2024

## What's new

* Add custom title component to trading view module
* Add support for all conversion and transfers
* Add Live indicator to Orders Chart
* Add scaling orders vertically to fit the visible area in the orders chart in strategy detials
* Add `total_time` and `allowed_size` to strategy properties debug list
* \[Strategy details] Unable to select very small orders in Orders Chart
* Username and Password input fields accept newline and tab characters
* \[Create strategy] DMM, TMM should not differentiate between buy/sell colors
* \[Create strategy] Binding loop when selecting ALO
* \[Strategies] Can’t access more parameters due to scrolling
* \[Strategies] Scroll bar covers fields in strategy details
* Icon for Volven Terminal has some background leftover


# v0.47.0

12th January 2024

## What's new

* Add Position Flush/Resume Threshold and Use Reduction Factor parameters to TMM
* Create desktop icon during installation on Windows
* Update volume\_percentage\_at\_risk minimal value to 1%
* \[Balances chart] Sum of percentage values is not 100%
* \[Balances chart] Small % visually bigger than big %
* \[Balances Chart] Crash occurs when dropping wallet item
* \[Balances chart] When you open the convert/transfer pop-up, it goes beyond the edge of the screen
* \[Balances chart] Items are not sorted properly
* \[Strategies] position\_rebalancing\_mode is disabled when sending position rebalancing threshold
* Application icon is too dark and looks like disabled


# v0.46.0

5th January 2024

## What's new

* Add Interactive Brokers exchange type
* Add default workspace on first start-up
* Load default products on first start-up
* \[Balances Chart] With Show Empty Wallets enabled, selecting is laggy
* \[TMM] Incorrect parameters as minimum and maximum values in Take Profit Levels graph
* FLUSH for both sides is available in AI strategy
* Balances Chart the app freezes when i uncheck the hide option


# v0.45.0

28 December 2023

## What's new

* Add side selection for strategy Flush action
* \[Balances chart] Small % visually bigger than big %


# v0.44.0

22nd December 2023

## What's new

* Change application name to Volven Terminal
* Create installers for macOS & Windows
* Store crash logs in separate files
* Improve balances chart performance
* Add Volven logo in navigation bar


# v0.43.0

5th December 2023

## What's new

* \[Balances chart] Add currencies flow list
* \[Strategies] Processing errors are not handled in StrategyEngineRestClient
* \[Flush popup] Sliders have different widths
* \[TMM] Change Happy level to Take Profit Aggressiveness
* \[TMM] Allow input above 100% for Hourly Volume and Max Position
* \[TMM] Invalid Imbalance calculations
* \[Strategies] Disable Flush popup temporarily
* \[Strategies] Change strategy recycle color to green


# v0.43.1

15th December 2023

## What's new

* \<FIX> \[TMM] Put LONG position size under SHORT inside Volume graph
* \<FIX> Multiple warnings from OAP handler
* \<FIX> About dialog is unnecessarily shown at app start-up


# v0.42.0

4th December 2023

## What's new

* Add About dialog with legal info (Settings Menu->About)
* Save showEmptyWallets parameter
* Improve precision in balances chart module
* Add action to Flush the strategy
* \[Strategies] Remove exchange\_code from create requests
* \[TMM] Update settings panel
* \[Strategy action buttons] Remove delay for pause, play, resume and flush


# v0.41.0

29th November 2023

## What's new

* \[Balances] Add exchanges list to balances chart overview
* \[Strategies] Add rejected orders to strategy orders chart
* \[Strategies] Add Market Maker mode to Profit Margin Graph
* \[Strategies] Add new strategy modes
* \[Strategies] Add delay functionality to strategy action buttons
* \[TMM] Take Profit Short/Long indicators show incorrect data
* \[CRAB] Fix imbalance calculations


# v0.40.0

27th November 2023

## What's new

* \[Strategies] Show parameters/properties for child strategies
* \[CRAB] Add additional parameters
* \[TMM] Add Take Profit Levels indicator


# v0.39.0

24th November 2023

## What's new

* Show more info when collecting remote data
* Add support for CRAB strategies
* Update Volume section in TMM


# v0.38.0

23rd November 2023

## What's new

* Add rejected orders to strategy orders chart
* Add grayscale icon effect
* Upgrade Volume section in TMM
* Change default strategy to SMO in Create Strategy panel
* Set Always Passive default value as activated

## Bugfixes

* \<FIX> \[Strategy Panels, ALO] Take Profit, Stop Loss have the same values as the price in the settings
* \<FIX> \[Create Strategy] After resuming, all parameters are deactivated when changing the strategy
* \<FIX> \[Strategies] Scroll in ‘Parameters’ preview in stopped strategies does not work


# v0.37.0

17th November 2023

## What's new

* Add “Trade Type” column to Account Trades table
* Add details pane to show extra data in OrdersTable
* Update strategy tile Warning Overlay as in the design
* Change OKX icon color to white
* Disable OrderBook module

## Bugfixes

* \<FIX> \[Strategies] Scroll in ‘Parameters’ preview in stopped strategies does not work
* \<FIX> \[Strategies] Always Passive is always false when starting the strategy
* \<FIX> \[Strategies] Aggressiveness should not be sent when updating other parameters
* \<FIX> \[Strategies] Strategy parameters should not be sent when there are no changes
* \<FIX> \[Strategies] Activated parameters are not used when resuming the strategy


# v0.37.1

20th November 2023

Fixed issue with creating TMM - "Failed to create strategy"


# v0.36.0

15th November 2023

## What's new

* Added linkModule mode
* ComboBox popup remains open after the dialog is closed and reopen
* Attach to child strategy properties in TARB running time
* Entry Price, Mark Price and Liq. Price have wrong precision
* The [crypto.com](http://crypto.com/) logo is not visible when the item is highlighted
* Set step size of TMM’s Take Profit to 0.05

## Bugfixes

* \<FIX> \[Strategies, TMM] Take Profit is always 0.5


# v0.35.0

10th November 2023

## What's new

* Add linking modules functionality
* Add initial support for TMM strategy
* Add Always Passive to DMM strategy
* Update strategy gauges design
* Change the name when user add API key to “Add API Key”
* Add CFD to ProductTypes

## Bugfixes

* \<FIX> \[Strategies] Volume section in TWAP details do not use precision from product details
* \<FIX> \[Strategy details, TWAP] Volume section details doesn’t fit the layout (abbreviation of long numbers, shorter names)
* \<FIX> \[DunutChart] Poor performance when “Show Empty Wallets” option is enabled
* \<FIX> \[Strategies] Order indicator is barely visible when the order is rejected


# v0.34.0

3rd November 2023

## What's new

* Add individual mode of single-currency and multi-account assets conversion to Balances module
* Add button to save workspace to window menu
* Add initial support for DMM strategy
* \[Strategies] Add scrolls in the Strategies view

## Bugfixes

* \[Ticker] The colored background in own bid price remains even though the order was filled
* \[Ticker] Product pairs removed still appear as selected in ‘Find products’
* \[Strategy details] Duplicated Filled in Volume chart details (+replace “Target” with “Target Vol”, +add Gross Value Traded)
* \[Strategy settings] Not able to set 0 for base currency in AI
* \[Strategy details] Wrong precision of Price Limit in strategy orders chart


