Создать backtest config
backtest не придумывает параметры стратегии сам. Он читает grid-конфиг из Redis.
Формат ключа:
users:<user>:backtests:configs:<StrategyName:configName>
Примеры:
users:root:backtests:configs:MaStrategy:base
users:root:backtests:configs:TrendLine:base
CLI берет имя стратегии из части до первого :. MaStrategy:base запускает MaStrategy; TrendLine:base запускает TrendLine.
Форма grid
Backtest config - JSON object, где каждое значение является массивом:
{
"INTERVAL": ["15"],
"MAX_LOSS_VALUE": [10],
"MA_FAST": [21, 34],
"MA_SLOW": [55, 89],
"LONG": [
{
"enable": true,
"direction": "LONG",
"TP": 2,
"SL": 1,
"minRiskRatio": 1.2
}
],
"SHORT": [
{
"enable": true,
"direction": "SHORT",
"TP": 2,
"SL": 1,
"minRiskRatio": 1.2
}
]
}
TradeJS разворачивает массивы в grid тестов. Даже одно значение нужно заворачивать в массив.
Seed через redis-cli
После npx @tradejs/cli infra-up Redis обычно доступен на 127.0.0.1:6379.
redis-cli -h 127.0.0.1 -p 6379 SET \
'users:root:backtests:configs:MaStrategy:base' \
'{"INTERVAL":["15"],"MAX_LOSS_VALUE":[10],"MA_FAST":[21],"MA_SLOW":[55],"LONG":[{"enable":true,"direction":"LONG","TP":2,"SL":1,"minRiskRatio":1.2}],"SHORT":[{"enable":true,"direction":"SHORT","TP":2,"SL":1,"minRiskRatio":1.2}]}'
Запуск:
npx @tradejs/cli backtest --user root --config MaStrategy:base --tickers BTCUSDT --timeframe 15 --tests 1 --parallel 1
Seed через script
import Redis from 'ioredis';
const redis = new Redis({
host: process.env.REDIS_HOST || '127.0.0.1',
port: Number(process.env.REDIS_PORT || 6379),
password: process.env.REDIS_PASSWORD || undefined,
});
const key = 'users:root:backtests:configs:MaStrategy:base';
const grid = {
INTERVAL: ['15'],
MAX_LOSS_VALUE: [10],
MA_FAST: [21],
MA_SLOW: [55],
LONG: [{ enable: true, direction: 'LONG', TP: 2, SL: 1, minRiskRatio: 1.2 }],
SHORT: [{ enable: true, direction: 'SHORT', TP: 2, SL: 1, minRiskRatio: 1.2 }],
};
await redis.set(key, JSON.stringify(grid));
await redis.quit();
Храните такой seed script в своем проекте, если config должен воспроизводиться или проходить review в version control.
Runtime config и backtest grid
Runtime strategy configs лежат в:
users:<user>:strategies:<StrategyName>:config
В CLI есть helper, который превращает enabled runtime config в one-value backtest grid и убирает runtime-only keys:
ENVINTERVALMAKE_ORDERSCLOSE_OPPOSITE_POSITIONSBACKTEST_PRICE_MODEBACKTEST_ENTRY_DELAY_BARS
Для public docs самый практичный путь - seed backtest grid напрямую, если у вас нет готового runtime config в app.
Частые ошибки
Backtest config "<name>" not found
Ключ отсутствует у выбранного user. Проверьте user и config name:
redis-cli -h 127.0.0.1 -p 6379 GET 'users:root:backtests:configs:MaStrategy:base'
must include strategyName and strategyConfig grid
Payload не является grid object. Каждое top-level значение должно быть массивом.
Запустилась не та стратегия
Имя стратегии берется из config name. Используйте StrategyName:label, например TrendLine:base.