Перейти к содержимому
Все стратегии

Стратегии

Hummingbot PMM V1 (чистый маркет-мейкинг от hummingbot) — точный порт на BTCUSDT.BINANCE_SPOT: уровень покупки 1 и продажи 1 по mid ±1%, обновление через 30 с, задержка после исполнения 60 с, перекос инвентаря OFF (значения по умолчанию из исходного кода)

Итог: Отменено

HummingbotPmmV1BtcSpot

Сводка по итогам

В этой гипотезе предпринята попытка перенести симметричного маркет-мейкера Hummingbot PMM V1 на спотовый рынок Binance BTCUSDT. Единственные изменения, вызванные ограничениями платформы: фиксированный размер позиции в 25% стартового капитала, обновление на каждой свече длительностью 1 минут и проверки спотового баланса. Стратегия не прошла этап написания кода: после 3 итераций запуск был остановлен по причине «coding_stuck_3_timeouts». Бэктест, оптимизация и заключение аналитика не проводились.

Гипотеза

Точный перевод контроллера Hummingbot PMM V1 (автор: hummingbot, Apache-2.0). Это торговая стратегия, пригодная для торговли, — симметричный маркет-мейкер с лимитными ордерами, а не утилита. Значения по умолчанию в исходном коде: коннектор 'binance' (коннектор SPOT) и 'BTC-USDT' для trading_pair, поэтому используем BTCUSDT.BINANCE_SPOT (счёт CASH, только длинные позиции, комиссия мейкера 0.10% за исполнение). Значения по умолчанию без изменений: order_amount = 1 (базовый актив), buy_spreads = [0.01], sell_spreads……Показать большеСвернуть

Точный перевод контроллера Hummingbot PMM V1 (автор: hummingbot, Apache-2.0). Это торговая стратегия, пригодная для торговли, — симметричный маркет-мейкер с лимитными ордерами, а не утилита. Значения по умолчанию в исходном коде: коннектор 'binance' (коннектор SPOT) и 'BTC-USDT' для trading_pair, поэтому используем BTCUSDT.BINANCE_SPOT (счёт CASH, только длинные позиции, комиссия мейкера 0.10% за исполнение). Значения по умолчанию без изменений: order_amount = 1 (базовый актив), buy_spreads = [0.01], sell_spreads = [0.01] (один уровень на сторону, идентификаторы уровней 'buy_0' и 'sell_0'), order_refresh_time = 30 с, order_refresh_tolerance_pct = -1 (отключено, поэтому обновляются все котировки), filled_order_delay = 60 с, inventory_skew_enabled = False, target_base_pct = 0.5, inventory_range_multiplier = 1.0, price_ceiling = -1 и price_floor = -1 (оба параметра отключены). Референсная цена = mid. На нашей платформе доступны только свечи, поэтому mid = цена закрытия последней свечи 1-MINUTE (самая короткая свеча, для которой есть история за несколько лет; mid из книги ордеров нельзя воспроизвести за несколько лет). Каждый ордер — обычный ордер LIMIT (post-only отсутствует в исходном коде, поэтому он не добавлен). PLATFORM ADAPTATIONS (только эти настройки, все обязательные): (1) Размер позиции. 1 BTC равен или превышает весь стартовый капитал в $100 тыс., поэтому order_amount в начале фиксируется ONCE в базовом количестве, равном 0.25 × стартового капитала / цене закрытия первой свечи (около 25% капитала на уровень), а затем остаётся FIXED в базовых единицах, как в исходном коде. Параметр 'order_amount_equity_frac' = 0.25. (2) Часы. Обновление через 30 с и задержка после исполнения 60 с меньше либо равны длительности одной свечи 1м. Поэтому котировки обновляются при закрытии каждой свечи (отменяется любой неисполненный ордер, выставленный более 30 с назад, то есть на каждой свече), а после исполнения уровня новая котировка возможна только через 60 с (следующее закрытие свечи пропускается). (3) Спотовый баланс. Спотовый коннектор Hummingbot отклоняет продажу, превышающую баланс базового актива, и покупку, превышающую баланс котируемого актива. Поэтому ордер sell_0 выставляется, только если удерживаемый базовый баланс >= order_amount (иначе уровень пропускается на этой свече), а ордер buy_0 — только если свободный USDT >= order_amount × цена × 1.001. Бэктест начинается с 100% USDT, поэтому первый полный цикл должен начаться с исполнения покупки. В исходном коде нет стоп-лосса, тейк-профита или выхода по времени. Они не добавлены, поскольку это нарушило бы точность переноса.

Исправление в итерации 2 для сбоя слоя 2. В макете кэша, использованном в синтетических тестах, нет методов orders_inflight() и account_for_venue(). Теперь код ищет их через getattr и пропускает, если их нет. В настоящем кэше NautilusTrader оба метода есть, поэтому поведение бэктеста и бумажной торговли не меняется. Больше ничего не менялось. Адаптации платформы остались прежними: закрытие свечи используется вместо средней цены книги ордеров, обновление котировок и задержка исполнения привязаны к часам свечей, фиксированный базовый объём ордера задаётся на основе капитала, а размещение ордера на каждой стороне зависит от баланса спотового актива. Риск стратегии: спреды составляют 1%, а за каждое исполнение взимается комиссия мейкера 0.10%, поэтому стратегия приносит прибыль, только если BTC колеблется в диапазоне около 2%. При однонаправленном тренде она остаётся с BTC или наличными на одной стороне.

coding_stuck_3_timeouts

Реализация

Точный порт Hummingbot PMM V1 (чистый маркет-мейкинг) для спотового рынка BTCUSDT, где цена закрытия свечи длительностью 1 минут используется как mid. Он выставляет один лимитный ордер на покупку GTC по цене mid × (1 − 1%) и один лимитный ордер на продажу GTC по цене mid × (1 + 1%). На каждой свече текущие котировки отменяются и выставляются заново, поскольку обновление через 30 с происходит чаще, чем формируется свеча. После исполнения ордера эта сторона ждёт 60 с, прежде чем выставить новую котировку. Объём ордера — фиксированное количество базового актива, заданное один раз при старте: 25% стартового капитала делится на цену закрытия первой свечи. Перекос инвентаря отключён, ценовые диапазоны также отключены, как и в исходном коде. Ордер на покупку выставляется, только если достаточно свободного USDT; ордер на продажу — только если имеется достаточно BTC.

История итераций

Проверка не пройдена (слой 2 — синтетические сценарии): Использованные параметры: ['buy_spread', 'price_floor', 'sell_spread', 'price_ceiling', 'filled_order_delay', 'order_refresh_time', 'quote_balance_buffer', 'order_amount_equity_frac'] Убедись, что __init__ задаёт все атрибуты через self.parameters.get(). - steady_uptrend: AttributeError: у '_MockCache' нет атрибута 'orders_inflight' (временная метка свечи: 1735689660000) - steady_downtrend: AttributeError: у '_MockCache' нет атрибута 'orders_inflight' (временная метка свечи: 1735689660000) - flat_ranging: AttributeError: у '_MockCache' нет атрибута 'orders_inflight' (временная метка свечи: 1735689660000) - volatility_spike: AttributeError: у '_MockCache' нет атрибута 'orders_inflight' (временная метка свечи: 1735689660000) - zero_volume: AttributeError: у '_MockCache' нет атрибута 'orders_inflight' (временная метка свечи: 1735689660000) - price_gap: AttributeError: у '_MockCache' нет атрибута 'orders_inflight' (временная метка свечи: 1735689660000)

sandbox_timeout: проверка не пройдена (слой 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 свечей (30 дней с BTCUSDT.BINANCE_SPOT-1-MINUTE-LAST-EXTERNAL). Почти всегда это означает, что работа на каждой свече растёт вместе с историей — например, полное повторное сканирование серии ставок финансирования/дополнительных данных или повторное создание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждой свече. Предварительно отсортируй массивы временных меток ONCE в __init__ и используй bisect либо кэшируй поиск по временной метке, чтобы затраты на свечу были O(log n), а не O(n).

Сводка по итогам

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

Запуск был остановлен на этапе написания кода по причине «coding_stuck_3_timeouts» после 3 итераций, поэтому проверка, анализ бэктеста, оптимизация, анализ аналитика и проверка рисков не проводились.

Точный порт чистого маркет-мейкера Hummingbot PMM V1 на BTCUSDT.BINANCE_SPOT, свечи длительностью 1 минут; выставляет один лимитный ордер на покупку и один на продажу по цене mid ±1%, обновляет их на каждой свече и ждёт 60 с после исполнения перед повторной котировкой. Перекос инвентаря отключён; стоп-лосса, тейк-профита и выхода по времени нет.

Данных о результатах нет: отчёт бэктеста пуст, отчёт об оптимизации отсутствует, поэтому доходность, коэффициент Шарпа и число сделок не зафиксированы.

Анализ

PMMV1

Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.