Skip to content

About

TradeJS TrendPullback strategy package

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

TrendPullback

@tradejs/strategy-trend-pullback содержит самостоятельную стратегию TrendPullback для TradeJS. Она ждёт откат внутри установленного тренда и входит после подтверждения закрытой свечой. Пакет экспортирует strategyEntries, TrendPullbackStrategyDefinition и отдельные конфигурации trendPullback1hConfig и trendPullback15m1hConfig.

Правила

Направление LONG требует EMA(fast) > EMA(slow) и роста медленной EMA относительно её значения TP_SLOPE_BARS часовых свечей назад. Для SHORT условия зеркальны. Равенство или противоречие условий означает отсутствие направления. EMA начинается с первого закрытия, а торговля разрешается после TP_SLOW_EMA + TP_SLOPE_BARS полных часовых свечей. На свече появления или смены направления откат не регистрируется.

RSI и ATR считаются на интервале исполнения. После начального среднего они используют сглаживание Уайлдера. Откат LONG начинается при пересечении RSI границы TP_RSI_PULLBACK сверху вниз. Для SHORT требуется пересечение 100 - TP_RSI_PULLBACK снизу вверх. Нахождение RSI внутри зоны без нового пересечения не создаёт следующий сигнал.

Экстремум включает свечу регистрации, все промежуточные свечи и свечу подтверждения с её тенями. LONG подтверждается только на последующей свече при close > previous.high. Для SHORT требуется close < previous.low. Возврат RSI из зоны для самого подтверждения не обязателен. Обновление экстремума предшествует расчёту стопа.

Ожидание действительно на следующих TP_PENDING_BARS свечах включительно. Более поздняя свеча уже не может подтвердить вход. Потеря направления, открытая позиция или пропуск свечи отменяют ожидание до проверки подтверждения. Подтверждение с неприемлемым стопом тоже расходует сигнал. Срок не продлевается при новом экстремуме или повторном пересечении RSI.

Для повторного входа RSI должен выйти из зоны отката и вновь пересечь её границу. Во время открытой позиции новые сигналы не накапливаются. После отклонённого входа или закрытия позиции новый независимый откат разрешён, если выполнены те же условия. Пакет не усредняет и не увеличивает позицию, все входы имеют positionIntent: "open".

Риск и выход

Начальный стоп LONG равен min(low отката) - ATR * TP_STOP_BUFFER_ATR. Для SHORT он равен max(high отката) + ATR * TP_STOP_BUFFER_ATR. Расстояние от закрытия до стопа должно быть не меньше обоих ограничений ATR * TP_MIN_STOP_ATR и close * TP_MIN_STOP_PCT / 100.

Размер позиции ограничивает MAX_LOSS_VALUE с учётом заданных комиссий и проскальзывания через публичный buildStructureRiskPlan. Расчёт относится к цене решения. Фактическая цена исполнения и разрывы цены могут изменить реализованный убыток.

После входа стратегия сопровождает лучшее закрытие по ATR. Новый стоп LONG равен максимуму начального стопа, предыдущего стопа и bestClose - ATR * TP_TRAIL_ATR. Для SHORT применяется минимум и bestClose + ATR * TP_TRAIL_ATR. Расширение ATR не отодвигает стоп. Более строгий стоп биржи также сохраняется. Изменение отправляется через StrategyAPI.protect().

При пересечении стопа закрытием, потере направления или достижении TP_MAX_HOLD_HOURS стратегия вызывает StrategyAPI.exit(). Время отсчитывается от закрытия свечи подтверждения, а проверяется на каждом следующем закрытии интервала исполнения. Начальный биржевой стоп защищает позицию между решениями. Восстановление позиции с другим направлением, изменившейся ценой или количеством приводит к явному выходу.

Текущий StrategyAPI.entry() требует непустой takeProfits. Поэтому первая версия выставляет конечную цель TP_TARGET_R начальных расстояний до стопа, по умолчанию 4R. Полностью отключать цель текущий контракт не позволяет. Значение 4R выбрано для исходного примера и не является результатом подбора.

Интервалы и состояние

В конфигурации trendPullback1hConfig тренд, RSI, ATR и входы используют закрытые свечи 1h. В trendPullback15m1hConfig RSI, ATR и входы используют 15m, а направление использует последний полностью закрытый час.

Час собирается из четырёх последовательных свечей 15m с началом на границе часа UTC. На закрытии свечи с временем открытия HH:45 доступны все четыре части часа. Свечи с временем открытия HH:00, HH:15 и HH:30 используют предыдущее часовое направление. Неполный начальный час отбрасывается. Пропуск свечи отменяет откат и требует нового прогрева часового тренда.

Все timestamp обозначают время открытия свечи в миллисекундах. Вызывать движок нужно только после её закрытия. Начальная история фильтруется строго до текущей свечи, поэтому переданный массив с будущими свечами не влияет на решения. Движок требует строго возрастающие времена и корректные OHLC.

StrategyAPI.createStateController() сохраняет состояние в области конкретного экземпляра стратегии и полной конфигурации. Снимок содержит RSI, ATR, EMA, незавершённый час, откат, начальный стоп, время входа и последнее решение. Его можно сериализовать в JSON и восстановить через controller.set(checkpoint) в коде хоста. Повтор последней свечи возвращает сохранённое решение. Несовпадение конфигурации отвергается.

Сам пакет не записывает состояние на диск. Хост должен сохранять снимки, если требуется продолжение после перезапуска процесса. При открытой позиции без сохранённого состояния стратегия возвращает TP_UNTRACKED_POSITION с выходом, поскольку начальный риск и время входа неизвестны. История фигур и очередь значений EMA ограничены размером конфигурации.

Исходные конфигурации

Оба экспортируемых объекта содержат полную разобранную конфигурацию. Они отличаются только INTERVAL и проверяются тестом. Параметры не подбирались на исторической доходности.

Параметр Значение Смысл
INTERVAL 60 или 15 Интервал исполнения в минутах. Тренд всегда часовой.
TP_FAST_EMA, TP_SLOW_EMA 20, 50 Периоды часовых EMA.
TP_SLOPE_BARS 3 Расстояние для сравнения медленной EMA.
TP_RSI_PERIOD, TP_RSI_PULLBACK 5, 40 Период RSI и граница LONG. Граница SHORT равна 60.
TP_PENDING_BARS 8 Срок ожидания после регистрации, 8h или 2h.
TP_ATR_PERIOD 14 Период ATR на интервале исполнения.
TP_STOP_BUFFER_ATR, TP_TRAIL_ATR 0.25, 3 Буфер начального стопа и сопровождение.
TP_MIN_STOP_ATR, TP_MIN_STOP_PCT 0.5, 0.2 Нижние границы расстояния до стопа.
TP_MAX_HOLD_HOURS, TP_TARGET_R 72, 4 Максимальное время удержания и цель.
MAX_LOSS_VALUE 10 Исходный риск исследовательского примера.
RISK_FEE_RATE 0.001 Комиссия одной стороны, то есть 0.1%.
RISK_SLIPPAGE_BPS, RISK_MARKET_IMPACT_BPS 0, 0 Исходные допущения исполнения.
BACKTEST_PRICE_MODE, BACKTEST_ENTRY_DELAY_BARS open, 1 Исполнение бэктеста на следующем открытии.

Оба направления включены. AI и ML отключены, их включение отвергается парсером этой версии. Для деривативов выбирайте только USDT-контракты, например BTCUSDT. Фиксированные примеры конфигурации не подтверждают прибыльность стратегии.

Подключение

Для локального подключения соберите архив в каталоге output вашего tradejs-project. Из репозитория стратегии выполните:

yarn checks
yarn pack --out ../tradejs-project/output/tradejs-strategy-trend-pullback.tgz

Затем в Project установите архив:

yarn add ./output/tradejs-strategy-trend-pullback.tgz

Все @tradejs/* зависимости пакета объявлены как peerDependencies, а точные версии исполнения выбирает Project. Поддерживаются стабильные @tradejs/core и @tradejs/types начиная с 3.1.28, а также линия 3.1.29-beta начиная с 3.1.29-beta.275. Для @tradejs/strategy-kit требуется ^3.0.6.

Добавьте имя пакета в существующий список плагинов strategies в tradejs.config.ts:

import { defineConfig } from "@tradejs/core/config";

export default defineConfig({
  strategies: ["@tradejs/strategy-trend-pullback"],
});

Для выбора одной конфигурации используйте экспорт пакета в объявлении стратегии Project:

import type { RuntimeStrategyDeclaration } from "@tradejs/types";
import { trendPullback1hConfig } from "@tradejs/strategy-trend-pullback";

export const trendPullback = {
  module: "@tradejs/strategy-trend-pullback",
  enabled: false,
  selection: { tickers: ["BTCUSDT"] },
  config: trendPullback1hConfig,
} satisfies RuntimeStrategyDeclaration;

Для второго режима замените импорт и значение config на trendPullback15m1hConfig. Объявление добавляется в runtime.deployments.<deployment>.strategies.TrendPullback после отдельного решения о подключении к выбранному аккаунту. Пакет сам не меняет композицию, не включает runtime и не развёртывает приложение.

Проверка и фигуры

Требуется Node 24. В репозитории используется Yarn 4 с PnP, поэтому установка не меняет существующие node_modules соседних проектов.

yarn install --immutable
yarn checks

Проверки включают форматирование, TypeScript, сборку ESM/CJS и тесты с настоящим StrategyAPI. Тесты проверяют зеркальность, порядок событий, отмену, срок ожидания, смену тренда, повторный вход, минимальный стоп, удержание, монотонность защиты и восстановление JSON. В обоих режимах отдельно проверяется независимость решений от будущей истории.

figures.ts строит EMA, направление, начало отката, подтверждение, экстремум и путь стопа. Вход содержит снимок фигур на момент решения. Актуальный путь сопровождения доступен через buildTrendPullbackFigures(checkpoint.engine). Решения protect содержат текущую цену стопа; сам контракт protect не передаёт обновлённые фигуры входа.

Отличия и источник

TrendFollow определяет смену состояния тренда через пробой подтверждённого опорного экстремума. Его вход относится к появлению нового направления. TrendPullback требует действующего направления EMA и отдельного отката RSI до подтверждения входа. Несколько независимых откатов могут дать повторные входы внутри одного направления.

Flag в TradingPatterns проверяет импульс и канал отката с опорными точками, наклонами и геометрическими ограничениями. TrendPullback не требует канала или геометрии флага, поэтому его короткий откат может состоять из одной свечи регистрации и следующей свечи подтверждения.

Идея последовательности указана пользователем по Trend Pullback Re-Entry Strategy, Jayadev Rana. Алгоритм состояния и риска реализован самостоятельно, код Pine не переносился. Настройки и результаты автора на BTCUSDT 1h не использовались как подтверждение доходности.

About

TradeJS TrendPullback strategy package

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages