stock-bot/apps/stock/orchestrator/examples/debug-rust-short-trades.ts
2025-07-03 18:33:15 -04:00

129 lines
No EOL
4.6 KiB
TypeScript

import { TradingEngine } from '@stock-bot/core';
async function debugRustShortTrades() {
// Create engine config for backtest mode
const engineConfig = {
startTime: new Date('2023-01-01').getTime(),
endTime: new Date('2023-02-01').getTime(),
speedMultiplier: 0
};
console.log('=== RUST CORE SHORT TRADE DEBUG ===\n');
console.log('1. Creating TradingEngine in backtest mode...');
const engine = new TradingEngine('backtest', engineConfig);
// Simulate opening a short position
console.log('\n2. Submitting SELL order to open short position...');
const sellOrder = {
id: 'sell-order-001',
symbol: 'TEST',
side: 'sell',
quantity: 100,
orderType: 'market',
timeInForce: 'DAY'
};
const sellOrderId = engine.submitOrder(sellOrder);
console.log(` Sell order ID: ${sellOrderId}`);
// Process the sell fill
console.log('\n3. Processing SELL fill...');
const sellFillResult = engine.processFillWithMetadata(
'TEST', // symbol
50.0, // price
100, // quantity
'sell', // side
0.1, // commission
sellOrderId, // orderId
'debug-strategy' // strategyId
);
console.log(` Fill result: ${sellFillResult}`);
// Check positions
console.log('\n4. Checking positions after SELL...');
const positionsAfterSell = engine.getPosition('TEST');
console.log(' Position:', positionsAfterSell);
// Check open trades
const openTradesAfterSell = JSON.parse(engine.getOpenTrades());
console.log(' Open trades:', openTradesAfterSell.length);
if (openTradesAfterSell.length > 0) {
console.log(' First open trade:', openTradesAfterSell[0]);
}
// Check closed trades
const closedTradesAfterSell = JSON.parse(engine.getClosedTrades());
console.log(' Closed trades:', closedTradesAfterSell.length);
// Now close the short with a buy order
console.log('\n5. Submitting BUY order to close short position...');
const buyOrder = {
id: 'buy-order-001',
symbol: 'TEST',
side: 'buy',
quantity: 100,
orderType: 'market',
timeInForce: 'DAY'
};
const buyOrderId = engine.submitOrder(buyOrder);
console.log(` Buy order ID: ${buyOrderId}`);
// Process the buy fill
console.log('\n6. Processing BUY fill...');
const buyFillResult = engine.processFillWithMetadata(
'TEST', // symbol
48.0, // price (profit on short)
100, // quantity
'buy', // side
0.1, // commission
buyOrderId, // orderId
'debug-strategy' // strategyId
);
console.log(` Fill result: ${buyFillResult}`);
// Check positions after closing
console.log('\n7. Checking positions after BUY...');
const positionsAfterBuy = engine.getPosition('TEST');
console.log(' Position:', positionsAfterBuy);
// Check open trades after closing
const openTradesAfterBuy = JSON.parse(engine.getOpenTrades());
console.log(' Open trades:', openTradesAfterBuy.length);
// Check closed trades after closing - THIS IS WHERE WE SHOULD SEE THE SHORT TRADE
const closedTradesAfterBuy = JSON.parse(engine.getClosedTrades());
console.log(' Closed trades:', closedTradesAfterBuy.length);
if (closedTradesAfterBuy.length > 0) {
console.log('\n8. Closed trade details:');
closedTradesAfterBuy.forEach((trade: any, i: number) => {
console.log(` Trade ${i + 1}:`);
console.log(` ID: ${trade.id}`);
console.log(` Side: ${trade.side}`);
console.log(` Entry: ${trade.entry_price} @ ${trade.entry_time}`);
console.log(` Exit: ${trade.exit_price} @ ${trade.exit_time}`);
console.log(` P&L: ${trade.pnl} (${trade.pnl_percent}%)`);
console.log(` Quantity: ${trade.quantity}`);
});
} else {
console.log('\n❌ ERROR: No closed trades found! Short trade was not recorded.');
}
// Also check trade history
console.log('\n9. Trade history:');
const tradeHistory = JSON.parse(engine.getTradeHistory());
tradeHistory.forEach((trade: any, i: number) => {
console.log(` Trade ${i + 1}: ${trade.side} ${trade.quantity} @ ${trade.price}`);
});
// Check totals
console.log('\n10. Summary:');
console.log(` Total trades: ${engine.getTradeCount()}`);
console.log(` Closed trades: ${engine.getClosedTradeCount()}`);
const [realizedPnl, unrealizedPnl] = engine.getTotalPnl();
console.log(` Realized P&L: ${realizedPnl}`);
console.log(` Unrealized P&L: ${unrealizedPnl}`);
}
// Run the debug
debugRustShortTrades().catch(console.error);