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

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

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

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

Стратегия Spread

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

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

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

  

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

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

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

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

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

       

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$.

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 для шорта.

Пример

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

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

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

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

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

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

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

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

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

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

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

EMA(X,Y) > A AND EMA(p,q) < B AND …. (любое кол-во формул , разделенное словом AND)

Каждая формула EMA(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 часа назад до примерно 42 часов назад (ограничение биржи на свечи по которым считаются часовые средние) (считается как средняя цена по 5м свечам)Исходя из этого, параметры X,Y в формуле EMA могут быть: 1..300 или 2m..90m или 1h..42h

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

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

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

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

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

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

EMA(5,1) > 0.1 означает, что был рост: цена текущая больше на 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 сек после покупки"