Giter Club home page Giter Club logo

backtester's People

Contributors

esemi avatar sergey16021984 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

backtester's Issues

[отложено] Отложенный старт по тригеру цены

Стартуем бота, если стейт пустой (значит это новый старт) и настройка цены стоит - ждём пока цена станет ниже (?) тригера и начнаем только тогда. Тоесть бот как бы работает, но ничего не делает и ждёт тригера

Algo percent

Сейчас у нас фиксированный процент. Но есть мысль сделать его автоматическим. Т.е. минимально 5% максимально 30% например. И он начинает продавать с 5%. Если удаётся переключается на 7%. Если и это получилось то 9%. Если упёрся в 9% начинает пыться продать и идёт счётчик. До 5 раз не смог продать начинает уменьшать. И так по кругу.

DOD

  • в конфиге есть шаги процента для закрытия позиций
  • шаг сам увеличивается при успешной сделке и уменьшается при неуспешной

Доделки по стратегии

  • убираем среднюю цену из условий о продаже
  • убираем шаг в абсолюте из условий о продаже
  • убираем лишние логи из вывода
  • выводим оборот в монетах в статистике

Global stop-loss

  • сделать нижнюю планку после которой бот старается скинуть все монеты

DOD

  • в конфиге есть цена стоп лоса
  • при достижении её - бот закрывает все позиции и продолжает работать как с чистого листа

Метрика "сделок закрыто за 24 часа"

DOD

  • в редисе и мускуле есть метрика вида "количество закрытых сделок за 24 часа"
  • метрика учитывает только дату закрытия позиции
  • метрика пересчитывается вместе со статистикой (каждый тик)

Binance connector

DOD

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

Trade session limit

Добавляем возможность запустить бота торговать на некоторое время (день-два-неделя)

DOD

  • в конфиге есть параметр времени торговой сессии бота
  • при истечении времени - бот сам закрывает все позиции и заверашет работу
  • супервизард не перезапускает бота сам!

Stop Loss

DOD

  • у бота можно включить ликвидацию позиций по стоп-лосс цене (настройка stop_loss_enabled: bool)
  • стоп лосс ориентируется на текущую НЕпризнанную прибыль (параметр pl_amount_usd)
  • стоп лосс включается, если pl_amount_usd >= N (настройка stop_loss_pl_threshold)
  • в настройках есть сетка максимальной просадки в процентах в зависимости от максимума pl_amount_usd за всё время работы бота (100$ = 10%, 500$ = 20% итд)
  • если преодолели минимальный порог профита - начинаем отслеживать максимум профита за историю
  • если профит просел вниз в сравнении с историческим максимумом - проверяем, не просел ли он на N% (сравниваем с процентом от максимума из настроек)
  • если профит просел на большее количество процентов, чем мы были готовы терпеть: получаем баланс тикера с биржи и продаём всё по рынку. Из бота выходим.
  • при стопе стейт сбрасывается в ноль

TODO

  • вводим настройку stop_loss_enabled
  • вводим настройку stop_loss_pl_threshold
  • вводим настройку матрицы просадок от абсолютного значения pl_amount_usd
  • добавляем в клиент к бинансу получение текущего баланса тикера
  • добавляем в клиент к байбиту получение текущего баланса тикера
  • добавляем в клиент бинанса продажу по рынку всего объёма тикера
  • добавляем в клиент байбиту продажу по рынку всего объёма тикера
  • каждый тик обновляем максимум непризнанной прибыли
  • каждый тик проверяем, не нужно ли выйти по стопу (прибыль просела на N% и прибыль выше, чем трешхолд для стопа)
  • выходим по стопу при совпадении условий

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

  • сделать кнопку выставить все монеты на продажу по рыночной стоимости (она же может быть кнопка стоп)

  • вывести статистику как сейчас в тесте в самом конце. Можно обновлять ее
    раз в пол часа например или как лучше

  • меню: Выбор торговой пары
    шаг в абсолютных значениях для условия сделок
    шаг в процентах для условия сделок 5%-70%
    сколько позиций открываем в самом начале
    сколько монет в одной позиции (классно что есть дробное)

Стратегия с переменным процентом

DOD

  • в настройках бота можно выбрать стратегию стандартную и с плавающей ставкой
  • в стратегии с плавающей ставкой можно указать ступеньки ставки (в процентах)
  • и сколько неуспешных попыток приводит к понижению ставки
  • любая успешная продажа ведёт к увеличению ставки для следующей продажи
  • указанное количество неуспешных попыток продажи ведёт к уменьшению ставки для следующей продажи

CI/CD to server

DOD

  • ботик крутится на серваке
  • ботик менеджится супервизардом
  • супервизард не перезапускает бота сам!

WIP: Trailing Stop Loss

DOD

  • у бота можно включить выход из позиций по стоп-лосс трейлу (настройка stop_loss_trailing_enabled: bool)
  • включен может быть только один стоп лосс

TODO

Параметры:
on/off

Установка SL в безубыток (раздел который отключает модуль SL)

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


Трейлинг SL

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

Основные настройки:
тип ордера (virtual market - ордер который запоминает бот, и когда срабатывает, то выставляет обычный stop market на биржу)
(virtual floating - ордер, которые пытается продать позицию по лимитному ордеру)
(stop market - ордер которые стразы выставляетна биржу в книгу ордеров и осполняется как рыночный ордер)

Триггер ордера (книга ордеров - это ask и bill)
(свечи про что мы говорили с тобой)

Добавить в статистику баланс монет на бирже

смотри такой момент. так как твоя сторона по апи торгует с тикером. мы можем этим же ботом выводить в json сколько физически на бирже монет? чтоб в админке видеть и если расхождение то идти на биржу и решения какие-то принимать

Новая стратегия на покупку

предоложим курс 150

мы запускаем бота с шагом закупки 0,1%
система просчитывает до какой нижней позиции он сможет покупать.
в данном примере это 1000 шагов и сможет покупать до 0.15 курса
пример расчетов шагов
150 - 0.1% = 149.85
149.85 - 0.1% = 149.7
149.7 - 0.1% = 149.55

получается сетка: 
150

149.85

149.7

149.55

и мы можем купить только одну позицию между тиком 150 и 149.85, 149.85 и 149.7, 149.7 и 149.55

Если курс идет вверх до 180
Система оставляет сетку ордеров вниз и достраивает сетку на верх

получается
150 + 0.1% = 150.15
150.15 + 0.1% = 150.3
150.3 + 0.1% = 150.45

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

DOD

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

TODO

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

Учёт комиссий при открытии и закрытии позиций

Summary

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

TODO

  • округляем сумму монет при покупке за вычетом комиссий до ближайшего целого лота вниз
  • вычитаем комиссии из накопленных остатков монет
  • или вычитаем комиссии из суммы монет и добавляем лишнее в остатки
  • выводим остатки в статистике
  • удаляем настройку "процент комиссий" и работу с ним из статистики ботов
  • выкатываем на тестовых ботов
  • раскатываем на всех

Фильтр по дате в бектесте

Смотри по бек тесту. Ты можешь мне 2 настройки вывести они только в бэки нужны. Чтоб я там указывал старт от куда ему тестит и финишь до куда тестить

По дате и времени

А и можно чтоб он например пропускал каждый второй тик или каждый третий тоже переменной сделать

[отложено] Подсчёт признанной прибыли раздельно для каждого коридора

DOD

  • признанная прибыль считается для каждого заданного коридора отдельно
  • если границы коридоров изменили в середине работы бота - прибыль остаётся закреплённой за коридором по старым границам
  • прибыль раздельно хранится и в мускуле и в редисе

.env config

  • вынести конфиг как конфиг (чтобы можно было рядом несколько запустить без лишнего гемора)

DOD

  • конфиг в проекте вынесен в .env файл

Настройка "ликвидировать позиции"

DOD

  • у бота есть настройка "режим ликвидации" с активацией по тригеру текущей цены
  • если режим включился - бот ничего не покупает и не продаёт обычными механизмами
  • в этом режиме бот собирает все заявки с руки в одну и выставляет на продажу в режиме "продать по текущей цене, можно частично"
  • бот ждёт 5 минут, пока заявка заполинтся
  • если заявка заполнена полностью - бот удаляет стейт и заканчивает работу
  • если заявка исполнена частично - бот отменяет заявку и ставит новую, с ценой на 5% ниже
  • перевыставление заявок происходит не более 5 раз
  • если заявка так и не продана - бот пишет об этом в логи, удаляет стейт и завершает работу
  • после ликвидации бот пишет в статсу остаток непроданных монет (если остался) (result.json + mysql table)

Смотрим на цену последней открытой позиции при проверке условия на новую покупку (1)

DOD

  • стратегия помнит последнюю открытую позицию
  • если последняя открытая есть - смотрим на её цену относительно текущей при принятии решения о новой покупке
  • если нет - смотрим по старинке, на предыдущий тик

rest-API

DOD

  • на отдельном хосте крутится апишка с докой
  • в апишке есть один роут вида POST /balances {api_key: 'todo', api_secret: 'todo', exchange: literal['binance', 'bybit']} -> {btcusdt: 38.123456, balances: {'XRPBTC': 123456.00001, 'BTCUSDT': 0.0007899465, ...}, from_cache: True}
  • авторизация в апишку происходит по статичному токену в заголовке X-AUTH-TOKEN
  • запросы кешируются на несколько минут

Статистика по инвест телу

изначальный депозит = ограничение на позиции * размер позиций на открытие
оценка активов = монеты на руках * текущий курс
затраты на покупку активов = монеты на руках * курс покупки каждой

Инвестиционное тело = депозит - затраты на покупку активов + оценка активов

Telemetry

DOD

  • пишем телеметрию в мускуль
  • пишем только тики со сделками
  • у бота есть настройка "выключить запись телеметрии"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.