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

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

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

#
#
7.1.1. Name

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

#
#
7.1.2. re_sell/re_buy

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

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

#
#
7.1.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) возможно только после того, как были сделки по главной бумаге по алгоритму (не по кликеру). Пока сделок не было, нет цен от которых откладывать тейк.

#
#
7.1.4. Type trade

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

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

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

#
#
7.1.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.

#
#
7.1.6. Quote

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

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

#
#
7.1.7. Order ID

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

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

#
#
7.1.8. Hedge (sec)

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

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

#
#
7.1.9. Only maker

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

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

#
#
7.1.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 (в противном случае заявка просто не смогла бы выставиться и "спамила" бы биржу).

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

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

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

Неочевидный момент:
Всё вышеописанное происходит только если расчетные цены Price_s/Price_b попадают в широкий спред или на противоположную сторону стакана, если же эти цены попадают в "свою" сторону стакана (покупка для покупки, продажа для продажи), то параметр Simply first никакого влияния на цены не оказывает.

Кроме того, если выполнено условие по параметру Threshold, то пересчёт цен по Simply first так же проведен не будет.

#
#
7.1.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, то "-").

#
#
7.1.12. Volumes

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

#
#
7.1.12.1. v_min/v_max

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

#
#
7.1.12.2. v_in_left/v_in_right

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

#
#
7.1.12.3. v_out_left/v_out_right

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

#
#
7.1.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 (робот не ставит меньше этих значений).

#
#
7.1.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, то позицию по портфелю округляем по модулю вниз, иначе вверх.

#
#
7.1.13. Delta

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

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

#
#
7.1.14. First delta

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

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

#
#
7.1.15. Market volume

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

Пример:

Важно! Для отображения на сайте используется lot_size.

#
#
7.1.16. Price check

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

#
#
7.1.17. Max not hedged

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

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

#
#
7.1.18. Overlay

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

#
#
7.1.19. Lim_sell/Lim_buy

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

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

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

#
#
7.1.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, переставление всегда заменяется на отдельные снятие и выставление завки.

#
#
7.1.21. Trading signal shift

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

#
#
7.1.21.1. K

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

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

#
#
7.1.21.2. ТР

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

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

#
#
7.1.21.3. K1

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

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

#
#
7.1.21.4. K2

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

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

#
#
7.1.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 сек, следовательно условие выполнено, сдвиг выполняется.

#
#
7.1.23. Percent

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

#
#
7.1.24. Always timer

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

#
#
7.1.25. Pos

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

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

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

#
#
7.1.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, то управление параметрами портфеля, описанными выше, переходит к расписанию, в противном случае (если текущее время не попадает ни в один из периодов) параметры портфеля, описанные выше, автоматически выключаются.

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

Расписание торговых дней недели можно также установить сразу для нескольких портфелей, выделив их в виджете Portfolios и выбрав пункт TradingDays в меню Actions.

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

#
#
7.1.27. To0

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

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

#
#
7.1.28. Opened

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

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

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

#
#
7.1.29. Commision sum

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

#
#
7.1.30. Decimals

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

#
#
7.1.31. Custom trade

При использовании данного флага отключается стандартный расчёт цены раздвижки, вместо него для расчёта цены раздвижки, отображаемой в виджетах Finres history и Finres for today в поле Price будет использоваться результат вычисления формулы, написанной в поле Trade formula. Поэтому убедитесь, что при установке данного флага Вы так же задали корректную формулу в поле Trade formula.

#
#
7.1.32. Trade formula

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

Важно! Значения, получаемые с помощью этой формулы, используются только в поле Price виджетов Finres history и Finres for today, и не используются нигде более. Подсчёт финансового результата в поле Fin res виджета Portfolios table осуществляется непосредственно по ценам сделок и от результата работы данной формулы не зависит.

Неочевидный момент! Код формулы, заданный по умолчанию, возвращает нулевое значение, использовать его в боевой торговле не целесообразно.

#
#
7.1.33. Extra formulas

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

#
#
7.1.34. Extra field#1 и Extra field#2

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

#
#
7.1.35. Disable portfolio

Полностью выключить портфель из всех расчетов и торговли, не удаляя его. Этот флаг не является заменой флагам re_sell/re_buy. При использовании флага disabled портфель перестает получать как рыночную информацию, так и обновления по собственным выставленным заявкам, если таковые имеются. Поэтому перед использованием данного флага следует убедиться, что торговля по портфелю выключена, и активные заявки по обеим ногам портфеля отсутствуют.

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

#
#
7.1.36. Sell/Buy clicker

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

#
#
7.1.37. To market

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

#
#
7.1.38. Place order

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

#
#
7.1.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

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

#
#
7.1.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:

#
#
7.1.41. Sell/Buy status

Статус заявки на продажу/покупку по Is first инструменту, выставленной для котирования в режиме Quote или при выполнении условия на Buy и Lim_Buy для заявки на покупку и Sell и Lim_Sell для заявки на продажу. Таким образом, поля Sell status и Buy status отображают статусы двух конкретных заявок. Статусы заявок, выставленных кликером, в данных полях не отображаются.

Существуют следующие статусы:

  • free - заявка отсутствует
  • adding - заявка выставляется (на биржу отправлен приказ на выставлление заявки, ответ еще не получен)
  • moving - заявка перемещается (на биржу отправлен приказ на изменение заявки, ответ еще не получен)
  • deleting/first_deleting/sl_deleting - заявка снимается (на биржу отправлен приказ на снятие заявки, ответ еще не получен)
  • running - заявка "висит" на бирже (ответ об успешном выставлениии заявки получен, никаких других неотвеченных приказов по данной заявке нет)

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

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

#
#
7.1.42. Return first

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

Важно! Для отображения на сайте используется lot_size.

#
#
7.1.43. Fin res

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

Finres=Opened+Commissionsum+isecsCurposi×lotSizei×Multi×{secBidi,ifCurposi>0secOfferi,ifCurposi<0,Fin\enspace res=Opened+Commission\enspace sum+\sum_{i\in secs}Curpos_i \times lotSize_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 - лучшая цена на продажу инструмента портфеля;
lotSizei - множитель для перевода целых объемов в дробные;
Curposi - текущая позиция инструмента портфеля;
Mult - Fin res multiplier инструмента портфеля;
secs - список инструментов портфеля.

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

#
#
7.1.44. Fin res wo C

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

Finres=Opened+isecsCurposi×lotSizei×Multi×{secBidi,ifCurposi>0secOfferi,ifCurposi<0,Fin\enspace res=Opened+\sum_{i\in secs}Curpos_i \times lotSize_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 - лучшая цена на продажу инструмента портфеля;
lotSizei - множитель для перевода целых объемов в дробные;
Curposi - текущая позиция инструмента портфеля;
Multi - Fin res multiplier инструмента портфеля;
secs - список инструментов портфеля.

#
#
7.1.45. Comment

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

#
#
7.1.46. Color

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

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

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

#
#
7.2.1. SecKey

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

#
#
7.2.2. SecBoard

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

#
#
7.2.3. SecCode

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

#
#
7.2.4. Exchange

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

#
#
7.2.5. Curpos

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

Важно! Для отображения на сайте используется lot_size.

#
#
7.2.6. Count type

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

#
#
7.2.7. Count

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

Важно! Для отображения на сайте используется lot_size.

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

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

#
#
7.2.8. Count formula

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

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

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

#
#
7.2.9. On buy

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

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

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

#
#
7.2.10. Is first

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

#
#
7.2.11. k

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

#
#
7.2.12. k_sl

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

#
#
7.2.13. SLE

Включить/выключить функцию переставления по стоп-лоссу. Заявки, переставленные по стоп-лоссу, в дальнейшем переставляются по определенному алгоритму.

#
#
7.2.14. SL

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

#
#
7.2.15. TE

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

#
#
7.2.16. Timer

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

#
#
7.2.17. Percent of quantity

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

#
#
7.2.18. Ratio sign

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

#
#
7.2.19. Ratio

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

#
#
7.2.20. Fin res multiplier

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

#
#
7.2.21. Commission type и Commission

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

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

#
#
7.2.22. Client code

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

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

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

#
#
7.2.23. MM

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

#
#
7.2.24. TP

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

#
#
7.2.25. Ratio type

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

#
#
7.2.26. Ratio buy formula

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

#
#
7.2.27. Ratio sell formula

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

#
#
7.2.28. FUT move limits

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

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 означает новое значение параметра.

Отметим, что при взведенном флаге FUT move limits, автосдвиг при каждой смене дня сработает в том числе при выключенных re_sell, re_buy.

Обратите внимание, что автосдвиг срабатывает, при соблюдении двух условий: 1.⁠ ⁠Текущий день отличается от дня, в который был произведен предыдущий сдвиг. (т.е. несколько раз за один календарный день автоматическая подвижка лимитов не сработает) 2.⁠ ⁠Обе бумаги торгуются, имеется ввиду статус на Бирже. Статус фьючерса "торгуется", статус акции "торгуется", если начала сессий у фьючерса и акции не совпадают, то автосдвиг сработает только тогда, когда обе бумаги будут торговаться.

#
#
7.2.29. SPOT move limits

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

#
#
7.2.30. Depth OB

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

#
#
7.2.31. Calc price OB

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

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

#
#
7.2.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.

#
#
7.2.33. Level to0

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

#
#
7.2.34. Level close

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

#
#
7.2.35. Leverage

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

#
#
7.2.36. Decimals

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

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

#
#
7.2.37. Max trans time

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

#
#
7.2.38. Ban period

Период в секундах, на протяжении которого робот не будет выставлять заявки по первой ноге портфеля. Используется в паре с Max trans time.

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

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

#
#
7.3.1. FinRes fall

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

#
#
7.3.2. Lim_Sell change и Lim_Buy change

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

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

#
#
7.3.3. Severe sell change и Severe buy change

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

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

#
#
7.3.4. Too much running orders

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

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

#
#
7.3.5. Too much not hedged

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

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

#
#
7.3.6. Severe pos change

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

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

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

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

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

#
#
7.4.1.1. SecKey

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

#
#
7.4.1.2. SecCode

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

#
#
7.4.1.3. Pos

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

#
#
7.4.1.4. Robot pos

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

#
#
7.4.1.5. Mark price

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

#
#
7.4.1.6. Liquidation price

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

#
#
7.4.1.7. Pos lag

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

#
#
7.4.1.8. Check equality

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

posrobot_pospos_lagpos-robot\_pos\neq pos\_lag

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

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

#
#
7.4.1.9. Tgr notify

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

#
#
7.4.1.10. Pos leveling

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

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

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

#
#
7.4.2.1. Currency

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

#
#
7.4.2.2. Limit

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

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

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

#
#
7.5.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) и позиция по бумаге на бирже стоит отдельно на покупку и на продажу;

#
#
7.5.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;

#
#
7.5.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