{"id":43161246,"url":"https://github.com/esemi/backtester","last_synced_at":"2026-02-01T01:20:08.052Z","repository":{"id":182598420,"uuid":"668759670","full_name":"esemi/backtester","owner":"esemi","description":"Trading strategy backtesting utility and trading robot implementation for Binance and ByBit cryptocurrency exchanges","archived":false,"fork":false,"pushed_at":"2026-01-31T18:03:12.000Z","size":549,"stargazers_count":7,"open_issues_count":3,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-01-31T20:51:04.043Z","etag":null,"topics":["backtesting","binance","bybit","trading"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/esemi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-07-20T14:27:06.000Z","updated_at":"2026-01-31T17:42:56.000Z","dependencies_parsed_at":"2023-10-15T01:11:22.126Z","dependency_job_id":"859724fc-8b8e-4992-828e-086d53e0af91","html_url":"https://github.com/esemi/backtester","commit_stats":null,"previous_names":["esemi/backtester"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/esemi/backtester","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esemi%2Fbacktester","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esemi%2Fbacktester/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esemi%2Fbacktester/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esemi%2Fbacktester/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/esemi","download_url":"https://codeload.github.com/esemi/backtester/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esemi%2Fbacktester/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28963580,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T00:42:38.011Z","status":"ssl_error","status_checked_at":"2026-02-01T00:42:35.920Z","response_time":128,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backtesting","binance","bybit","trading"],"created_at":"2026-02-01T01:20:07.129Z","updated_at":"2026-02-01T01:20:08.039Z","avatar_url":"https://github.com/esemi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Crypto trading robot\n---\nTrading strategy backtesting utility and trading robot implementation for Binance and ByBit cryptocurrency exchanges.\n\n\n### Setup on windows\n- [install python 3.11](https://www.python.org/downloads/windows/)\n- [install git](https://gitforwindows.org/)\n- [install redis](https://redis.io/docs/getting-started/installation/install-redis-on-windows/)\n\n\n### Download code\n```bash\ngit clone https://github.com/esemi/backtester.git\ncd backtester\npip install -r requirements.txt\n```\n\nCreate env file to override default config\n```bash\ncp .env.example .env\n```\n\n### Run rates loader tool\n```bash\npython -m app.sampler --symbol SOLUSDT --interval 1h --from-date=2023-01-01 --end-date=2023-01-15 --exchange=bybit\npython -m app.sampler --symbol CHRUSDT --from-date 2024-02-26 --from-time 04:30:00 --end-date 2024-03-04 --end-time 08:30:00 --interval 1s\n```\n\n### Run backtesting tool\n```bash\npython -m app.backtester --used-ticks=1 --from-date=\"2023-04-24 00:00:00\" --to-date=\"2023-04-29 11:00:00\"\n```\n\n### Run trading tool\n```bash\npython -m app.trader\n```\n\n### How to\n#### Как поменять настройки бота\n- идём в [файл настроек](https://github.com/esemi/backtester/blob/trader1/etc/env) нашего бота\n- изменяем любые настройки (пример можно [посмотреть тут](https://github.com/esemi/backtester/blob/master/.env.example))\n- сохраняем изменения\n- в ближайшую минуту новые настройки попадут на сервер, остановят запущенного бота и запустят нового с указанными настройками.\n\n\n#### Как включить реальную торговлю\n- идём в [файл настроек](https://github.com/esemi/backtester/blob/trader1/etc/env) нашего бота\n- меняем или добавляем строчку `dry_run=false`\n- сохраняем изменения\n- в ближайшую минуту новые настройки попадут на сервер и перезапустят бота для реальных торгов\n\n\n#### Как выключить бота\n- идём в [файл настроек](https://github.com/esemi/backtester/blob/trader1/etc/env) нашего бота\n- меняем или добавляем строчку `ticks_amount_limit=0`\n- сохраняем изменения\n- в ближайшую минуту новые настройки попадут на сервер и остановят работающего бота\n\n\n#### Как переключиться на стратегию с плавающей ставкой\n- идём в [файл настроек](https://github.com/esemi/backtester/blob/trader1/etc/env) нашего бота\n- меняем или добавляем строчку `strategy_type=floating`\n- сохраняем изменения\n- в ближайшую минуту новые настройки попадут на сервер\n\n\n#### Как ограничить количество открытых позиций\n- идём в [файл настроек](https://github.com/esemi/backtester/blob/trader1/etc/env) нашего бота\n- меняем или добавляем строчку `hold_position_limit=100` (накапливать на руках не больше 100 позиций)\n- сохраняем изменения\n- в ближайшую минуту новые настройки попадут на сервер\n\n\n#### Где посмотреть логи и результаты работы\n- заходим на сервер по ssh\n- `cd /var/log/trader/`\n- находим нужный лог или файл с результатами (соответствует имени нашего бота в настройках, например `trader-1-log.txt`)\n\n\n#### Как переключить трейдера на ByBit биржу\n- идём в [файл настроек](https://github.com/esemi/backtester/blob/trader1/etc/env) нашего бота\n- устанавливаем тикер `exchange=\"bybit\"`\n- сохраняем изменения\n\n\n#### Как добавить нового бота на сервер\n- заходим на сервер по ssh из под пользователя root и заводим нового пользователя\n- `adduser trader100500`\n- `usermod -a -G supervisor trader100500`\n- `usermod -a -G www-data trader100500`\n- запоминаем пароль нового пользователя (можно взять стандартный пароль для всех ботов, если не слишком беспокоимся за безопасность)\n- добавляем автозапуск бота на сервере (просто копируем секцию и меняем порядковый номер в имени бота, секция будет называться примерно `[program:trader100500]`)\n- `vi /etc/supervisor/conf.d/traders.conf`\n- переключаемся на работу с git репозиторием (в соседнем терминале или прямо на github.com)\n- `git checkout master`\n- `git checkout -b trader100500`\n- `git push -u origin trader100500`\n- меняем [настройки бота](https://github.com/esemi/backtester/blob/trader100500/etc/env) в новой ветке\n- настраиваем [деплой нового бота на сервер](https://github.com/esemi/backtester/blob/trader100500/.github/workflows/deploy.yml) - заменяем `USER_NAME` на `trader100500`\n- оставляем только те ключи и секреты, которые нужны этому инстансу бота (смотри строчки `*_api_key` и `*_api_secret`)\n- [создаём PR для новой ветки](https://github.com/esemi/backtester/compare/master...trader100500)\n- [ждём пока код бота зальётся на сервер](https://github.com/esemi/backtester/actions/workflows/deploy.yml)\n- возвращаемся на сервер и перезапускаем supervisor\n- `service supervisor restart`\n- проверяем, что все боты стартовали корректно\n- `supervisorctl status`\n\n\n#### Как добавить новую пару апи ключей\n- добавляем новые доступы в [секреты github](https://github.com/esemi/backtester/settings/secrets/actions) с новыми именами\n- прописываем использование созданных переменных в деплой соответствующего бота ([например](https://github.com/esemi/backtester/blob/trader40/.github/workflows/deploy.yml#L45))\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesemi%2Fbacktester","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fesemi%2Fbacktester","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesemi%2Fbacktester/lists"}