Перейти к основному содержимому

Регистрация, бэктест и проверка Pine-стратегии

Это глава 4 пошагового руководства по Pine-стратегии. Здесь готовый runtime-мост публикуется как пакет стратегии и проверяется стандартным workflow TradeJS.

6. Добавьте runtime entrypoint стратегии (strategy.ts)

import { createStrategyRuntime } from '@tradejs/node/strategies';
import {
AdaptiveMomentumRibbonConfig,
config as DEFAULT_CONFIG,
} from './config';
import { createAdaptiveMomentumRibbonCore } from './core';
import { adaptiveMomentumRibbonManifest } from './manifest';

export const AdaptiveMomentumRibbonStrategyCreator =
createStrategyRuntime<AdaptiveMomentumRibbonConfig>({
strategyName: 'AdaptiveMomentumRibbon',
defaults: DEFAULT_CONFIG as AdaptiveMomentumRibbonConfig,
createCore: createAdaptiveMomentumRibbonCore,
manifest: adaptiveMomentumRibbonManifest,
strategyDirectory: __dirname,
});

7. Добавьте adapters + manifest + публичные экспорты

adapters/ai.ts

import { mapAiRuntimeFromConfig } from '@tradejs/core/strategies';
import { AdaptiveMomentumRibbonConfig } from '../config';
import { StrategyAiAdapter } from '@tradejs/types';

export const adaptiveMomentumRibbonAiAdapter: StrategyAiAdapter = {
mapEntryRuntimeFromConfig: (config) =>
mapAiRuntimeFromConfig(
config as Pick<
AdaptiveMomentumRibbonConfig,
'AI_ENABLED' | 'MIN_AI_QUALITY'
>,
),
};

adapters/ml.ts

import { mapMlRuntimeFromConfig } from '@tradejs/core/strategies';
import { AdaptiveMomentumRibbonConfig } from '../config';
import { StrategyMlAdapter } from '@tradejs/types';

export const adaptiveMomentumRibbonMlAdapter: StrategyMlAdapter = {
mapEntryRuntimeFromConfig: (config) =>
mapMlRuntimeFromConfig(
config as Pick<
AdaptiveMomentumRibbonConfig,
'ML_ENABLED' | 'ML_THRESHOLD'
>,
),
};

manifest.ts

import { adaptiveMomentumRibbonAiAdapter } from './adapters/ai';
import { adaptiveMomentumRibbonMlAdapter } from './adapters/ml';
import { StrategyManifest } from '@tradejs/types';

export const adaptiveMomentumRibbonManifest: StrategyManifest = {
name: 'AdaptiveMomentumRibbon',
aiAdapter: adaptiveMomentumRibbonAiAdapter,
mlAdapter: adaptiveMomentumRibbonMlAdapter,
};

index.ts

export { AdaptiveMomentumRibbonStrategyCreator } from './strategy';
export { adaptiveMomentumRibbonManifest } from './manifest';

8. Регистрируйте через plugin + tradejs.config.ts

Создайте plugin entry (например, в src/plugins/adaptiveMomentumRibbon.plugin.ts):

import { defineStrategyPlugin } from '@tradejs/core/config';
import { adaptiveMomentumRibbonManifest } from './AdaptiveMomentumRibbon/manifest';
import { AdaptiveMomentumRibbonStrategyCreator } from './AdaptiveMomentumRibbon/strategy';

export const strategyEntries = [
{
manifest: adaptiveMomentumRibbonManifest,
creator: AdaptiveMomentumRibbonStrategyCreator,
},
];

export default defineStrategyPlugin({ strategyEntries });

Далее подключите этот plugin в корневом tradejs.config.ts:

import { defineConfig } from '@tradejs/core/config';
import { basePreset } from '@tradejs/base';

export default defineConfig(basePreset, {
strategies: ['./src/plugins/adaptiveMomentumRibbon.plugin.ts'],
runtime: {
deployments: {
production: {
connectorName: 'bybit',
accountId: 'bybit-main',
strategies: {
AdaptiveMomentumRibbon: {
enabled: true,
config: {
INTERVAL: '15',
UNIVERSE: 'crypto',
BACKTEST_PRICE_MODE: 'mid',
AMR_MOMENTUM_PERIOD: 20,
AMR_BUTTERWORTH_SMOOTHING: 3,
AMR_WAIT_CLOSE: true,
AMR_SHOW_INVALIDATION_LEVELS: true,
AMR_SHOW_KELTNER_CHANNEL: true,
AMR_KC_LENGTH: 20,
AMR_KC_MA_TYPE: 'EMA',
AMR_ATR_LENGTH: 14,
AMR_ATR_MULTIPLIER: 2,
AMR_EXIT_ON_INVALIDATION: true,
AMR_LOOKBACK_BARS: 400,
AMR_LINE_PLOTS: [
'kcMidline',
'kcUpper',
'kcLower',
'invalidationLevel',
],
LONG: { enable: true, direction: 'LONG', TP: 2, SL: 1 },
SHORT: { enable: true, direction: 'SHORT', TP: 2, SL: 1 },
AI_ENABLED: false,
ML_ENABLED: false,
ML_THRESHOLD: 0.1,
MIN_AI_QUALITY: 3,
},
},
},
},
},
},
});

После этого AdaptiveMomentumRibbon доступна runtime/backtest как обычная plugin-стратегия.

tradejs.config.ts — источник настроек реальной торговли. Зафиксируйте пакет стратегии и lock-файл вместе с конфигурацией; TradeJS сам вычислит идентификаторы среды исполнения из проверенной сборки. Redis хранит только торговый счёт и временную паузу.

9. Backtest grid config

redis-cli JSON.SET users:root:backtests:configs:AdaptiveMomentumRibbon:amr-default '$' '{
"ENV": ["BACKTEST"],
"INTERVAL": ["15"],
"MAKE_ORDERS": [true],
"BACKTEST_PRICE_MODE": ["mid"],
"AMR_MOMENTUM_PERIOD": [20],
"AMR_BUTTERWORTH_SMOOTHING": [3],
"AMR_WAIT_CLOSE": [true],
"AMR_SHOW_INVALIDATION_LEVELS": [true],
"AMR_SHOW_KELTNER_CHANNEL": [true],
"AMR_KC_LENGTH": [20],
"AMR_KC_MA_TYPE": ["EMA"],
"AMR_ATR_LENGTH": [14],
"AMR_ATR_MULTIPLIER": [2],
"AMR_EXIT_ON_INVALIDATION": [true],
"AMR_LOOKBACK_BARS": [400],
"AMR_LINE_PLOTS": [["kcMidline", "kcUpper", "kcLower", "invalidationLevel"]],
"LONG": [{"enable": true, "direction": "LONG", "TP": 2, "SL": 1}],
"SHORT": [{"enable": true, "direction": "SHORT", "TP": 2, "SL": 1}],
"AI_ENABLED": [false],
"ML_ENABLED": [false],
"ML_THRESHOLD": [0.1],
"MIN_AI_QUALITY": [3]
}'

Важно: имя backtest-конфига должно начинаться со стратегии (AdaptiveMomentumRibbon:*).

10. Запуск и проверка

Бэктест:

npx @tradejs/cli backtest --user root --config AdaptiveMomentumRibbon:amr-default --connector bybit --tests 200 --parallel 4

Сигналы:

npx @tradejs/cli signals --user root --cacheOnly

В UI (/routes/backtest) проверьте:

  • события входа/выхода AMR
  • Pine-figures (kcMidline, kcUpper, kcLower, invalidationLevel)

Назад: запустите Pine и верните решение стратегии. Вернуться к обзору руководства.