❯ vitest run src/mastra/super/skills/backtest-runner/skill.spec.ts:119 RUN v4.0.16 /home/dex/Документы/Work/santiment-ai/strategy-agent stdout | src/mastra/super/skills/backtest-runner/skill.spec.ts:303:3 > Backtest Runner: Copytrading Strategy Test (Real Docker) > should successfully prepare env, fetch data, and run freqtrade via docker [Isolation] Environment prepared for run 193121d8-f574-4840-bb61-534aa28b4bda stdout | src/mastra/super/skills/backtest-runner/skill.spec.ts:303:3 > Backtest Runner: Copytrading Strategy Test (Real Docker) > should successfully prepare env, fetch data, and run freqtrade via docker [RunBacktest] Enforcing config overrides: { trading_mode: 'futures', margin_mode: 'isolated', dataformat_ohlcv: 'json', dataformat_trades: 'json' } stdout | src/mastra/super/skills/backtest-runner/skill.spec.ts:303:3 > Backtest Runner: Copytrading Strategy Test (Real Docker) > should successfully prepare env, fetch data, and run freqtrade via docker [DataFetcher] Downloading 1 pairs... stdout | src/mastra/super/skills/backtest-runner/skill.spec.ts:303:3 > Backtest Runner: Copytrading Strategy Test (Real Docker) > should successfully prepare env, fetch data, and run freqtrade via docker [DataFetcher] Completed. Processed: 1 stdout | src/mastra/super/skills/backtest-runner/skill.spec.ts:303:3 > Backtest Runner: Copytrading Strategy Test (Real Docker) > should successfully prepare env, fetch data, and run freqtrade via docker Checking/Rebuilding Docker image "mastra-freqtrade:latest"... Docker command: cd /home/dex/Документы/Work/santiment-ai/strategy-agent/docker/freqtrade && docker build -t mastra-freqtrade:latest . stdout | src/mastra/super/skills/backtest-runner/skill.spec.ts:303:3 > Backtest Runner: Copytrading Strategy Test (Real Docker) > should successfully prepare env, fetch data, and run freqtrade via docker Sending build context to Docker daemon 221.2kB Step 1/7 : FROM freqtradeorg/freqtrade:stable ---> dfd23153a7f2 Step 2/7 : COPY requirements.txt /freqtrade/ ---> Using cache ---> 2d950a4622c1 Step 3/7 : RUN pip install --no-cache-dir -r /freqtrade/requirements.txt ---> Using cache ---> 298f67123821 Step 4/7 : COPY add_pair.py /freqtrade/add_pair.py ---> Using cache ---> e3274112fd45 Step 5/7 : COPY pairs.json /freqtrade/pairs.json ---> Using cache ---> d4fc1270df5a Step 6/7 : COPY exchange.py /freqtrade/freqtrade/exchange/exchange.py ---> Using cache ---> 04e7579357c7 Step 7/7 : RUN python /freqtrade/add_pair.py ---> Using cache ---> 2d26f279b9b1 Successfully built 2d26f279b9b1 Successfully tagged mastra-freqtrade:latest Docker image "mastra-freqtrade:latest" is ready ✅ stdout | src/mastra/super/skills/backtest-runner/skill.spec.ts:303:3 > Backtest Runner: Copytrading Strategy Test (Real Docker) > should successfully prepare env, fetch data, and run freqtrade via docker [DOCKER CMD] docker run --rm --memory 1g -v "/home/dex/Документы/Work/santiment-ai/strategy-agent/data/freqtrade_runs/193121d8-f574-4840-bb61-534aa28b4bda:/freqtrade/user_data" -v "/home/dex/Документы/Work/santiment-ai/strategy-agent/data/market_cache/binance:/freqtrade/user_data/data/binance" mastra-freqtrade:latest backtesting --config /freqtrade/user_data/config.json --strategy Strategy --timerange 20251201-20251230 --export trades --data-format-ohlcv json --logfile /freqtrade/user_data/logs/freqtrade.log stdout | src/mastra/super/skills/backtest-runner/skill.spec.ts:303:3 > Backtest Runner: Copytrading Strategy Test (Real Docker) > should successfully prepare env, fetch data, and run freqtrade via docker !!!!!!!!!!! { success: true, runId: '193121d8-f574-4840-bb61-534aa28b4bda', logTail: 'Result for strategy Strategy\n' + ' BACKTESTING REPORT \n' + '┏━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓\n' + '┃ Pair ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃\n' + '┡━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩\n' + '│ BTC/USDT:USDT │ 0 │ 0.0 │ 0.000 │ 0.0 │ 0:00 │ 0 0 0 0 │\n' + '│ TOTAL │ 0 │ 0.0 │ 0.000 │ 0.0 │ 0:00 │ 0 0 0 0 │\n' + '└───────────────┴────────┴──────────────┴─────────────────┴──────────────┴──────────────┴────────────────────────┘\n' + ' LEFT OPEN TRADES REPORT \n' + '┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓\n' + '┃ Pair ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃\n' + '┡━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩\n' + '│ TOTAL │ 0 │ 0.0 │ 0.000 │ 0.0 │ 0:00 │ 0 0 0 0 │\n' + '└───────┴────────┴──────────────┴─────────────────┴──────────────┴──────────────┴────────────────────────┘\n' + ' ENTER TAG STATS \n' + '┏━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓\n' + '┃ Enter Tag ┃ Entries ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃\n' + '┡━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩\n' + '│ TOTAL │ 0 │ 0.0 │ 0.000 │ 0.0 │ 0:00 │ 0 0 0 0 │\n' + '└───────────┴─────────┴──────────────┴─────────────────┴──────────────┴──────────────┴────────────────────────┘\n' + ' EXIT REASON STATS \n' + '┏━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓\n' + '┃ Exit Reason ┃ Exits ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃\n' + '┡━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩\n' + '│ TOTAL │ 0 │ 0.0 │ 0.000 │ 0.0 │ 0:00 │ 0 0 0 0 │\n' + '└─────────────┴───────┴──────────────┴─────────────────┴──────────────┴──────────────┴────────────────────────┘\n' + ' MIXED TAG STATS \n' + '┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓\n' + '┃ Enter Tag ┃ Exit Reason ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃\n' + '┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩\n' + '│ TOTAL │ │ 0 │ 0.0 │ 0.000 │ 0.0 │ 0:00 │ 0 0 0 0 │\n' + '└───────────┴─────────────┴────────┴──────────────┴─────────────────┴──────────────┴──────────────┴────────────────────────┘\n' + 'No trades made. Your starting balance was 1000 USDT, and your stake was 100 USDT.\n' + '\n' + 'Backtested 2025-12-09 00:00:00 -> 2025-12-30 00:00:00 | Max open trades : 1\n' + ' STRATEGY SUMMARY \n' + '┏━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n' + '┃ Strategy ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃ Drawdown ┃\n' + '┡━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n' + '│ Strategy │ 0 │ 0.00 │ 0.000 │ 0.0 │ 0:00 │ 0 0 0 0 │ 0 USDT 0.00% │\n' + '└──────────┴────────┴──────────────┴─────────────────┴──────────────┴──────────────┴────────────────────────┴───────────────┘\n' + '2026-01-09 12:05:18,201 - freqtrade - INFO - freqtrade 2025.12\n' + '2026-01-09 12:05:18,559 - numexpr.utils - INFO - NumExpr defaulting to 8 threads.\n' + '2026-01-09 12:05:19,950 - freqtrade.configuration.load_config - INFO - Using config: /freqtrade/user_data/config.json ...\n' + '2026-01-09 12:05:19,952 - freqtrade.loggers - INFO - Enabling colorized output.\n' + '2026-01-09 12:05:19,953 - freqtrade.loggers - INFO - Logfile configured\n' + '2026-01-09 12:05:19,953 - freqtrade.loggers - INFO - Verbosity set to 0\n' + '2026-01-09 12:05:19,953 - freqtrade.configuration.configuration - INFO - Using max_open_trades: None ...\n' + '2026-01-09 12:05:19,954 - freqtrade.configuration.configuration - INFO - Parameter --timerange detected: 20251201-20251230 ...\n' + '2026-01-09 12:05:19,966 - freqtrade.configuration.configuration - INFO - Using user-data directory: /freqtrade/user_data ...\n' + '2026-01-09 12:05:19,966 - freqtrade.configuration.configuration - INFO - Using data directory: /freqtrade/user_data/data/binance ...\n' + '2026-01-09 12:05:19,967 - freqtrade.configuration.configuration - INFO - Parameter --export detected: trades ...\n' + '2026-01-09 12:05:19,967 - freqtrade.configuration.configuration - INFO - Parameter --cache=day detected ...\n' + '2026-01-09 12:05:19,967 - freqtrade.configuration.configuration - INFO - Using "json" to store OHLCV data.\n' + '2026-01-09 12:05:19,968 - freqtrade.configuration.configuration - INFO - Filter trades by timerange: 20251201-20251230\n' + '2026-01-09 12:05:19,968 - freqtrade.exchange.check_exchange - INFO - Checking exchange...\n' + '2026-01-09 12:05:19,978 - freqtrade.exchange.check_exchange - INFO - Exchange "binance" is officially supported by the Freqtrade development team.\n' + '2026-01-09 12:05:19,979 - freqtrade.configuration.configuration - INFO - Using pairlist from configuration.\n' + '2026-01-09 12:05:19,979 - freqtrade.configuration.config_validation - INFO - Validating configuration ...\n' + '2026-01-09 12:05:19,981 - freqtrade.commands.optimize_commands - INFO - Starting freqtrade in Backtesting mode\n' + '2026-01-09 12:05:19,981 - freqtrade.exchange.exchange - INFO - Instance is running with dry_run enabled\n' + '2026-01-09 12:05:19,982 - freqtrade.exchange.exchange - INFO - Using CCXT 4.5.29\n' + "2026-01-09 12:05:19,982 - freqtrade.exchange.exchange - INFO - Applying additional ccxt config: {'options': {'defaultType': 'swap'}}\n" + "2026-01-09 12:05:19,990 - freqtrade.exchange.exchange - INFO - Applying additional ccxt config: {'options': {'defaultType': 'swap'}}\n" + '2026-01-09 12:05:20,001 - freqtrade.exchange.exchange - INFO - Using Exchange "Binance"\n' + "2026-01-09 12:05:22,145 - freqtrade.resolvers.exchange_resolver - INFO - Using resolved exchange 'Binance'...\n" + "2026-01-09 12:05:22,180 - freqtrade.resolvers.iresolver - INFO - Using resolved strategy Strategy from '/freqtrade/user_data/strategies/strategy.py'...\n" + '2026-01-09 12:05:22,180 - freqtrade.strategy.hyper - INFO - Found no parameter file.\n' + "2026-01-09 12:05:22,181 - freqtrade.resolvers.strategy_resolver - INFO - Override strategy 'timeframe' with value from the configuration: 1d.\n" + "2026-01-09 12:05:22,181 - freqtrade.resolvers.strategy_resolver - INFO - Override strategy 'stake_currency' with value from the configuration: USDT.\n" + "2026-01-09 12:05:22,181 - freqtrade.resolvers.strategy_resolver - INFO - Override strategy 'stake_amount' with value from the configuration: 100.\n" + "2026-01-09 12:05:22,182 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using minimal_roi: {'0': 0.03}\n" + '2026-01-09 12:05:22,182 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using timeframe: 1d\n' + '2026-01-09 12:05:22,182 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using stoploss: -0.05\n' + '2026-01-09 12:05:22,183 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using trailing_stop: False\n' + '2026-01-09 12:05:22,183 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using trailing_stop_positive_offset: 0.0\n' + '2026-01-09 12:05:22,183 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using trailing_only_offset_is_reached: False\n' + '2026-01-09 12:05:22,183 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using use_custom_stoploss: False\n' + '2026-01-09 12:05:22,183 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using process_only_new_candles: True\n' + "2026-01-09 12:05:22,184 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using order_types: {'entry': 'limit', 'exit': 'limit', 'stoploss': 'limit', 'stoploss_on_exchange': False, \n" + "'stoploss_on_exchange_interval': 60}\n" + "2026-01-09 12:05:22,184 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using order_time_in_force: {'entry': 'GTC', 'exit': 'GTC'}\n" + '2026-01-09 12:05:22,184 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using stake_currency: USDT\n' + '2026-01-09 12:05:22,185 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using stake_amount: 100\n' + '2026-01-09 12:05:22,185 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using startup_candle_count: 10\n' + '2026-01-09 12:05:22,185 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using use_exit_signal: True\n' + '2026-01-09 12:05:22,185 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using exit_profit_only: False\n' + '2026-01-09 12:05:22,185 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using ignore_roi_if_entry_signal: False\n' + '2026-01-09 12:05:22,186 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using exit_profit_offset: 0.0\n' + '2026-01-09 12:05:22,186 - freqtrade.resolvers.strategy_resolver - INFO - Strategy using disable_dataframe_checks: False\n' + '2026-01-09 12:05:2'... 23241 more characters } [Test Success] Run ID: 193121d8-f574-4840-bb61-534aa28b4bda stdout | src/mastra/super/skills/backtest-runner/skill.spec.ts:119:1 > Backtest Runner: Copytrading Strategy Test (Real Docker) [Test Info] Artifacts preserved for threadId: copytrading-test-1767960313204 ✓ src/mastra/super/skills/backtest-runner/skill.spec.ts (2 tests | 1 skipped) 28901ms ↓ Backtest Runner: Full Integration Test (Real Docker) (1) ↓ should successfully prepare env, fetch data, and run freqtrade via docker ✓ Backtest Runner: Copytrading Strategy Test (Real Docker) (1) ✓ should successfully prepare env, fetch data, and run freqtrade via docker 28900ms Test Files 1 passed (1) Tests 1 passed | 1 skipped (2) Start at 15:05:10 Duration 32.01s (transform 109ms, setup 2.60s, import 88ms, tests 28.90s, environment 0ms) ~/Документы/Work/santiment-ai/strategy-agent master* 32s ❯ ~/Документы/Work/santiment-ai/strategy-agent master* 32s