56 lines
1.9 KiB
TypeScript
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();
|