import { AutoTrader } from '../src/services/AutoTrader.js'; import { TradeExecutor } from '../src/services/TradeExecutor.js'; import { SignalDirection } from '../src/strategies/rules/types.js'; import logger from '../src/utils/logger.js'; // Mock Executor const mockExecutor = { getActivePosition: () => null, getActiveSymbols: () => [], checkCooldown: () => false, openPosition: async (symbol, side, qty) => { console.log(`✅ EXECUTION TRIGGERED: Open ${side} on ${symbol} for ${qty}`); return { success: true }; }, syncPositions: async () => { }, currentProfileId: 'test-profile' } as unknown as TradeExecutor; // Mock Exchange const mockExchange = { getPosition: async () => null } as any; async function testThinking() { console.log('--- 🧪 TESTING AUTO-TRADER FUZZY MATCH LOGIC ---'); // Scenario: User allows "BTC/USD" (Alpaca style) // Signal comes in as "BTC/USDT" (Data style) const allowedSymbols = ['BTC/USD', 'ETH/USD']; const trader = new AutoTrader( mockExecutor, mockExchange, 1000, // Capital 1, // Risk % allowedSymbols ); const incomingSymbol = 'BTC/USDT'; console.log(`User Allowed Symbols: ${JSON.stringify(allowedSymbols)}`); console.log(`Incoming Signal Symbol: ${incomingSymbol}`); const mockSignal = { ruleName: 'TestRule', passed: true, signal: SignalDirection.BUY, reason: 'Test Buy Signal' }; const mockContext = { currentPrice: 90000, candles1h: Array(50).fill({ high: 90100, low: 89900, close: 90000 }), // Mock for ATR } as any; console.log('\nInvoking handleSignal...'); await trader.handleSignal(incomingSymbol, mockSignal, mockContext); console.log('--- Test Complete (Check above for EXECUTION TRIGGERED) ---'); } testThinking();