learning_ai_invt_trdg/backend/test_broadcast_logic.ts

56 lines
1.9 KiB
TypeScript

import { ProStrategyEngine } from '../src/strategies/ProStrategyEngine.js';
import { AutoTrader } from '../src/services/AutoTrader.js';
import { TradeExecutor } from '../src/services/TradeExecutor.js';
import { RuleResult, SignalDirection } from '../src/strategies/rules/types.js';
import logger from '../src/utils/logger.js';
// Mock objects
const mockExchange: any = {
fetchOHLCV: async () => [],
getPosition: async () => null,
placeOrder: async () => ({ id: 'mock-order', status: 'filled' })
};
async function testBroadcast() {
console.log("🧪 Testing Signal Broadcast to Multiple Profiles...");
// Create 3 Simulated Profiles
const profiles = [
{ id: 'profile-alpha', name: 'Alpha Scalper', capital: 1000 },
{ id: 'profile-beta', name: 'Beta Trend', capital: 5000 },
{ id: 'profile-gamma', name: 'Gamma Swing', capital: 2500 }
];
const traders: AutoTrader[] = [];
for (const p of profiles) {
const executor = new TradeExecutor(mockExchange, undefined, 'test-user', p.id);
const trader = new AutoTrader(executor, mockExchange, p.capital, 1, ['BTC/USDT']);
traders.push(trader);
}
// Simulate a PASSING signal
const mockResult: RuleResult = {
passed: true,
signal: SignalDirection.BUY,
reason: "Test Signal Pass",
rules: {}
};
const mockContext: any = {
symbol: 'BTC/USDT',
currentPrice: 50000,
indicators: {}
};
console.log("\n🚀 Broadcasting Signal...");
// This replicates the logic in index.ts:
// await Promise.allSettled(userContexts.map(ctx => ctx.autoTrader.handleSignal(symbol, result!, context!)));
await Promise.allSettled(traders.map(t => t.handleSignal('BTC/USDT', mockResult, mockContext)));
console.log("\n✅ Broadcast Phase Complete. Check logs above for profile identifiers.");
}
testBroadcast();