fix: add missing trades and provide risk management recommendations
Added missing 1.04 WIN and -/bin/bash.14 LOSS trades to database AI Learning System now shows 3 trades: 67% win rate, 7.03 P&L Created emergency risk management tools for unprotected positions Current SHORT position needs manual stop-loss/take-profit orders Summary: All 3 trades now visible in AI Learning dashboard Risk: Current SHORT (+.45) needs protection at 95.59 stop-loss
This commit is contained in:
114
emergency-risk-management.js
Normal file
114
emergency-risk-management.js
Normal file
@@ -0,0 +1,114 @@
|
||||
// Use native fetch or alternative
|
||||
const fetch = globalThis.fetch || require('node-fetch');
|
||||
|
||||
async function emergencyRiskManagement() {
|
||||
try {
|
||||
console.log('🚨 EMERGENCY: Placing protective orders for unprotected SHORT position...');
|
||||
|
||||
// Get current position details
|
||||
const positionResponse = await fetch('http://localhost:9001/api/automation/position-monitor');
|
||||
const positionData = await positionResponse.json();
|
||||
|
||||
if (!positionData.monitor.hasPosition) {
|
||||
console.log('✅ No position detected - no emergency action needed');
|
||||
return;
|
||||
}
|
||||
|
||||
const position = positionData.monitor.position;
|
||||
console.log('📊 Current position:', {
|
||||
side: position.side,
|
||||
size: position.size,
|
||||
entryPrice: position.entryPrice,
|
||||
currentPrice: position.currentPrice,
|
||||
unrealizedPnl: position.unrealizedPnl
|
||||
});
|
||||
|
||||
if (position.side !== 'short') {
|
||||
console.log('ℹ️ Position is not SHORT - different risk management needed');
|
||||
return;
|
||||
}
|
||||
|
||||
// For SHORT position: Stop-loss ABOVE entry, Take-profit BELOW entry
|
||||
const entryPrice = position.entryPrice;
|
||||
const currentPrice = position.currentPrice;
|
||||
|
||||
// Conservative stop-loss: 5% above entry price
|
||||
const stopLossPrice = (entryPrice * 1.05).toFixed(2);
|
||||
|
||||
// Take profit: 3% below entry price
|
||||
const takeProfitPrice = (entryPrice * 0.97).toFixed(2);
|
||||
|
||||
console.log('📋 Calculated protective levels:');
|
||||
console.log(` Entry: $${entryPrice.toFixed(2)}`);
|
||||
console.log(` Stop-Loss: $${stopLossPrice} (${((stopLossPrice/entryPrice - 1) * 100).toFixed(1)}% above entry)`);
|
||||
console.log(` Take-Profit: $${takeProfitPrice} (${((takeProfitPrice/entryPrice - 1) * 100).toFixed(1)}% below entry)`);
|
||||
|
||||
// Place stop-loss order (LONG direction to close SHORT)
|
||||
console.log('🛑 Placing stop-loss order...');
|
||||
const stopLossResponse = await fetch('http://localhost:9001/api/trading', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
action: 'place_order',
|
||||
symbol: 'SOL-PERP',
|
||||
side: 'LONG', // To close SHORT position
|
||||
amount: position.size,
|
||||
orderType: 'stop_limit',
|
||||
price: stopLossPrice,
|
||||
triggerPrice: stopLossPrice,
|
||||
reduceOnly: true
|
||||
})
|
||||
});
|
||||
|
||||
const stopLossResult = await stopLossResponse.json();
|
||||
console.log('🛑 Stop-loss result:', stopLossResult.success ? '✅ SUCCESS' : '❌ FAILED');
|
||||
if (!stopLossResult.success) {
|
||||
console.error('❌ Stop-loss error:', stopLossResult.error);
|
||||
}
|
||||
|
||||
// Place take-profit order
|
||||
console.log('🎯 Placing take-profit order...');
|
||||
const takeProfitResponse = await fetch('http://localhost:9001/api/trading', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
action: 'place_order',
|
||||
symbol: 'SOL-PERP',
|
||||
side: 'LONG', // To close SHORT position
|
||||
amount: position.size,
|
||||
orderType: 'limit',
|
||||
price: takeProfitPrice,
|
||||
reduceOnly: true
|
||||
})
|
||||
});
|
||||
|
||||
const takeProfitResult = await takeProfitResponse.json();
|
||||
console.log('🎯 Take-profit result:', takeProfitResult.success ? '✅ SUCCESS' : '❌ FAILED');
|
||||
if (!takeProfitResult.success) {
|
||||
console.error('❌ Take-profit error:', takeProfitResult.error);
|
||||
}
|
||||
|
||||
// Verify orders were placed
|
||||
console.log('🔍 Verifying protective orders...');
|
||||
const ordersResponse = await fetch('http://localhost:9001/api/drift/orders');
|
||||
const ordersData = await ordersResponse.json();
|
||||
|
||||
const activeOrders = ordersData.orders.filter(order => order.isActive);
|
||||
console.log(`📊 Active protective orders: ${activeOrders.length}`);
|
||||
|
||||
activeOrders.forEach(order => {
|
||||
console.log(` ${order.direction} ${order.size} @ $${order.price} (${order.orderType})`);
|
||||
});
|
||||
|
||||
if (activeOrders.length === 0) {
|
||||
console.log('⚠️ WARNING: No active protective orders detected!');
|
||||
} else {
|
||||
console.log('✅ Position is now protected with stop-loss and take-profit orders');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Emergency risk management failed:', error);
|
||||
}
|
||||
}
|
||||
|
||||
emergencyRiskManagement();
|
||||
Reference in New Issue
Block a user