# 5. Описание параметров

# 5.1. Параметры транзакционных подключений

При добавлении нового транзакционного подключения необходимо заполнить ряд полей. Количество и тип полей зависят от биржи/рынка, к которым выполняется подключение. Далее дано описание полей для поддерживаемых бирж и рынков.

# 5.1.1. Московская биржа: фьючерсы и опционы

В настоящее время для подключения к рынку фьючерсов и опционов Московской биржи используются только подключения по протоколу TWIME, проколы FIX и Plaza II не поддерживаются.

# 5.1.1.1. Name

Поле для задания имени подключения. Это значение пользователь задаёт для своего удобства, чтобы потом в списке транзакционных подключений ему было проще ориентироваться. Разрешенные символы: _ a-z A-Z 0-9

# 5.1.1.2. Conn type

Тип подключения. Поддерживаются TWIME.

# 5.1.1.3. TWIME server

Адрес TWIME-сервера биржи, к которому будет выполняться подключение.

# 5.1.1.4. TWIME credentials

Credentials предоставляются брокером.

# 5.1.1.5. Trading account(s)

Торговый счёт, его можно найти в привязанном к счёту терминале или запросить у брокера. Alt

# 5.1.1.6. TWIME comment

Уникальный идентификатор для всех заявок для данного подключения, задаётся пользователем для собственного удобства (если не используется, оставляйте пустым).

# 5.1.1.7. Round robin

Включение и выключение режима Round robin для данного подключения. Подробнее о Round robin - здесь.

# 5.1.1.8. Max trans

Лимит транзакций в секунду. В анкете пользователя указана производительность логина в единицах производительности, где 1 единица равна 30 транзакциям в секунду.

# 5.1.1.9. Reserved trans

Количество зарезервированных транзакций в секунду для заявок на удаление. Использование данного параметра уменьшает количество выставлений заявки, доступных за одну секунду, но позволяет увеличить вероятность того, что робот успеет отдернуть (снять) заявку при уходе цен.

# 5.1.1.10. Move order

Разрешить или запретить использование приказов на переставление (изменение) заявки для данного подключения.

# 5.1.1.11. Bind IP

IP-адрес, с которого будет проходить подключение к бирже. IP должен быть указан в договоре. Если не указан, то обратитесь в поддержку.

# 5.1.2. Московская биржа: фондовый и валютный рынки

В настоящее время для подключения к фондовому и валютному рынкам Московской биржи используются подключения по протоколу FIX и TWIME, другие протоколы не поддерживаются.

# 5.1.2.1. Name

Поле для задания имени подключения. Это значение пользователь задаёт для своего удобства, чтобы потом в списке транзакционных подключений ему было проще ориентироваться. Разрешенные символы: _ a-z A-Z 0-9

# 5.1.2.2. Conn type

Тип подключения. Поддерживаются варианты FIX и TWIME.

# 5.1.2.3. Server

Адрес FIX-сервера биржи, к которому будет выполняться подключение.

# 5.1.2.4. SenderCompID

Значение данного параметра предоставляется брокером.

# 5.1.2.5. Password

Пароль для данного FIX-подключения. Если не меняли, то используйте стандартный, указанный в поле для ввода.

Важно: при создании нового подключения, если пароль не удовлетворяет определенным критериям, робот может автоматически сменить пароль. Информацию о смене пароля можно найти в логе робота. Текущий пароль подключения находится в “дереве” по адресу: ID: XX -> Connections -> astsxxxx_send_XXXX -> Params.

Для транзакционных подключений Московской биржи робот автоматически меняет пароль не чаще, чем один раз в месяц. Уведомление о смене пароля можно найти в логе робота.

# 5.1.2.6. Trading account(s)

Торговый счёт, предоставляется брокером, так же можно посмотреть в терминале.

Alt

# 5.1.2.7. Round robin

Включение и выключение режима Round robin для данного подключения. Подробнее о Round robin - здесь.

# 5.1.2.8. Client code

Код клиента можно посмотреть в привязанном к счёту терминале (нажать F7 и открыть таблицу "Позиции по деньгам") или запросить у брокера.

Alt

# 5.1.2.9. Firm level account

Указание на то, что аккаунт является аккаунтом уровня фирмы. Неверное задание данного параметра приводит к ошибкам снятия и переставления заявок.

# 5.1.2.10. Number of movable orders

Количество заявок, которые робот будет держать по краям стакана, чтобы при необходимости использовать для переставлений. Этот параметр задает количество заявок на инструмент. В случае, если все заявки в данный момент использованы, то робот будет бросать по алгоритму Round robin.

# 5.1.2.11. Min steps to pull

Отступ от цен, на которых стоят заявки для перемещения по краям стакана, при достижении которого лучшей ценой, эти заявки снимаются чтобы избежать их исполнения. Если все же они исполнятся, то сделки по ним не будут учтены в алгоритме, и произойдет расхождение позиции в роботе и на бирже.

# 5.1.2.12. Bind IP

IP-адрес, с которого будет проходить подключение к бирже. IP должен быть указан в договоре. Если не указан, то обратитесь в поддержку.

# 5.1.3. Санкт-Петербургская биржа

# 5.1.3.1. Name

Поле для задания имени подключения. Это значение пользователь задаёт для своего удобства, чтобы потом в списке транзакционных подключений ему было проще ориентироваться. Разрешенные символы: _ a-z A-Z 0-9

# 5.1.3.2. Server

Адреса для подключения к серверу биржи.

# 5.1.3.3. Login

Логин для доступа к бирже, берется из договора с биржей.

# 5.1.3.4. Password

Пароль для доступа к бирже, берется из договора с биржей.

# 5.1.3.5. Memder ID

Идентификатор участника торгов, берется из договора с биржей.

# 5.1.3.6. Trading account(s)

Идентификатор торгово-клирингового счёта участника, берется у брокера. Можете добавить несколько через запятую.

# 5.1.3.7. Client ID

Идентификатор клиентского кода, берется из договора с биржей.

# 5.1.3.8. Bind IP

IP-адрес, с которого будет проходить подключение к бирже. IP должен быть указан в договоре. Если не указан, то обратитесь в поддержку.

# 5.1.4. Alor Open API

# 5.1.4.1. Exchange

ALORMOEX или ALORSPB

# 5.1.4.2. Name

Поле для задания имени подключения. Это значение задается для удобства, чтобы потом в списке транзакционных подключений было проще ориентироваться. Разрешенные символы: _ a-z A-Z 0-9

# 5.1.4.3. Conn type

Тип подключения Mainnet или Testnet (боевой или тестовый соответственно)

# 5.1.4.4. Refresh token

Токен для доступа к API. Для заполнения поля необходимо перейти на портал разработчика Алор и стать клиентом для получения доступа. Пройти авторизацию и перейти в раздел "Токены для доступа к API". Связать аккаунт разработчика с торговым счетом. Выписать токен. Скопировать сгенерившееся значение токена в поле refresh token.

# 5.1.4.5. Trading account(s)

Торговый счет клиента. Его можно посмотреть в личном кабинете брокера Алор. Если счетов несколько, то они указываются через запятую. Тоговые счета имеют следующий вид:

Фондовый рынок: D1234

Валютный рынок: G00012

Срочный рынок: 7500123

Видео, наглядно объясняющее, как подключить Alor Open API

# 5.1.5. Криптовалютные биржи

На большинстве криптовалютных бирж для подключения достаточно одной или нескольких пар ключей (API Keys). Пара ключей - это публичный и секретный ключи. На разных биржах они могут называться немного по-разному. Сгенерировать пару ключей обычно можно самостоятельно на сайте биржи. Раздел управления ключами чаще всего можно найти в Настройки - Безопасность - API. На некоторых биржах у пар ключей есть понятие разрешений/привилегий, при создании ключей не забывайте указывать ключам разрешение на выполнение торговых операций.

# 5.1.5.1. Name

Поле для задания имени подключения. Это значение пользователь задаёт для своего удобства, чтобы потом в списке подключений ему было проще ориентироваться.

# 5.1.5.2. API Key/API/ID/Access Key/Public Key/Key

Публичный API-ключ для доступа к бирже, берется на бирже. Находится чаще всего в Настройки - Безопасность - API.

# 5.1.5.3. API key secret/Secret/Access Secret/Private Key/Secret Key

Секретный API-ключ для доступа к бирже, берется на бирже. Находится чаще всего в Настройки - Безопасность - API.

# 5.1.5.4. Bind IP

IP-адрес, с которого будет проходить подключение к бирже. Можете оставить Automatic или, при необходимости, установите определенный IP для подключения.

# 5.1.5.5. Margin account

Указатель на то, что ваш аккаунт является маржинальным. Применяется не на всех криптобиржах.

# 5.1.5.6. Passphrase

Фраза-пароль для доступа к бирже, применяется только для Kukoin.

# 5.1.5.7. Flood timeout

В данном параметре указывается время, которое мы будем выжидать и не выставлять заявки после получения ошибки REASON_FLOOD (только для биржи Cex.io).

# 5.1.5.8. User ID

Это ID пользователя (только для биржи Cex.io).

# 5.1.5.9. COD

Cancel on disconnect - включить механизм снятия заявок при разрыве связи (только для биржи Cex.io).

# 5.1.5.10. Create fast data connection

Поставьте данный флаг, если хотите создать быстрое маркетдата подключение с той же парой ключей (только для биржи Deribit).

# 5.1.5.11. Subaccount

В данном поле указывается имя субаккаунта. Если суббакаунты не используются, то поле нужно оставить пустым.

# 5.1.5.12. Single ADDING order

Для каждой бумаги разрешить только одну заявку в статусе ADDING, при попытке выставления еще одной заявки возвращать ошибку выставления. (Только для биржи Cex.io).

# 5.2. Параметры портфеля

Далее дано описание параметров портфеля. Все параметры являются редактируемыми, если прямо не указано иное. Описания некоторых параметров портфеля объединены в группы для удобства восприятия.

# 5.2.1. Name

Имя портфеля. В данном поле можно использовать латинские буквы и цифры, максимум 30 символов. У существующего портфеля имя не редактируется. Для изменения имени можете выключить торговлю, склонировать портфель, задать желаемое имя у склонированного портфеля и удалить предыдущий портфель.

# 5.2.2. re_sell/re_buy

Разрешена продажа/покупка (при взведении флага включает робот на продажу/покупку).

Важно : при снятии галок re_sell и re_buy происходит сброс счетчика ошибок робота.

# 5.2.3. Type

Тип торгового алгоритма портфеля:

  • Arbitrage - обычная арбитражная торговля с использованием всех заданных параметров. Сначала выставляется заявка по Is first на инструменту, при её сведении в сделку выставляются заявки по остальным инструментам портфеля.

  • Option hedge - арбитражная торговля с использованием опционов и автоматическим подсчетом Count для обеих ног. Предполагается, что торговля будет вестить парой опцион и базовый актив. У такой пары главная нога это опцион и Count опциона вычисляется автоматически с использованием модели Блека-Шоулза таким образом, чтобы delta у Count опциона равнялась единице. Count второй ноги задается автоматически всегда единицей. Пример: (если дельта 1 лота опциона равна 0.5, то для первой ноги (опцион) count = 2, для второй ноги (базовый актив) count = 1 )

  • TP algo - режим работы с выставлением "take profit" заявки по главному инструменту. По главному инструменту держится только одна TP заявка, после прохождения не TP заявок в сделку, заявка TP снимается и выставляется новым объёмом. Заявки по второй ноге при этом не выставляются.

  • TP algo 2 - режим работы с выставлением "take profit" заявки по главному инструменту. После каждой сделки по не TP заявке, выставляется новая TP заявка. У выставленной заявки есть Timer и SL. Заявки по второй ноге выставляются так же, как и в режиме Arbitrage.

Важно: Если включен Hedge (sec), то каждые Hedge (sec) секунд если позиция по главному инструменту портфеля ненулевая и нет выставляющихся или стоящих заявок, сводящих эту позицию к нулю, будет выставляться заявка, сводящая позицию к нулю; описанное выше распространяется и на позиции, открытые кликером; закрытие по Hedge (sec) возможно только после того, как были сделки по главной бумаге по алгоритму (не по кликеру). Пока сделок не было, нет цен от которых откладывать тейк.

# 5.2.4. Type trade

Тип торговли, используется при расчете цен Sell/Buy, Price_s/Price_b:

  • Price - режим торговли с использованием цен инструментов (bid и offer).

  • IV - режим торговли волатильностью (implied volatility) вычисленной по ценам инструментов с использованием модели Блека-Шоулза.

# 5.2.5. Type price

Тип определения цены инструмента:

  • Bid/offer- использовать лучшую цену на покупку и лучшую цену на продажу.

  • Orderbook - параметр позволяет искать цену в стакане, таким образом, чтобы набрать необходимый объем. Цены на покупку и продажу набираются среди цен в стакане, начиная от лучшей цены в нужном направлении и далее в глубине стакана. Поиск необходимого объема происходит с помощью данной формулы:

Count×Percentofquantity×0.01×{v_in_left,ifopenposev_out_left,ifclosepose,Count \times Percent\enspace of\enspace quantity \times 0.01 \times \begin{cases} v\_in\_left, &\text{if } \enspace open\enspace pose\\ v\_out\_left, &\text{if } \enspace close\enspace pose \end{cases},

  • Orderbook+filter - аналогично Orderbook, но вычитать из набираемого объема цены своих заявок (если на соответствующих ценах присутствуют свои заявки).

Глубина стакана определяется значением параметра инструмента портфеля Depth OB.

# 5.2.6. Quote

Параметр позволяет котировать инструмент. Если включен, то заявка всегда держится в стакане, если выключено, то заявка на продажу выставляется когда SellLim_sell , а заявка на покупку выставляется когда BuyLim_buy.

Видео объясняющее работу данного параметра:

# 5.2.7. Order ID

Идентификатор всех заявок портфеля, так же определяет приоритет вызова торгового алгоритма портфеля.

Пример:
Пусть есть несколько портфелей и во всех этих портфелях есть один и тот же инструмент. При изменении цены или объема лучшей цены на покупку или продажу по данному инструменту вызывается алгоритм торговли по всем портфелям, в которых этот инструмент присутствует. Торговый алгоритм портфелей будет вызываться в порядке возрастания Order ID, т.е. самым первым вызовется торговый алгоритм портфеля с Order ID = a, а самым последним с Order ID = z. При совпадении Order ID у разных портфелей порядок вызова торгового алгоритма портфелей НЕ определен и будет произвольным.

# 5.2.8. Hedge (sec)

Интервал времени в секундах по прошествии которого автоматически хеджировать незахеджированную позицию в случаях, когда заявка по второй ноге не выставилась по алгоритму (случаи связанные с техническими проблемами на самой бирже, ограничениями по рейтлимиту и другими не рыночными ситуациями). Если задать значение "-1", то проверка по таймеру на незахеджированность не осуществляется.

Неочевидный момент:
Если позиция, с учетом прохождения текущих активных заявок, расходится больше чем на значение Overlay (активные заявки могут быть), то подравняется позиция не трогая текущих активных заявок. Если подравнивающая заявка выставилась, то скинется счетчик ошибок для данной бумаги. Расхождение считается отдельно для каждого из инструментов второй ноги. Выравнивание также осуществляется по каждому из инструментов второй ноги отдельно. В один момент времени на каждом из инструментов второй ноги может висеть не более одной выравнивающей заявки. Выравнивающая заявка, в случае если она не прошла в сделку, переставляется раз в секунду.

# 5.2.9. Only maker

Выставлять котирующие (т.е. при включенном режиме Quote) заявки по Is first бумаге с признаком "снять если заявка будет taker" (при условии что биржей поддерживается работа этого типа заявки).

Важно: Если вы используете данный параметр, то вероятнее всего вам понадобится взвести флаг Simply first. Для избежания избыточного числа неэффективных заявок (в случаях когда заявка ставится и отклоняется т.к. попадает на встречную), что в итоге может привести к санкциям со стороны биржи.

# 5.2.10. Simply first

Если параметр включен, то когда цены Price_s/Price_b попадают в широкий спред или на противоположную сторону стакана, то они всегда будут выставляться не глубже, чем на один шаг цены в спред:

Price_s1=max(Price_s0,offerstep),Price\_s_1=\max\left(Price\_s_0,offer-step\right),

Price_b1=min(Price_b0,bid+step),Price\_b_1=\min\left(Price\_b_0,bid+step\right),

где bid, offer, step - это бид, оффер и шаг цены по Is first бумаге, нижний индекс "0" означает текущее значение параметра, нижний индекс "1" означает новое значение параметра.
Если у Is first бумаги взведен флаг Maker и текущий спред в стакане равен одному шагу цены, то заявка на продажу будет выставлена по цене offer, а на покупку по цене bid (в противном случае заявка просто не смогла бы выставиться и "спамила" бы биржу).

Важно: если наша заявка является бидом или оффером и при этом является единственной заявкой на данном ценовом уровне, то в качестве бида и оффера в предыдущей формуле используются бид и оффер без учета нашей заявки в стакане.

# 5.2.11. Equal prices

Если галка не стоит, то цена второй ноги определяется исходя из цен, которые были на момент сигнала на выставление заявки по is first инструменту. Если галка стоит, то заявка по второй ноге будет выставлена по такой цене, чтобы Sell = Lim_sell и Buy = Lim_buy (работает только для портфелей с двумя бумагами).
Таким образом цены в заявках будут строго соответствовать Lim_sell, даже если в моменте были лучшие цены. Включение параметра способствует меньшему числу проскальзываний по второй ноге, но и уменьшает количество положительных проскальзываний (когда купили по цене лучшей, чем хотели).

Пример: в первой ноге стоит цена 100, в второй цена 95. Мы хотим купить в первой ноге по 100, если в второй тоже будет цена сто, т.е. раздвижка будет ноль. В моменте во второй ноге резко рынок дергается вверх и достигает 110. Если галка стоит, то мы купим первую ногу по сто, и попытаемся продать вторую по 100 (т.к. нас устраивала раздвижка ноль). Если галка НЕ стоит, то мы кинем на цену которые дали сигнал к сделке , т.е. первую также купим по сто, вторую попытаемся продать по 110.

Формула для цены второй ноги для покупки:

Price=±(Lim_sellPrice_s{+,Ratio_sign1=+×,Ratio_sign1=×ratio1){,Ratio_sign2=+/,Ratio_sign2=×ratio2Price=\pm\left(Lim\_sell-Price\_s \begin{cases}+,& Ratio\_sign_1=+\\ \times,& Ratio\_sign_1=\times\end{cases} ratio_1\right) \begin{cases}-,& Ratio\_sign_2=+\\ /,& Ratio\_sign_2=\times\end{cases} ratio_2

для продажи:

Price=±(Lim_buyPrice_b{+,Ratio_sign1=+×,Ratio_sign1=×ratio1){,Ratio_sign2=+/,Ratio_sign2=×ratio2Price=\pm\left(Lim\_buy-Price\_b \begin{cases}+,& Ratio\_sign_1=+\\ \times,& Ratio\_sign_1=\times\end{cases} ratio_1\right) \begin{cases}-,& Ratio\_sign_2=+\\ /,& Ratio\_sign_2=\times\end{cases} ratio_2

Знак ± - зависит от того, какое выставлено значение параметра On_buy на 2-й ноге (если Buy, то "+", если Sell, то "-").

# 5.2.12. Volumes

Группа параметров отвечающих за объем выставляемых заявок. Группу можно разделить на две пары параметров: v_in_left/v_in_right и v_out_left/v_out_right, а так же параметры Virt_0_pos и n_perc_fill.

# 5.2.12.1. v_min/v_max

Минимальная/максимальная разрешенная позиция для главного инструмента портфеля. Измеряется в лотах Is first инструмента.

# 5.2.12.2. v_in_left/v_in_right

Отвечает за минимальный/максимальный разрешенный объем для однократного входа в позицию (в штуках портфелей);
Если тип определения цены Type price выбран Orderbook или Orderbook+filter то в качестве объема для однократного входа в позицию v_in_right не используется.

# 5.2.12.3. v_out_left/v_out_right

Отвечает за минимальный/максимальный разрешенный объем для однократного выхода из позиции (в штуках портфелей);
Если тип определения цены Type price выбран Orderbook или Orderbook+filter то в качестве объема для однократного выхода из позиции v_out_right не используется.

# 5.2.12.4. Virt 0 pos

Параметр позволяет Is first заявке, выставленной по алгоритму, по бумаге с направлением в сторону закрытия позиции не только сводить позицию к нулю, но и сразу открывать новую позицию с противоположным направлением, кроме того объем заявки никогда не может быть меньше v_in_left и v_out_left.

Важно: если установлен флаг To0, то можно получить такое поведение робота, что позиция никогда не попадает ровно в 0, а все время переворачивается то в одну, то в другую сторону. При включенном параметре Virt 0 pos робот может не дойти до позиций v_min/v_max, т.к. “упираемся” в v_in_left/v_in_right и v_out_left/v_out_right (робот не ставит меньше этих значений).

# 5.2.12.5. n_perc_fill

Параметр отвечает за связь позиции по главной бумаге и позиции по портфелю. Исходя из этого параметра осуществляется округление отношения позиции (Curpos) по главному инструменту к параметру Count того же инструмента. Значение n_perc_fill равное нулю отключает механизм округления, в результате позиция всегда округляется по модулю вниз. Во всех остальных случаях работают следующие правила:

  • если при изменении позиции по главному инструменту портфеля целая часть позиции не изменилась, а остаток от деления нацело Curpos на Count находится в диапазоне от (100 - n_perc_fill) до n_perc_fill процентов от Count, то позиция по портфелю не меняется, если остаток слева от диапазона, то округление идет по модулю вниз, если остаток справа от диапазона, то округление идет по модулю вверх. Параметр n_perc_fill может принимать значения только от 50 до 100;

  • если при увеличении позиции целая часть от деления нацело Curpos на Count увеличилась, а модуль остатка от деления нацело Curpos на Count больше или равен n_perc_fill процентов от Count, то позицию по портфелю округляем по модулю вверх, иначе вниз;

  • если при уменьшении позиции целая часть от деления нацело Curpos на Count уменьшилась, а модуль остатка от деления нацело Curpos на Count меньше или равен (100 - n_perc_fill) процентов от Count, то позицию по портфелю округляем по модулю вниз, иначе вверх.

# 5.2.13. Delta

Минимальное отклонение Price_s и `Price_b от цены выставленной заявки на продажу или покупку, соответственно, при превышении которого робот может переставить котируемую заявку, то есть заявку по Is first инструменту (используется только при включенном режиме Quote);

Пример:
Delta = 10, выставлена котирующая заявка на продажу по цене 95 (т.е на момент выставления этой заявки Price_s = 95). Как только Price_s станет меньше 85 или больше 105, заявка переставится по новой цене

# 5.2.14. First delta

Задается в процентах (%), это один из параметров, который ведет к перевыставлению заявки с новым объемом если ее текущий не исполненный объем стал меньше, чем First delta процентов от первоначального выставленного объема (используется только при включенном режиме Quote). Таким образом можно поддерживать максимально необходимый объем в котируемой заявке.

Пример:
First delta = 20. Вы котируете на продажу объёмом 100 и вашу заявку начинают выкупать по частям. Заявка висит до тех пор, пока её неисполненный объём больше или равен 20. Как только он становится меньше 20, заявка снимается и, если может, выставляется новая по цене Price_s в полном объёме.

# 5.2.15. Market volume

Данный параметр ограничивает выставление заявки по Is first инструменту в случаях, если в очереди в стакане перед предполагаемой ценой выставления уже есть объем больший чем указан в Market volume.

Пример:

# 5.2.16. Price check

Если предполагаемая цена выставления заявки по Is first бумаге попадает в стакан глубже, чем на Price check пунктов, то заявка не выставляется. То есть, если offer + Price check < Price_s, где offer – лучшая цена на продажу Is first инструмента, то заявка выставлена не будет. Для покупки аналогично.

# 5.2.17. Max not hedged

Значение равное сумме допустимых незахеджированных открытий по Is first инструменту (т.е. когда по любому из не Is first инструментов "висит" в рынке не менее, чем Max not hedged активных заявок) и ошибок выставления (все ошибки, кроме кроссов), после которой торговля по Is first инструменту будет остановлена до тех пор пока хотя бы одна из незахеджированных позиций не захеджируется или не сбросится счетчик ошибок.

Важно: необходимо использовать параметр Max not hedged в связке с Hedge (sec), так как иначе при накоплении определенного количества ошибок произойдет остановка торговли. Используя в портфеле инструменты некоторых площадок с типами инструментов "купить/закрыть покупку", "продать/закрыть продажу" Max not hedged может иметь значение только "1".

# 5.2.18. Overlay

Хеджировать только если разница (в портфелях) между Is first бумагой и остальными инструментами портфеля больше или равна значению данного параметра (в штуках портфелей, то есть в той же размерности, что и v_in_left/v_in_right).

# 5.2.19. Lim_sell/Lim_buy

Lim_Sell – сигнальная цена на продажу, заявка по Is first бумаге выставляется если Sell ≥ Lim_Sell вне зависимости от того включен или нет режим Quote.

Lim_Buy – сигнальная цена на покупку, заявка по Is first бумаге выставляется если Buy ≤ Lim_Buy вне зависимости от того включен или нет режим Quote.

Работа данных параметров наглядно продемонстрирована в этом видео:

# 5.2.20. Threshold

Параметр будет использоваться в алгоритме, только если Threshold > 0. Если Sell ≥ Lim_Sell + Threshold или Buy ≤ Lim_Buy - Threshold, то при сильном движении раздвижки на размер Threshold при рассчете цен Price_s, Price_b, соответственно, параметр отключает Simply first, а при выставлении заявки по Is first бумаге отключает Only maker. Под "отключает" имеется в виду "не использует". Видимые пользователю настройки портфеля не будут изменены.

Важно: нельзя переставить заявку на бирже, изменяя флаг Only maker заявки, уже стоящей на этой бирже, поэтому при выполнении условий на Threshold, переставление всегда заменяется на отдельные снятие и выставление завки.

# 5.2.21. Trading signal shift

Группа параметров, отвечающих за создание арбитражного канала.

# 5.2.21.1. K

Коэффициент сдвига заявки, что улучшает цену для каждого последующего входа.
На параметр К будут сдвинуты заявки Lim_sell в случае продажи или Lim_buy в случае покупки при наборе позиции. Другими словами, на сколько улучшится положение заявки после удара на вход (ударом считается сделка объемом не меньше v_in_left).

Видео объясняющее работу параметра К:

# 5.2.21.2. ТР

Уровень противоположной заявки после удара. С помощью параметра ТР вы указываете где будет выставлена противоположная заявка после удара (работает только после первого удара). Если нас ударили по Lim_sell = 150, то при 'ТР' = 50, Lim_buy будет выставлен на 150 – 50 = 100.

Видео объясняющее работу параметра ТР:

# 5.2.21.3. K1

Коэффициент указывает на сколько будет сдвинута противоположная заявка после второго удара. Lim_buy = 100 из предыдущего примера, при К1 = 5, будет установлена на 100 + 5 = 105, после второго удара по Lim_sell, после того как пройдет еще одна сделка, Lim_buy будет увеличен еще на 5 и прмиет значение 110, после очередной сделки по Lim_sell, Lim_buy примет значение 115 и т.д.

Видео объясняющее работу параметра К1:

# 5.2.21.4. K2

Коэффициент сдвига заявки, что улучшает цену заявки каждого последующего выхода. На параметр К2 будут сдвинуты заявки Lim_sell или Lim_buy в случае продажи или покупки, соответственно, при выходе из позиции. Другими словами, на сколько улучшится положение следующей заявки на выход после предыдущего удара (ударом считается сделка объемом не меньше v_out_left). Из примера ранее где Lim_buy = 105 при К2 = 3. При ударе по Lim_buy его значение станет равным 105 - 3 = 102.

Видео объясняющее работу параметра К2:

# 5.2.22. Limits timer

Время таймера (задается в секундах) по истечению которого происходит сдвиг обоих параметров Lim_sell и Lim_buy на значение K. Таймер включается если торговля включена и проходит сигнал на покупку или продажу, но торговля запрещена из-за того, что робот уже набрал максимальную позицию (по v_min/v_max). Таймер выключается при значении Percent > 100%.

Пример: значения Limits timer = 10 сек, Percent = 60. Возьмем временное окно 10 сек: допустим, сигнал был 2 сек, потом на 3 сек пропал, потом 4 сек был и снова на 1 сек пропал. За 10 сек сигнал был суммарно 6 сек, что больше или равно 60% от 10 сек, следовательно условие выполнено, сдвиг выполняется.

# 5.2.23. Percent

Процент от Limits timer после которого происходит сдвиг. Если сигнал на торговлю продержался указанный процент времени от значения Limits timer, то Lim_sell/Lim_buy) передвигаются на K, не смотря на отсутствие сделок по Is first бумаге.

# 5.2.24. Always timer

Включенный Always timer позволяет всегда использовать Limits timer, даже когда позиция портфеля не достигла значений v_min или v_max. При выключенном Always timer смещение уровней Lim_sell и/или Lim_buy происходит только когда происходят сделки или когда позиция портфеля достигла значений v_min или v_max. Включение этого параметра позволяет двигать уровни, даже если сделка не совершилась, но робот только попытался выставить заявку.

# 5.2.25. Pos

Текущая позиция портфеля (в штуках портфелей), вычисляется по формуле:

Pos=[CurposfirstCountfirst],Pos=[\frac{Curpos_{first}}{Count_{first}}],

где Curposfirst и Countfirst - это параметры Curpos и Count для инструмента портфеля с взведенным флагом Is first, и округляется вверх или вниз в зависимости от значения параметра n_perc_fill. Изменяется роботом, но может быть отредактирована пользователем вручную.

# 5.2.26. Timetable

Использовать торговлю по расписанию. Расписание состоит из списка дней недели (с понедельника по воскресенье, параметр TradingDays), из которых неодходимо выбрать те дни, в которые будет осуществляться торговля, и списка торговых периодов (периоды одни и те же для всех торговых дней), для каждого из периодов задаются свои параметры:

Begin - начало торгового периода.
End - окончание торгового периода.
re_sell - что делать с re_sell в течение данного интервала: всегда включать, всегда выключать, "ручной" режим.
re_buy - что делать с re_buy в течение данного интервала: всегда включать, всегда выключать, "ручной" режим.
Close - попытаться закрыть позицию сразу после окончания торгового периода (в течение 10 секунд).
To market - попытаться выровнить позицию сразу после окончания торгового периода (в течение 10 секунд).
To0 - что делать с To0 в течение данного интервала: всегда включать, всегда выключать, "ручной" режим.
Save history - сохранять ли историю изменения некоторых параметров портфеля в течение данного интервала.

Если текущее локальное время на сервере (curTime) попадает в один из периодов, т.е. BeginicurTimeEndiBegin_i \le curTime \le End_i, то управления параметрами портфеля, описанными выше, переходит к расписанию, в противном случае (если текущее время не попадает ни в один из периодов) параметры портфеля, описанные выше, автоматически выключаются.

"Ручной" режим означает, что данный параметр портфеля на данном временном интервале НЕ контролируется расписанием, т.е. пользователь может изменять значения данного параметра "руками" даже при включенном расписании.

Важно: текущее время определяется временем на сервере, где находится робот. В данный момент для роботов, торгующих на криптовалютных биржах, это UTC, для всех остальных это UTC +3 (МСК). Текущее время на сервере отображается в виджете Robots в столбце Robot time, настоятельно рекомендуется ориентироваться именно на это время.

# 5.2.27. To0

Использование данного параметра позволяет вести торговлю только в сторону закрытия позиции. Когда позиция портфеля достигнет нуля, торговля остановится.

Важно: если установлен флаг Virt_0_pos, то можно получить такое поведение робота, что позиция никогда не попадает ровно в 0, а все время переворачивается то в одну, то в другую сторону.

# 5.2.28. Opened

Параметр, используемый для подсчета финансового результата, вычисляется по формуле:

Opened=(iboughttradePricei×tradeAmounti×Multi)+(isoldtradePricei×tradeAmounti×Multi),Opened = -\left(\sum_{i\in bought}tradePrice_i\times tradeAmount_i\times Mult_i\right)+ \left(\sum_{i\in sold}tradePrice_i\times tradeAmount_i\times Mult_i\right),

где tradePricei - цена сделки;
tradeAmounti - количество лотов в сделке;
bought - список сделок на покупку;
sold - список сделок на продажу;
Multi - Fin res multiplier инструмента портфеля.

# 5.2.29. Commision sum

Сумма комиссии по всем сделкам портфеля, используется для подсчёта финансового результата.

# 5.2.30. Decimals

Параметр, определяющий сколько знаков после десятичной точки отображается в параметрах, значение которых является дробным числом.

# 5.2.31. Custom trade

Позволяет использовать Trade formula для подсчета раздвижки в таблице с финансовыми результатами.

# 5.2.32. Trade formula

Формула на языке программирования C++ для подсчета раздвижки в таблице с финансовыми результатами, вы пишете только тело функции и должны вернуть значение типа double. Функция вызывается в момент когда получены все необходимые сделки для подсчета раздвижки и добавления ее в таблицу (при этом сделки могут быть НЕ по всем бумагам портфеля). На каждый финансовый инструмент портфеля будет доступно не больше одной сделки, если по какой-либо бумаге прошло несколько сделок, относящихся к данной раздвижке, то будет доступна только одна сделка, но с суммарным количеством и со средней ценой.

# 5.2.33. Extra formulas

Флаг, включает расчёт Extra field#1 и Extra field#2.

# 5.2.34. Extra field#1 и Extra field#2

Поля для дополнительных формул на языке программирования C++, вы пишете только тело функции и должны вернуть значение типа double.

# 5.2.35. Disable portfolio

Полностью выключить портфель из всех расчетов и торговли, не удаляя его.

Важно: при снятии этой галки и восстановлении работы портфеля возможно переоткрытие торговых стаканов и, как следствие, приостановка торговли во всех портфелях, использующих то же дата подключение, на время переоткрытия стаканов.

# 5.2.36. Sell/Buy clicker

"Кликер", выставить заявку на продажу/покупку заданного количества портфелей. Заявки выставляются сразу по всем инструментам портфеля. Ручной способ совершения сделок всем портфелем сразу не дожидаясь срабатывания сигналов Sell>=Lim_sell и Buy<=Lim_buy.

# 5.2.37. To market

"Кликер" позволяет принудительно захеджировать позиции, не дожидаясь срабатывания автохеджа и др параметров. Происходит снятие всех заявок, кроме заявок первой ноги, выставленных по алгоритму и обратное выставление их по рыночным ценам (с учетом параметра k_sl) (по каждому инструменту второй ноги ставится не более одной выравнивающей заявки).

# 5.2.38. Place order

Позволяет выставить заявку по одному из инструментов портфеля, не дожидаясь срабатывания настроенных условий портфеля, в т.ч. при выключенной торговле портфеля. Для того, чтобы воспользоваться этой опцией необходимо сделать клик по голубой ячейке в столбце Place order в таблице Portfolios table и выбрать необходимые параметры заявки, далее нажать на кнопку Place order.
При включенной торговле выставленная таким образом заявка может привести к срабатыванию параметров:
Hedge (sec), SLE, TE.
Для удаления выставленной таким способом заявки потребуется биржевой терминал, где вручную снимается заявка или это можно сделать в роботе с помощью кнопки Hard stop (описание в п.3.4. Управление_портфелями)

# 5.2.39. Sell/Buy

Sell – расчетная цена на продажу. Нередактируемый параметр.
Buy – расчетная цена на покупку. Нередактируемый параметр.
Упрощенная формула для двух бумаг:

Isfirst:Onbuy=Buy,Secondleg:Onbuy=Sell{Is\enspace first: On\enspace buy=Buy, Second\enspace leg: On\enspace buy=Sell}

Buy=offer1Ratio_sign1ratio1bid2Ratio_sign2ratio2{Buy=offer_1Ratio\_sign_1ratio_1-bid_2Ratio\_sign_2ratio_2}

Sell=bid1Ratio_sign1ratio1offer2Ratio_sign2ratio2{Sell=bid_1Ratio\_sign_1ratio_1-offer_2Ratio\_sign_2ratio_2}

Ratio_sign=+or×{Ratio\_sign =+\enspace or\enspace \times}

Формулы расчета Sell и Buy для любого количества ног:

Buy=i{bidi,Onbuyi=Sellofferi,Onbuyi=Buy{+,Ratio_signi=+×,Ratio_signi=×ratioiBuy=\sum_{i} \begin{cases}-bid_i,& On\enspace buy_i=Sell\\ offer_i,& On\enspace buy_i=Buy\end{cases} \begin{cases}+,& Ratio\_sign_i=+\\ \times,& Ratio\_sign_i=\times\end{cases} ratio_i

Sell=i{bidi,Onbuyi=Buyofferi,Onbuyi=Sell{+,Ratio_signi=+×,Ratio_signi=×ratioiSell=\sum_{i} \begin{cases}bid_i,& On\enspace buy_i=Buy\\ -offer_i,& On\enspace buy_i=Sell\end{cases} \begin{cases}+,& Ratio\_sign_i=+\\ \times,& Ratio\_sign_i=\times\end{cases} ratio_i

Наглядно продемонстрирована работа данных параметров в этом видео:

# 5.2.40. Price_s/Price_b

Price_s – цена выставления заявки на продажу по Is first бумаге, вычисляется как обратная функция для Sell, где цена Sell заменяется на Lim_Sell. Нередактируемый параметр.
Price_b – цена выставления заявки на покупку по Is first бумаге, вычисляется как обратная функция для Buy, где цена Buy заменяется на Lim_Buy. В общем случае это та цена, по которой робот "хочет" купить и продать по Is first инструменту. Нередактируемый параметр.

Формулы расчета Price_s и Price_b для двух бумаг:

Price_s=(Lim_selloffer2{+,Ratio_sign2=+×,Ratio_sign2=×ratio2){,Ratio_sign1=+/,Ratio_sign1=×ratio1k1Price\_s=\left(Lim\_sell-offer_2 \begin{cases}+,& Ratio\_sign_2=+\\ \times,& Ratio\_sign_2=\times\end{cases} ratio_2\right) \begin{cases}-,& Ratio\_sign_1=+\\ /,& Ratio\_sign_1=\times\end{cases} ratio_1 - k_1

Price_b=(Lim_buy+bid2{+,Ratio_sign2=+×,Ratio_sign2=×ratio2){,Ratio_sign1=+/,Ratio_sign1=×ratio1+k1Price\_b=\left(Lim\_buy+bid_2 \begin{cases}+,& Ratio\_sign_2=+\\ \times,& Ratio\_sign_2=\times\end{cases} ratio_2\right) \begin{cases}-,& Ratio\_sign_1=+\\ /,& Ratio\_sign_1=\times\end{cases} ratio_1 + k_1

Формулы расчета Price_s и Price_b для любого количества ног:

Price_s=(Lim_selliiisfirst{bidi,Onbuyi=Buyofferi,Onbuyi=Sell{+,Ratio_signi=+×,Ratio_signi=×ratioi){,Ratio_sign=+/,Ratio_sign=×ratio_sisfirstkisfirstPrice\_s=\left(Lim\_sell_i-\sum_{i \neq isfirst} \begin{cases}bid_i,& On\enspace buy_i=Buy\\ -offer_i,& On\enspace buy_i=Sell\end{cases} \begin{cases}+,& Ratio\_sign_i=+\\ \times,& Ratio\_sign_i=\times\end{cases} ratio_i \right) \begin{cases} -,& Ratio\_sign=+\\ /,& Ratio\_sign=\times \end{cases} ratio\_s_{isfirst} - k_{isfirst}

Price_b=(Lim_buyiiisfirst{bidi,Onbuyi=Sellofferi,Onbuyi=Buy{+,Ratio_signi=+×,Ratio_signi=×ratioi){,Ratio_sign=+/,Ratio_sign=×ratio_bisfirst+kisfirstPrice\_b=\left(Lim\_buy_i-\sum_{i \neq isfirst} \begin{cases}-bid_i,& On\enspace buy_i=Sell\\ offer_i,& On\enspace buy_i=Buy\end{cases} \begin{cases}+,& Ratio\_sign_i=+\\ \times,& Ratio\_sign_i=\times\end{cases} ratio_i \right) \begin{cases} -,& Ratio\_sign=+\\ /,& Ratio\_sign=\times \end{cases} ratio\_b_{isfirst} + k_{isfirst}

Видео, наглядно объясняющее работу параметров Price_s/Price_b:

# 5.2.41. Sell/Buy status

Статус заявки на продажу/покупку по Is first инструменту. Существуют следующие статусы:

running - (тут должно быть краткое описание)

free - (описание)

Для того чтобы освободить "зависшую" заявку, необходимо сделать двойной клик на ячейке таблицы. Ручная смена статуса может привести к потере заявки роботом, данную операцию рекомендуется делать только в крайних случаях.

# 5.2.42. Return first

Оборот по Is first бумаге, вычисляется с момента старта серверной части робота как сумма модулей количества лотов в сделках по Is first инструменту. Можно установить ноль двойным кликом.

# 5.2.43. Fin res

Предполагаемый финансовый результат портфеля, вычисляется по формуле:

Finres=Opened+Commissionsum+isecsCurposi×Multi×{secBidi,ifCurposi>0secOfferi,ifCurposi<0,Fin\enspace res=Opened+Commission\enspace sum+\sum_{i\in secs}Curpos_i \times Mult_i \times \begin{cases} secBid_i, &\text{if } Curpos_i>0\\ secOffer_i, &\text{if } Curpos_i<0 \end{cases},

где secBidi - лучшая цена на покупку инструмента портфеля;
secOfferi - лучшая цена на продажу инструмента портфеля;
Curposi - текущая позиция инструмента портфеля;
Mult - Fin res multiplier инструмента портфеля;
secs - список инструментов портфеля.

Инструкцию по расчету и настройке вывода финансового результата можно посмотреть здесь Fin res manual (opens new window))

# 5.2.44. Fin res wo C

Fin res без учета комиссии. Вычисляется по формуле:

Finres=Opened+isecsCurposi×Multi×{secBidi,ifCurposi>0secOfferi,ifCurposi<0,Fin\enspace res=Opened+\sum_{i\in secs}Curpos_i \times Mult_i \times \begin{cases} secBid_i, &\text{if } Curpos_i> 0\\ secOffer_i, &\text{if } Curpos_i< 0 \end{cases},

где secBidi - лучшая цена на покупку инструмента портфеля;
secOfferi - лучшая цена на продажу инструмента портфеля;
Curposi - текущая позиция инструмента портфеля;
Mult - Fin res multiplier инструмента портфеля;
secs - список инструментов портфеля.

# 5.2.45. Comment

При необходимости к каждому порфтелю можно добавить свой комментарий. Максимально допустимое число символов для комментария 100.

# 5.2.46. Color

При небходимости можно выделить портфель цветом в поле color.

# 5.3. Параметры инструментов портфеля

Далее дано описание параметров инструментов портфеля. Все параметры являются редактируемыми, если прямо не указано иное.

# 5.3.1. SecKey

Уникальный идентификатор инструмента портфеля. Нередактируемый параметр.

# 5.3.2. SecBoard

Режим инструмента портфеля. Нередактируемый параметр.

# 5.3.3. SecCode

Код инструмента портфеля. Нередактируемый параметр.

# 5.3.4. Exchange

Название биржи, на которой торгуется данная бумага. Нередактируемый параметр.

# 5.3.5. Curpos

Текущая позиция робота по данному инструменту в лотах.

# 5.3.6. Count type

Параметр позволяет выбрать константное значение Count или использовать Count formula

# 5.3.7. Count

Количество лотов инструмента в одном портфеле.

Важно: для многих криптовалютных бирж данный параметр указывается "как бы в сатошах", т.е. чтобы купить/продать 1 лот на бирже необходимо указать количество 100 000 000 (соответственно, 0.1 лота сооветствует значение 10 000 000 и т.д.). При добавлении бумаги в портфель обращайте внимание на столбец Price to lot mult.

Важно: если изменяете Count Is first бумаги, не забудьте задать правильные значения для v_min/v_max.

Важно: при включенном Virt 0 pos Count – это минимальное количество, которым торгует робот по соответствующему инструменту, в противном случае может быть выставлена заявка в количестве меньшем чем Count (в случае закрытия позиции и чтобы "попасть" в v_min/v_max).

# 5.3.8. Count formula

Количество лотов инструмента в одном портфеле, задаётся как код на языке программирования C++. Вы пишете только тело функции, и должны вернуть значение типа double.

Важно: значения Count или Count formula определяют соотношение именно между позициями инструментов портфеля (соотношение в конкретной сделке может отличаться). По этой же причине значение Count formula не зависит от направления выставляемой заявки.

Важно: настоятельно рекомендуется для Is first бумаги никогда не возвращать значение 0, если вы хотите не торговать, используйте Ratio formula и задавайте необходимые значения для раздвижки. Если вы все-таки получили Count равный 0 для Is first бумаги, то портфель не будет торговать ни одной бумагой и для подсчета позиции портфеля в том месте, где необходимо поделить на Count Is first бумаги (который в вашем случае равен 0) будет делиться на 1.

# 5.3.9. On buy

Определяет будем ли мы покупать или продавать инструмент при срабатывании сигнала на покупку по главному инструменту. Данный параметр настраивается только для второй ноги. Для первой ноги по умолчанию всегда On Buy = Buy. При срабатывании сигнала на продажу робот возьмет противоположное значение.

Пример: Для is_first инструмента On Buy = Buy Для второй ноги On Buy = Sell При таких настройках при срабатывании сигнала на покупку робот будет стремиться купить первую ногу и затем продать вторую. При таких настройках при срабатывании сигнала на продажу робот будет стремиться продать первую ногу и затем купить вторую.

Для is_first инструмента On Buy = Buy Для второй ноги On Buy = Buy При таких настройках при срабатывании сигнала на покупку робот будет стремиться купить первую ногу и затем тоже купить вторую. При таких настройках при срабатывании сигнала на продажу робот будет стремиться продать первую ногу и затем тоже продать вторую.

# 5.3.10. Is first

Определяет, является ли бумага главным инструментом портфеля. Позиция портфеля считается по главному инструменту. On buy такого инструмента всегда указывается как Buy.

# 5.3.11. k

Задает размер искусственного проскальзывания (отступ от рыночной цены, т.е. при покупке цена выставления offer + k, при продаже цена выставления bidk, где bid и offer – лучшие цены на продажу и покупку, соответственно).

# 5.3.12. k_sl

Аналог параметра k, но используется только во время перестановок заявок по SLE и TE. Задает размер искусственного проскальзывания (отступ от рыночной цены, т.е. для заявки на покупку цена выставления offer + k_sl, для заявки на продажу цена выставления bidk_sl, где bid и offer – лучшие цены на продажу и покупку, соответственно).

# 5.3.13. SLE

Включить/выключить функцию переставления по стоп-лоссу.

# 5.3.14. SL

Значение стоп-лосса, при достижении которого необходимо снимать заявку, если она не прошла до этого момента и бросать снова по новой рыночной цене (стоп-лосс откладывается от первоначальной цены выставления заявки).

# 5.3.15. TE

Параметр отвечает за включение/выключение функции переставления по таймеру.

# 5.3.16. Timer

Параметр, определяющий через сколько времени снимать заявку, если она не прошла до этого момента и бросать снова по новой рыночной цене.

# 5.3.17. Percent of quantity

Если на бирже в объеме лучшей цены на продажу или покупку (или в найденном объеме в стакане если Type price = Orderbook или Type price = Orderbook + filter), соответственно, есть нужное количество процентов (%) от объема заявки инструмента, не являющегося Is first, и это условие выполняется для всех не Is first инструментов, то можно выставляться по Is first инструменту. Таким образом если во второй ноге не достаточно объема для хеджирования, то заявка по первой ноге не выставляется даже если есть сигнал на покупку или на продажу.

# 5.3.18. Ratio sign

Знак используемый перед коэффициентом Ratio при расчете цен Sell и Buy, ”+” или ”×”.

# 5.3.19. Ratio

Коэффициент, используемый при расчете цен Sell и Buy.

# 5.3.20. Fin res multiplier

Fin res multiplier - множитель, используется для подсчета финансового результата, чтобы привести все цены к одной размерности.

# 5.3.21. Commission type и Commission

Comission type - gараметр, определяющий тип расчёта комиссии. Позволяет задать фиксированную сумму списания или процент об объема сделки.

Commission - комиссия по инструменту. Если Commission type указан как %, то комиссия указывается в процентах от цены сделки, а если как pt, то комиссия указывается в той же размерности, в которой считается финансовый результат по портфелю (например, для акции Сбербанка комиссия указывается в процентах и для большинства брокеров она равна 0.01 %, а для фьючерса на акцию Сбербанка комиссия указывается в пунктах и равна 0.25 пункта для скальперских сделок).

# 5.3.22. Client code

Код клиента с которого надо выставлять заявку по данной бумаге или пустая строка если необходимо выставлять с "кода по умолчанию", отображает все коды, которые доступные для торговли соответствующим инструментом, код virtual означает торговлю "в файл" и может быть использован для тестирования стратегий; код, начинающийся с Round robin, означает использование режима выставления заявок Round robin.

Важно: Режим Round robin означает выставление и снятие заявок через все подключения к бирже с заданным клиентским кодом по некоторому алгоритму, при этом поведение этого алгоритма для Московской биржи и для криптобирж различается. Это связано с особенностями торгов и типом подключений на биржах. На криптобиржах при использовании режима Round robin происходит поочередное выставление и снятие заявок через подключения с одинаковым клиентским кодом. Все подключения из списка используются равномерно. Для криптобирж (не всех) это позволяет поднять общую пропускную способность клиентского счёта с помощью использования нескольких подключений с разными парами ключей. На рынках Московской биржи все подключения с одним кодом клиента держатся в очереди, порядок подключений в очереди зависит от скорости выставления заявок через эти подключения (кто в данный момент быстрее, тот первый в очереди, порядок подключений в очереди меняется не чаще раза в секунду, кроме того каждую секунду движение по очереди начинается заново, т.о. загрузка подключений НЕ равномерная). При измерении скорости (Round trip-а) выставления заявок учитывается только скорость некоторых заявок, назовём их важными. Важными заявками считаются заявки, выставленные по первой ноге по алгоритму (т.е не кликером, не стопом и прочими способами), причём только в случае если котирование отключено. Так же важными заявками являются заявки по второй ноге, выставленные по основному алгоритму, т.е. после сделки по первой ноге. Значения Round trip'a обнуляются раз в час, чтобы снова была возможность оценить скорость каждого из подключений и выбрать быстрейшее. Таким образом, для Московской биржи выбирается быстрейшее подключение и по возможности заявки выставляются с него.

Важно: код клиента не может быть пустым для бумаг с Count отличным от нуля.

# 5.3.23. MM

Флаг, если взведен, то все заявки по инструменту выставляются с признаком "заявка маркет-мейкера" (работает не для всех подключений). Требуется обязательное согласование использование этого признака с самой биржей.

# 5.3.24. TP

Величина тейк-профит, используется при Type равном TP algo или TP algo 2, откладывается от цены сделки по заявке Is first инструмента.

# 5.3.25. Ratio type

Позволяет настроить использование константного значения Ratio или результат вычисления Ratio formula при расчёте значений Sell и Buy.

# 5.3.26. Ratio buy formula

Параметр, используемый при расчете цены Buy, задается как код на языке программирования C++. Вы пишете только тело функции и должны вернуть значение типа double.

# 5.3.27. Ratio sell formula

Параметр, используемый при расчете цены Sell, задается как код на языке программирования C++. Вы пишете только тело функции и должны вернуть значение типа double.

# 5.3.28. FUT move limits

Флаг, если взведен, то при каждой смене дня будет осуществляться автоматическая подвижка лимитов по формулам:

Lim_Sell1=Lim_Sell0(Lim_Sell0+Lim_Buy0)×days_to_expiry_SPOT2×days_to_expiry,Lim\_Sell_1=Lim\_Sell_0- \frac{\left(Lim\_Sell_0+Lim\_Buy_0 \right) \times days\_to\_expiry\_{SPOT}} {2\times days\_to\_expiry},

Lim_Buy1=Lim_Buy0(Lim_Sell0+Lim_Buy0)×days_to_expiry_SPOT2×days_to_expiry,Lim\_Buy_1=Lim\_Buy_0- \frac{\left(Lim\_Sell_0+Lim\_Buy_0 \right)\times days\_to\_expiry\_{SPOT}} {2\times days\_to\_expiry},

где days_to_expiry - целое количество дней до экспирации данной бумаги;
days_to_expirySPOT - целое количество дней до экспирации бумаги, отмеченной флагом SPOT move limits или 1, если такая бумага не указана;
нижний индекс 0 означает текущее значение параметра;
нижний индекс 1 означает новое значение параметра.

# 5.3.29. SPOT move limits

Флаг, если взведен, то данная бумага используется в формулах для FUT move limits.

# 5.3.30. Depth OB

Максимальный уровень глубины стакана до которого включительно вычислять цены и объемы (в штуках шагов цены, считая от бида/оффера), доступен только для не Is first, используется только в режимах Type price = Orderbook и Type price = Orderbook + filter.
Если у Вас выбран режим Type price = Orderbook и Type price = Orderbook + filter, то необходимо следить за значением Depth OB, при слишком низких значениях параметра робот не сможет высчитывать цены и объемы, у вас будут нули в параметрах Sell и Buy.

# 5.3.31. Calc price OB

Тип цены, используемой для расчета Sell, Buy, Price_s, Price_b. Доступен только для не Is first бумаг, используется только в режимах Type price = Orderbook и Type price = Orderbook + filter:

  • Deepest – цена того уровня в стакане, на котором набрали искомый объем;
  • Weighted avg. – средневзвешенная цена до того уровня в стакане включительно, на котором набрали искомый объем.

# 5.3.32. Trading price OB

Тип цены, используемой при торговле, доступен только для не Is first бумаг, используется только в режимах Type price = Orderbook и Type price = Orderbook + filter:

  • Deepest – цена того уровня в стакане, на котором набрали искомый объем;
  • Weighted avg. – средневзвешенная цена до того уровня в стакане включительно, на котором набрали искомый объем.

Пример:
Trading price OB- Deepest:

Допустим, вы ищете в стакане на покупку 1000 лотов, по цене 100 стоит 500 лотов, потом по цене 99 стоит 490 лотов и по цене 5 стоят оставшиеся 10 лотов. При таком раскладе искомая цена будет равна 5.

Trading price OB - Weighted avg:

Из примера выше (500 * 100 + 490 * 99 + 5 * 10)/1000 = 98.56 - искомая цена. Перед выставлением заявки робот округлит цену в соответствии с шагом цены данного инструмента. Для продажи выполняется округление вверх, для покупки - округление вниз. Т.е. если шаг цены в данном примере равен 1, то продавать будем по цене 99.

# 5.3.33. Level to0

Если хотя бы для одной бумаги портфеля модуль разности Mark price и Liquidation price строго меньше данного значения, то взвести флаг To0 и НЕ давать его снять пока условие выполняется, когда условие перестанет выполняться - снять флаг To0 (имеет смысл только для бумаг с BitMEX, Deribit, некоторых других). Таким образом для заданного портфеля можно запретить увеличивать позицию пока текущая цена находится в опасной близости с ценой ликвидиации.

# 5.3.34. Level close

Если хотя бы для одной бумаги портфеля модуль разности Mark price и Liquidation price строго меньше данного значения, то взвести флаг To0 и НЕ давать его снять пока условие выполняется (когда условие перестанет выполняться - снять флаг To0), раз в 5 секунд выставлять заявку в направлении закрытия позиции в объеме v_out_left портфелей до тех пор пока описанное выше условие не перестанет выполняться или позиция по портфелю не станет равно 0 (имеет смысл только для бумаг с BitMEX, Deribit, некоторых других). Таким образом позиция для заданного портфеля уменьшается с соблюдением правил хеджирования до тех пор, пока цена ликвидации не примет безопасное значение.

# 5.3.35. Leverage

Параметр определяющий плечо для выставляемой заявки (имеет смысл только для бумаг с HBDM).

# 5.3.36. Decimals

Параметр, определяющий сколько знаков после десятичной точки отображается в параметрах, для которых значение является дробным числом.

Важно: данный параметр так же отвечает за число знаков после десятичной точки в ценах сделок по данной бумаге в таблице раздвижек. При смене значения, число знаков у уже добавленных в таблицу сделок НЕ изменится.

# 5.3.37. Max trans time

Максимально допустимое время Round trip'a (в микросекундах) при котором вы хотите продолжить торговать текущим портфелем. Если это время будет превышено, то активируется Ban_period.

# 5.3.38. Ban period

Период, на протяжении которого робот перестает выставлять заявки по первой ноге.

# 5.4. Параметры уведомлений

Робот умеет уведомлять пользователя о наступлении определенных событий. Например, при резком падении финансового результата. Так как понятие "резкое падение" сильно зависит от выбранной стратегии и настроек портфеля, то для каждого портфеля настройки уведомлений задаются отдельно. Кроме чисто сигнальной функции некоторые уведомления могут выключать торговлю по соответствующему портфелю. При наступлении соответствующего события, уведомление появляется в браузере, а так же в Telegram-бот, если он подключен и настроен. Также существуют уведомления, которые настраиваются для конкретного транзакционного подключения к бирже, они описаны в разделе Параметры позиций.

# 5.4.1. FinRes fall

Уведомление о падении финансового результата. Fall (%) - процентное изменение финансового результата о достижении которого необходимо уведомить пользователя, если оно достигнуто за Time (sec) секунд. При этом это изменение должно быть больше Min fall (pt) Stop trading - вместе с уведомлением выключить торговлю по портфелю (расписание также будет выключено).

# 5.4.2. Lim_Sell change и Lim_Buy change

Уведомлять об изменении Lim_Sell/Lim_Buy портфеля если за Time секунд оно больше, чем на Value;

  • Time (sec) - период времени в секундах;
  • Value - сигнальное значение изменения Lim_Sell/Lim_Buy;
  • Stop trading - вместе с уведомлением выключить торговлю по портфелю (расписание также будет выключено).

# 5.4.3. Severe sell change и Severe buy change

Уведомлять о "резком" изменении Sell/Buy портфеля ≥ Value за Time секунд (только когда портфель включен):

  • Time (sec) - период времени, за который считать изменение Sell/Buy (откладывается назад от текущего времени) как разницу между текущим Sell/Buy и Sell/Buy 'Time` секунд назад;
  • Value - сигнальное значение изменения Sell/Buy.

# 5.4.4. Too much running orders

Уведомлять о слишком большом количестве активных заявок по не Is first инструментам портфеля (max (число активных заявок по каждому из не Is first инструментов портфеля) ≥ Percent * Max not hedged * 0.01, где Max not hedged по умолчанию равен 30).

  • Percent (%) - сигнальный процент.

# 5.4.5. Too much not hedged

Уведомлять о слишком большой не захеджированной позиции по Is first инструменту портфеля:

  • Limit portfolios - сигнальное значение не захеджированной позиции (вычисляется в штуках портфелей).

# 5.4.6. Severe pos change

Уведомлять о "резком" изменении позиции Pos по портфелю ≥ Value за Time секунд:

  • Time (sec) - период времени, за который считать изменение позиции (откладывается назад от текущего времени) как разницу между текущей позицией и позицией Time секунд назад;
  • Value - сигнальное значение изменения позиции.

# 5.5. Параметры позиций

# 5.5.1. Параметры позиций по инструментам

Параметры позиций по инструментам отображаются отдельно для каждого подключения во вкладке Positions/Balance данного подключения и представляют собой таблицу. Строчки таблицы - это инструменты данного подключения, используемые в портфелях робота. Если через данное транзакционное подключение доступны несколько клиентских кодов, то строчка будет соответствовать паре (код клиента, инструмент). Инструменты с нулевой позицией могут быть скрыты (для этого нужно снять флаг Show_zero_poses). Далее приведены описания столбцов таблицы, предполагается что параметры являются редактируемыми, если прямо не указано иное.

# 5.5.1.1. SecKey

Уникальный идентификатор инструмента. Соответствует параметру инструментов портфеля SecKey. Нередактируемый параметр.

# 5.5.1.2. SecCode

Код инструмента. Соответствует параметру инструментов портфеля SecCode. Нередактируемый параметр.

# 5.5.1.3. Pos

Позиция на бирже по инструменту. Нередактируемый параметр.

# 5.5.1.4. Robot pos

Суммарная позиция инструмента в роботе со всех портфелей, торгующих через данное подключение указанной бумагой с данным кодом клиента. Нередактируемый параметр.

# 5.5.1.5. Mark price

"Сигнальная" цена инструмента. Нередактируемый параметр. Если Mark price достигнет Liquidation price, то позиция по инструменту будет принудительно закрыта биржей.

# 5.5.1.6. Liquidation price

Цена ликвидации по инструменту. Нередактируемый параметр. Если Mark price достигнет Liquidation price, то позиция по инструменту будет принудительно закрыта биржей.

# 5.5.1.7. Pos lag

Значение с которым будет сравниваться разница между Pos и Robot pos, само сравнение и дальнейшие действия определяются параметром Check equality.

# 5.5.1.8. Check equality

Если флаг взведен, то в случае, если произойдет следующая ситуация:

posrobot_pospos_lagpos-robot\_pos\neq pos\_lag

в логе вам будут приходить оповещения о том, что позиция на бирже и позиция в роботе не совпадают. (pos - позиция на бирже, а robot_pos - позиция в роботе по портфелям, торгующим данной бумагой на данном подключении) Если флаг не взведен, то оповещения будут приходить только в случае, если:

posrobot_pos>pos_lag|pos-robot\_pos|>pos\_lag$

# 5.5.1.9. Tgr notify

Если флаг взведен, то отправлять уведомления о несовпадении позиции робота и биржи в Telegram.

# 5.5.1.10. Pos leveling

Выставить заявку с заданными направлением, ценой и объёмом. Направление и объём по умолчанию задаются такими, чтобы выровнить позицию биржи относительно позиции робота (эта заявка не изменяет позиции по бумагам в портфелях робота).

# 5.5.2. Параметры позиций по валютам

Параметры позиций по валютам отображаются отдельно для каждого подключения во вкладке Positions/Balance данного подключения и представляют собой таблицу. Строчки таблицы это валюты/криптовалюты, входящие в состав инструментов, торгуемых с помощью данного подключения и используемых в портфелях робота. Если через данное транзакционное подключение доступны несколько клиентских кодов, то строчка будет соответствовать паре (код клиента, валюта). Валюты с нулевым балансом могут быть скрыты (для этого нужно снять флаг Show zero poses). Далее приведены описания столбцов таблицы, предполагается что параметры являются редактируемыми, если прямо не указано иное.

# 5.5.2.1. Currency

Краткое наименование валюты/криптовалюты.

# 5.5.2.2. Limit

Лимит по валюте.

# 5.6. Список проверок параметров портфеля при создании/редактировании портфеля/бумаги

Если условие в списке ниже ИСТИННО, то такие настройки НЕ валидны:

# 5.6.1. Для портфеля

  1. Параметр Quote выключен, а Simply first включен;

  2. Сборка робота без поддержки стаканов и включен параметр Simply first;

  3. Сборка робота без поддержки стаканов и значение параметра Type price = bid/offer;

  4. Выключен параметр Quote и включен Only maker;

  5. Значение параметра Max not hedged > 1 и позиция по бумаге на бирже стоит отдельно на покупку и на продажу;

  6. Значения параметров v_min/v_max имеют разные знаки (или одно из них = 0) и позиция по бумаге на бирже стоит отдельно на покупку и на продажу;

# 5.6.2. Для инструмента

  1. Для бумаг OKEX-SPOT: Сlient code не оканчивается на "/cash", "/cross_base", "/cross_quote", "/isolated" и не должен быть “virtual”;

  2. Для бумаг OKEX-FUT: Сlient code не оканчивается на "/cross" или "/isolated" и не должен быть “virtual”;

  3. Для первой ноги Count type = constant и Count = 0;

  4. Для первой ноги On_by = Sell;

  5. Выбрано пустое значение для Сlient code и Count не 0;

# 5.6.3. Запрещается менять следующие параметры портфеля, когда он торгует или есть активные заявки

  1. Is first

  2. Client code

  3. On_by

  4. Leverage

  5. Curpos

  6. Count

  7. Count formula

  8. TP

  9. Ratio

  10. Ratio type

  11. Ratio sign

  12. Ratio buy formula

  13. Ratio sell formula

  14. Custom trade

  15. Extra formulas

  16. Trade formula

  17. Extra field#1

  18. Extra field#2

  19. Type trade

  20. Type price

  21. Type