Пакет расширений для Автоторговли

Пакет состоит из следующих дополнений:


  • Стратегия Spread
  • EMA фильтр и EMA стратегия
  • Доп. параметры в стратегии MoonShot для настройки повторных сработок
  • Набор параметров для управления триггерами и сессиями

Пакет расширений для Автоторговли активируется дополнительно за кредиты.

Чтобы открыть меню кредитов, нажмите надпись PRO Version в нижнем правом углу, или надпись "MoonCredits" в "Настройках - вкладка ПРО" (доступно только если у вас есть кредиты). Без активации функции из этого пакета работают только в режиме Эмулятора, включенного через Меню бота.

Стратегия Spread

Под спредом понимаем активные торги в зоне, определяемой временем и размахом цены.

Пример работы стратегии Spread на листинге монеты DODO

Параметры стратегии:

  

TimeInterval: Ширина зоны по времени, сек, в которой производится расчет.

TradesDensity: Плотность трейдов по времени, проценты. Для вычисления интервал делится на маленькие кусочки по 200мс и считается отношение кусочков, где есть хотя бы 2 трейда с разной ценой, и “пустых” кусочков (без трейдов). Т.е. 100% плотность - значит трейды с разными ценами есть как минимум каждые 200мс.

TradesDensityPrev: Плотность трейдов перед детектом, которая вычисляется перед детектом за предыдущий интервал времени, так же равному значению TimeInterval. Позволяет отсечь монеты, которые изначально лежали. Для пампов ставить этот параметр в 0! (ибо нужны как раз лежачие монеты).

TradesCountMin: Каждые 200мс на всем интервале детекта есть как минимум столько трейдов. По умолчанию 0; этот параметр сильно зажмет детекты, будет брать только высокую плотность трейдов.

PriceIntervals: На сколько равных интервалов делить TimeInterval для вычисления размаха цены. Общий интервал делится на PriceIntervals кусков, на каждом куске считается макс. и мин. цена и дельта (разница) между ними.

PriceIntervalShift: целое число от 0 до 5. Отсекает детекты единичных стрел.

 

PriceSpread: Спред (в процентах) для детекта. Детект происходит, если на каждом куске из пункта выше размах цены был больше чем PriceSpread.

IntervalsForBuySpread: Сколько последних отрезков из PriceIntervals брать для расчета мин. и макс. цен в спреде. Если 0 , то считается на всем TimeInterval.

BuyPriceInSpread: на сколько процентов в спреде ставить покупку. Если лонг - то этот процент отсчитывается от мин. цены вверх, если шорт - то от макс. цены вниз. Примеры: 0% лонг поставится на мин. цену в спреде; 50% поставится посредине: -100% шорт поставится выше на удвоенное расстояние спреда

Обратите внимание! Параметр BuyPrice из общего раздела BuyOrder так же влияет на цену покупки. BuyPriceInSpread в этом случае определяет “базовую цену”, от которой уже отсчитывается BuyPrice.

SellPriceInSpread: Аналогично BuyPriceInSpread, предопределенная цена продажи в зависимости от спреда. В отличие от BuyPriceInSpread, цена продажи берется как максимальная из SellPrice и цены продажи по спреду. Иначе говоря, если SellPrice меньше спреда (например SellPrice=0) - продажа ставится по спреду. Если больше - продажа ставится по SellPrice. (Также на цену продажи влияют модификаторы).

BuyOrderReduce: задает интервал (в мс) на котором считать средний объем торгов. Стратегия выставит ордер размером не больше, чем средний объем. По умолчанию 100 (мс). Как считается объем: суммируется объем всех сделок (покупки и продажи) на интервале TimeInterval и делится на BuyOrderReduce. Например, если TimeInterval = 5 сек (5000 мс), BuyOrderReduce = 100мс, объем за 5 сек был 10 000$, то средний объем за 100мс будет равен 10000/5000мс*100мс=200$. В этом случае стратегия поставит ордер не более 200$

Иначе говоря, смотрим какой же был средний объем за 100 (мс)/ 10мс/ 5мс, это и есть наш максимальный ордер какой выставит стратегия.

BuyOrderReduce=0 - параметр отключен

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

IOTA: [1] (40) Buy order reduced: 1000.00$ => 23.32$ (Vol: 23.32$)

В этом логе OrderSize в стратегии стоял 1000$, но средний объем торгов за 100мс составил всего 23$, поэтому стратегия выставила ордер на покупку размером 23$.

MinReducedSize: Если в результате применения BuyOrderReduce размер ордера получился меньше заданного значения (в USDT), то ордер не ставится (и детекта не будет соотв.). По умолчанию 0(не применяется).

SpreadRepeatIfProfit: Повторное выставление бай ордеров в течении 1 сек после детекта (не позже). Повторный ордер ставится, если текущая цена приблизилась к цене продажи больше, чем на SpreadRepeatIfProfit процентов. Если 0, повторные ордера не ставятся. Если 100, ставятся только после продажи селла (не более 5 повторных ордеров, внутреннее ограничение).

SpreadFlat: если YES, то бот будет пытаться определять спред в горизонтальном канале.

Spread_BV_SV_Time: интервал (в миллисек) для анализа. Если 0, эти параметры не учитываются.

Spread_BV_SV_Max: Отношение покупок к продажам не больше, чем это значение. Если 0, не учитываются.

Spread_BV_SV_Min: Отношение покупок к продажам не меньше, чем это значение.

Если в стратегии стоит шорт, то отношение переворачивается автоматически! (т.е. для шорта считается отношение продаж к покупкам).

Пример: Spread_BV_SV_Time = 1500 (полторы секунды)

За последние полторы сек. было бай трейдов на 500$ и селл трейдов на 1000$

Отношение bv/sv будет 500/1000 = 0.5 для лонга, 1000/500 = 2 для шорта.


SpreadPolarityMin: Минимальный диапазон полярности спреда. Полярность - это направление, численная мера направления может быть от +100 (строго вверх) до -100 (строго вниз).

SpreadPolarityMax: Максимальный диапазон полярности спреда.

Пример

TimeInterval =5 сек. 

TradesDensity=100

PriceIntervals = 5 

PriceSpread = 0.3%

IntervalsForBuySpread=2

BuyPriceInSpread=5

SellPriceInSpread=100

BuyOrderReduce = 100

Это значит, что последние 5 сек. каждую секунду имело место колебание цены на 0.3% (или выше). Для расчета бай и селл ордера берем последние 2 интервала (IntervalsForBuySpread=2), устанавливаем бай ордер +5% от минимального значения, а селл ордер на максимум (100%).При этом, если приведенный объем за 100мс меньше, чем OrderSize стратегии, то будет выставлен ордер, равный объему

Внимание! Стратегия Спреда связана с очень высокими рисками. Используйте ее без автопокупки, как детект, чтобы понять как она работает. Только после полного понимания настраивайте на реальную торговлю.

Замечания:

  1. ОЧЕНЬ важно использовать фильтры по Latency в стратегии, поскольку значения цен для детекта спреда берутся по трейдам (крестикам на графике). Если цены поступают с задержкой, то детект может сработать, когда цена уже улетела!
  2. При частичном заполнении buy ордера стратегия снимает его и весь исполненный объем выставляет на продажу, аналогично МунШотам. 
  3. Пересчет условий детекта производится раз в полсекунды.
  4. Стратегия учитывает модификаторы детекта (модификатор влияет на PriceSpread).
  5. Рекомендуется эту стратегию использовать с EMA фильтром, коротким (например EMA(30,2) для определения роста или падения и выставления высокого селла на шорт или лонг соответственно (как настраивать EMA читайте ниже).
  6. Как смотреть параметры детекта на графике: Настройки - Специальные, включить галку Extended Debug.
  7. Если у вас включено несколько стратегий "Спред", то детект и ордер будет по каждой из них (в отличие от остальных типов стратегий, где детект только по первой подходящей в списке).

Обозначения:

TD: плотность трейдов

dP: размах цены на всем интервале TimeInterval 

Vol: приведенный объем

Spread: фактический спред, в процентах

N: число отрезков, на которых выявлен спред (последние два на графике появляются только в момент детекта)

Так же эти значения есть в строке с детектом в отчете: 

EMA фильтр и стратегия

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

В параметре в строку пишется набор функций для сравнения в виде

EMA(X,Y) > A AND EMA(p,q) < B AND … любое кол-во формул, разделенное словами AND или OR (порядок применения - алгебраический: сначала между собой все AND, потом OR Пример: A AND B OR C AND D означает одно из двух: (A AND B) или (C AND D))

Типы формул:

EMA(X,Y) > или < A: Сравнение цен за EMA X секунд, минут или часов назад и EMA Y секунд, минут или часов назад (допустимые значения X=1s...300s или 2m...90m или 1h...41h, Y=1s...300s или 2m...90m или 1h...41h).

MAX(X,Y) > или < A: Сравнение максимальной цены за X минут или часов назад и EMA Y секунд, минут или часов назад. Допустимые значения X=5m...90m или 1h...41h, Y=1s...300s или 2m...90m или 1h...41h. Пояснения к расчету максимумов и минимумов смотрите ниже "Методика расчета".

MIN(X,Y) > или < A: Сравнение минимальной цены за X минут или часов назад и EMA Y секунд, минут или часов назад. Допустимые значения X=5m...90m или 1h...41h, Y=1s...300s или 2m...90m или 1h...41h. Пояснения к расчету максимумов и минимумов смотрите ниже "Методика расчета".

BTC(X, Y) > или < A: Сравнение цен BTC/USDT за EMA X секунд, минут или часов назад и EMA Y секунд, минут или часов назад (допустимые значения X=1s...300s или 2m...90m или 1h...41h, Y=1s...300s или 2m...90m или 1h...41h).

MAvg(X,Y) > или < A: Сравнение средних цен всего рынка(маркета) за EMA X секунд, минут или часов назад и EMA Y секунд, минут или часов назад (допустимые значения X=1s...300s или 2m...90m или 1h...41h, Y=1s...300s или 2m...90m или 1h...41h).

На расчет средней цены рынка(маркета) влияют 2 настройки:

1) Настройки - Основные, "ЧС исключить из дельт" - если галка стоит, в средней цене рынка исключены маркеты ЧС

2) Настройки - Специальные, "Weighted mAvg" - если галка стоит, то цена маркета в среднем берется с весом, равным суточному объему

Иначе говоря, чем меньше сут. объем на монете, тем меньше она влияет на среднее.

Расчет можно сравнить с капитализацией: это сумма (цена * объем)


Каждая формула (X, Y) > или < A означает:

1) X,Y - время: число, после которого есть буква s или m или h (секунды, минуты, часы соотв.) или нет буквы (тогда число считается секундами)

2) Знак больше или меньше

3) A - с чем сравнивать (в процентах)

Принцип расчета: средняя цена Y секунд назад сравнивается со средней ценой X сек. назад:  

Цена(Y) / Цена(X) > 1 + A / 100

Иначе говоря, Цена(Y) больше чем Цена(X) на A процентов (или меньше, если в формуле знак <)

Методика расчета и ограничения:

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

  1. Набор секундных средних от текущей цены (1 сек) до 300 сек. назад. Считаются как классич. EMA (Pслед = (Pпред * N + Pтекущ) ./ (N + 1) по средним ценам за каждую секунду
  2. Минутные средние от 2 минут назад до 90 минут назад. Считаются как просто средняя цена за минуту
  3. Часовые средние от 1 часа назад до примерно 41 часов назад (ограничение биржи на свечи по которым считаются часовые средние) (считается как средняя цена за час по 5м свечам)Исходя из этого, параметры X,Y в формуле EMA могут быть: 1s..300s или 2m..90m или 1h..41h (конкретные диапазоны параметров X и Y смотрите выше рядом со своим параметром MIN MAX EMA).
  4. Если Y ставить 1s то будет сравнение с текущей ценой, при указании секунд s можно не ставить.
  5. Пересчет часовых max/min производится раз в 5 минут, по мере появления новой 5м свечи. Чтобы записи Max(1h)/Min(1h) и Max(60m)/Min(60m) не дублировали друг друга, часовые идут сразу от 1 часа назад. К примеру для Max(1h,1) максимальное значение берется по 5м свечам от 60 по 120 минуту назад.
  6. Пересчет минутных max/min идет через каждый тик (1 тик=2 сек), т.е. с задержкой от 2 до 4 сек. При этом последние 60 секунд не включены в расчет уровней минутных max/min.

Таким образом, резкий рост на последней минуте(для минутных интервалов) и за последние 60 минут (для часовых интервалов) не учитывается в определении уровней max/min, а следовательно в моменте значение max может быть больше нуля, а min меньше нуля. Так сделано, чтобы можно было формулой задать перехай/перелоу (т.е. записать условие, что текущая цена стала больше максимума либо меньше минимума за последние N минут/часов).

Вывести эти цены на график можно кнопкой в панели управления, см. рис ниже,

Обратите внимание! Это не индикатор, а всего лишь наглядное представление о том, как считается новый EMA фильтр. По причинам, изложенным выше, синяя линия средней цены может иметь разрывы - это места, где 300s заканчивается, где начинается 2m и заканчивается 90m

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

Примеры что писать в поле CustomEMA:

1) EMA(15m,3s)< -1 and EMA(5s,1s) > 0.1

EMA(15m,3s)< -1 = означает, что было падение: цена 3 сек. назад на -1% меньше цены 15 минут назад.

EMA(5s,1s) > 0.1 = означает, что был рост: цена текущая больше на 0.1% чем цена 5 сек назад

Вместе эти условия означают, что детект произойдет после падения, за которым следует рост

2) Max(1h, 1s) > 0.1 = означает перехай: текущая цена стала больше, чем часовой максимум

3) Max(1h, 1s) < -5 = означает падение на 5% от часового максимума

4) Max(1h, 1s) < -5 AND Min(1h, 1s) < 0.1 AND Min(1h, 1s) > -0.1 = означает падение на 5% от хая, при этом находимся возле дна

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

Замечания:

  1. Важно использовать фильтры по Latency в стратегии, поскольку значения цен EMA зависят от цен трейдов; если цены поступают с задержкой, то расчет EMA будет неточен.
  2. Линии EMA сохраняются в отчете на момент детекта, а для муншотов - на момент срабатывания бай ордера (если в стратегии был включен EMA фильтр).

Дополнительные параметры в стратегии MoonShot

В дополнение к основным параметрам добавляются несколько новых, расширяющих алгоритм работы MoonShot, теперь стратегия может выставить повторно шот на той же монете не дожидаясь продажи первого sell ордера :

MShotRepeatAfterBuy: Ставить повторный МунШот после покупки и выставления селла

MShotRepeatIfProfit: %, условие на текущую цену для повторного шота: цена должна быть выше чем цена покупки на этот процент

MShotRepeatWait: время в сек, в течении которого может выставиться повторный шот при выполнении условия MShotRepeatIfProfit

MShotRepeatDelay: время в сек, ожидание перед выставлением повторного шота

Повторный шот ставится только если текущая цена стала больше чем цена покупки на MShotRepeatIfProfit процентов в течении MShotRepeatWait секунд.

Значения по умолчанию MShotRepeatIfProfit = 0, MShotRepeatWait = 5 означают:

"Выставление повторного шота если текущая цена стала больше цены покупки в течении 5 сек после покупки"

Параметры "ТРИГГЕРЫ" в стратегиях: активация одной стратегии запускает другие.

Триггеры работают только с активированным модулем «Пакет расширений для Автоторговли (AutoTrading Extention)» или с включенным режимом в Меню – Эмулятор.

Параметры для ведущих (Master) стратегий:

TriggerKey: от 0 до 100, если 0, то параметр не используется.

Ключ активации ведомых (Slave) стратегий по триггеру. Триггер включается или на том маркете, на котором был сигнал, или действует на всех маркетах (согласно настройке параметра TriggerAllMarkets).

Пример: Есть Master стратегия с ключом 5 (TriggerKey = 5). При активации этой стратегии (условия активации для каждого типа стратегий описаны ниже, в разделе "Особенности работы триггеров") в ключ 5 прописывается текущее время. После этого все другие Slave стратегии, где есть параметр TriggerByKey = 5 активируются и начинают работать в течении времени (в сек.), которое указано в активированной Slave стратегии в параметре TriggerSeconds или в течении времени, которое указано после знака равно в параметре КЛЮЧ=ВРЕМЯ (см. описание ниже).

TriggerKeyBuy: ключ триггера, от 0 до 100, который включается при исполнении бай ордера. В Муншотах убран параметр TriggerKey, доступен только TriggerKeyBuy.

TriggerKeyProfit, TriggerKeyLoss: от 0 до 100, если 0, то параметр не используется.

Позволяют активировать до 100 ключей в зависимости от закрытия сделки в профит или убыток соответственно:

а) если сделка закрылась с профитом, то активируется ключ из параметра TriggerKeyProfit;

б) если сделка закрылась с убытком, то активируется ключ из параметра TriggerKeyLoss.

ActiveTrigger: YES / NO (по умолчанию NO)

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

ClearTriggersBelow: при сигнале на ключе N очистить все ключи с номерами меньше, чем N

ClearTriggersAbove: при сигнале на ключе N очистить все ключи с номерами больше, чем N

ClearTriggerKeys: Список ключей через пробел, при поступлении сигнала триггера очищать все заданные ключи.

TriggerAllMarkets: YES / NO (по умолчанию NO)

Если YES, то триггер действует сразу на все маркеты.

Если NO, то действует только на маркет, где был сигнал.

Параметры для ведомых (Slave) стратегий:

TriggerByKey: строка с номерами ключей через пробел, если строка пустая, то параметр не используется.

По какому ключу от Master стратегии должен быть сигнал, чтобы запустилась Slave стратегия. Можно писать несколько ключей через пробел или указывать собственное время (в сек.) в ключе в формате КЛЮЧ=ВРЕМЯ.

Пример: TriggerByKey 1 2 3 4=100 5 6 7=300 означает, что стратегия будет запущена по

ключам 1, 2, 3, 4, 5, 6, 7. При этом время для ключей:

а) 1, 2, 3, 5, 6 будет задаваться согласно значению в параметре TriggerSeconds

б) 4=100 будет задаваться свое собственное, указанное после знака равно (100 сек.)

в) 7=300 будет задаваться свое собственное, указанное после знака равно (300 сек.)

TriggerSeconds: время в секундах, если 0, то параметр не используется.

На сколько секунд запустить ведомую Slave стратегию после появления сигнала триггера и активации ключей, которые были перечислены в параметре TriggerByKey без знака равно.

Пример: если сработает Master стратегия и активирует ключ 1 из своего параметра TriggerKey=1, то любая Slave стратегия, которая содержит ключ 1 в параметре TriggerByKey=1 запустится на время, указанное в Slave стратегии в параметре TriggerSeconds=60. В этом случае стратегия Slave отработает 60 секунд, дезактивируется через это время и будет не активна до поступления следующего срабатывания по ключу 1.

TriggerKeysBL: строка с номерами ключей через пробел, если строка пустая, то параметр не используется.

По какому ключу от Master стратегии должен быть сигнал, чтобы остановить Slave стратегию, путем занесения монеты в черный список (BlackList). Можно писать несколько ключей через пробел или указывать собственное время (в сек.) в ключе в формате КЛЮЧ=ВРЕМЯ.

Пример: TriggerKeyBL 1 2 3 4=100 5 6 7=300 означает, что стратегия будет остановлена по ключам 1, 2, 3, 4, 5, 6, 7. При этом время для ключей:

а) 1, 2, 3, 5, 6 будет задаваться согласно значению в параметре TriggerSecondsBL

б) 4=100 будет задаваться свое собственное, указанное после знака равно (100 сек.)

в) 7=300 будет задаваться свое собственное, указанное после знака равно (300 сек.)

TriggerSecondsBL: время в секундах, если 0, то параметр не используется.

Если на одном из ключей TriggerKeysBL был сигнал на монете, то стратегия не будет работать на монете TriggerSecondsBL секунд.

SellByTriggerBL: задается строкой ключей (через пробел) (ключи должны быть подмножеством TriggerKeysBL; т.е чтобы сработала продажа, монета должна попасть в ЧС триггеров ).

CancelByTriggerBL: отменять ордера, если сработал триггер ЧС (аналог CheckAfterBuy применительно к триггерам).

Особенности работы триггеров:

- стратегия Manual активирует ключ:

1) по факту выставления Buy ордера из параметра TriggerKey, если включена галочка

ActiveTrigger=YES

2) по факту закрытия сделки из параметров TriggerKeyProfit и TriggerKeyLoss, при этом:

а) если сделка закрыта в профит, то ключ активируется из параметра TriggerKeyProfit (например, при TriggerKeyProfit=1, активируется ключ 1)

б) если сделка закрыта в убыток, то ключ активируется из параметра TriggerKeyLoss (например, при TriggerKeyLoss=2, активируется ключ 2)

в) если нужна активация при любом закрытии сделки в профит или убыток, то тогда следует в параметры TriggerKeyProfit и TriggerKeyLoss, прописывать одинаковые ключи. Например, TriggerKeyProfit=3 и TriggerKeyLoss=3, в этом случае, при любом варианте профит это или убыток активируется ключ 3.

Если в параметрах будут установлены нули (TriggerKeyProfit=0 и TriggerKeyLoss=0), то стратегия Manual не будет активировать ключи по факту закрытия сделок.

- остальные стратегии активируют ключи из параметра TriggerKey по факту сигнала (даже без автопокупки). При этом они тоже могут активировать ключи из параметра TriggerKey при выставлении Buy ордера, если включена галочка ActiveTrigger=YES.

Набор параметров для управления сессиями

Описание общей механики:

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

Общие замечания:

  • Настройки сессии учитываются раздельно по маркетам и стратегиям. Каждая стратегия имеет свое уникальное значение сессии на каждом маркете.
  • Сессия всегда учитывается в USDT, в т.ч. на BTC ботах.
  • Изменение сессии происходит в момент закрытия (исполнения селл ордеров).
  • Ручной сброс общей сессии через меню также сбрасывает новые сессии по маркетам.
  • Посмотреть значения сессий на графике можно, включив “фильтры на графике”. При этом будут показаны только те стратегии, где IgnoreSession = NO.
  • Продажа по выходу из фильтров не действует по настройкам сессий (т.е. SellByFilters к сессиям не имеет отношения).
  • Настройки сессий работают вне зависимости от IgnoreFilters. Т.е. даже если вы включили игнор фильтров, но на монете стоит пенальти сессий, ордер не будет выставлен.
  • Сессии в объединенном ордере учитываются во всех стратегиях, которые вошли в объединение (т.е. все стратегии, которые сработали на покупку, и стратегия, по которой идет продажа, изменят сессию после закрытия объединенного ордера на величину суммарного профита).
  • Информация об изменении фактического размера ордера (согласно настройкам SessionReduceOrder, SessionIncreaseOrder) есть в отчете в комментарии (если ордера не объединялись)

Описание параметров:

IgnoreSession: YES \ NO - если YES, игнорировать все настройки сессий (по умолчанию).

SessionLevelsUSDT: (YES\NO) если YES, то SessionStratMax и SessionStratMin задаются в USDT (по умолчанию YES), если NO, то SessionStratMax и SessionStratMin задаются в процентах от OrderSize.

SessionStratMax: Порог профита (в USDT), например 200$. Когда стратегия наберет +200$, увеличится счетчик плюсовых сессий, сбросится счетчик минусовых сессий, текущее значение профита обнулится, стратегия продолжит работать с увеличенным ордером. 

SessionStratIncreaseMax: Процент увеличения порога профита SessionStratMax. Значение порога будет автоматически увеличиваться с каждой плюсовой сессией, начиная с SessionPlusCount. Если SessionStratIncreaseMax = 0 или SessionPlusCount = 0, то игнорируется.

Например, порог 200$, процент увеличения = 20%, SessionPlusCount = 3. Тогда после третьей плюсовой сессии порог профита будет увеличен на 20% и равен 240$.

Порог увеличивается линейно, по формуле: SessionStratMax * ( 1 + (Counter - SessionPlusCount + 1) * SessionStratIncreaseMax / 100).

Например, SessionStratIncreaseMax = +20%, SessionPlusCount = 2, и идет 5-я положительная сессия, тогда порог увеличится на +200+20% * (5 - 2 + 1 = 4)= 200 + 80% = 360$.

SessionStratMin: Порог убытков (в USDT) отрицательное значение, например -100$. Когда стратегия наберет -100$, увеличится счетчик минусовых сессий, сбросится счетчик плюсовых сессий, текущее значение профита обнулится, стратегия будет остановлена на время пенальти SessionPenaltyTime.

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

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

Например, процент уменьшения порога = 30%, SessionMinusCount = 3, SessionStratMin = -100$. Если поймали третий раз подряд минусовую сессию, порог убытков уменьшится до SessionStratMin =-100 / 30%=-77$.

Уменьшение порога считается по формуле: SessionStratMin / ( 1 + (MinusCounter - SessionMinusCount + 1) * SessionStratReduceMin / 100);

Например при SessionStratReduceMin = 30% и базовом SessionStratMin = -100$, после четвертой минусовой сессии порог станет 100 / (1 + 2 * 0.3) = 100 / 1.6 = 62.5

Если SessionStratReduceMin = 0, то игнорировать снижение.

Текущие фактические пороги можно посмотреть на графике при включенных “фильтрах на графике”, значения sMin и sMax.

SessionResetOnMinus: YES \ NO. - если YES, то сбрасывать текущий профит сессии на 0 после минусовой сделки (если профит в текущей сессии положительный и убыток минусовой сделки больше SessionStratMin/10).

SessionPenaltyTime: Время в сек, в течении которого стратегия не работает после минусовой сессии.

SessionPlusCount: Счетчик плюсовых сессий подряд, начиная с которого увеличивать ордер (согласно параметру SessionIncreaseOrder) и порог сессии (согласно параметру SessionStratIncreaseMax). Если была минусовая сессия, счетчик сбрасывается до нуля.

SessionMinusCount: Счетчик убыточных сессий подряд, начиная с которого уменьшать ордер (согласно параметру SessionReduceOrder) и порог сессии (согласно параметру SessionStratReduceMin). Если была плюсовая сессия, счетчик сбрасывается до нуля.

SessionIncreaseOrder: Процент увеличения ордера с ростом количества плюсовых сессий, начиная с сессии номер SessionPlusCount (положительное значение). Если SessionPlusCount = 0 или SessionIncreaseOrder = 0 , то не применяется. 

Например, SessionPlusCount = 5, SessionIncreaseOrder = 10. Тогда начиная с пятой плюсовой сессии ордер будет увеличен на 10%.

Размер ордера увеличивается по экспоненте: на 1 шаге +10% от 100, на втором +10% от 110, и тд. Посмотреть фактическое увеличение ордера можно в логе по записи: LINK: [1] (28) OrderSize increased by 33.10%: 100.00$ => 133.10$  

SessionIncreaseOrderMax: Предел максимального увеличения ордера в процентах от исходного OrderSize (умолчанию 500% = в 5 раз)

SessionReduceOrder: Процент уменьшения ордера с ростом количества убыточных сессий, начиная с сессии номер SessionMinusCount (положительное значение). Размер ордера уменьшается по экспоненте, делением на процент.

На 1 шаге новый ордер = 100 / (1 + 20%) = 83.3$. На втором шаге новый ордер = 83.3 / (1 + 20%) = 69.4$, и тд. Посмотреть фактическое увеличение ордера можно в логе по записи: LINK: [1] (28) OrderSize reduced by 20.0%: 100.00$ => 83.3$  

SessionReduceOrderMin: Предел максимального уменьшение ордера в процентах от исходного OrderSize (умолчанию 500% = в 5 раз)

SessionResetTime: Интервал (в сек.), через который производится авто-сброс счетчиков сессии. Раз в SessionResetTime сек. счетчики плюсовых и минусовых сессий уменьшаются на 1, а значение профита уменьшается на 10%. (т.е. Если стратегия не работает на монете, то со временем сессия на ней обнуляется).