Files
trading_bot_v3/test-drift-minimum-percentages-simple.js
mindesbunister 9c4bee0dd7 feat: Remove artificial percentage minimums - AI now has complete freedom
REMOVED ARTIFICIAL CONSTRAINTS:
- Eliminated 3% minimum stop loss requirement
- Eliminated 1% minimum take profit requirement
- AI can now choose ANY percentage based on market analysis

- Updated app/api/drift/trade/route.js to use exact AI percentages
- Removed Math.max() constraints that forced minimums
- AI now has 0.1%+ to 50%+ percentage freedom

- Modified AI_RISK_MANAGEMENT.md to reflect new freedom
- Removed all references to artificial 3%/1% minimums
- Added ultra-tight scalping examples (0.1%-1%)
- Updated volatility guidelines for all trading styles

 PROVEN WITH REAL ORDERS:
- Transaction: 35QmCqWFzwJ1X2nm5M8rgExKEMbWTRqxCa1GryEsR595zYwBLqCzDowUYm3J2u13WMvYR2PRoS3eAMSzXfGvEVbe
- Confirmed: 0.5% SL / 0.25% TP working on Drift Protocol
- Verified: Orders visible in Drift UI with correct trigger prices

- Optimal risk management based on actual market conditions
- Support for all trading styles: scalping to position trading
- No more forced suboptimal stops due to artificial limits
- Professional-grade percentage precision

The AI can now freely optimize percentages for maximum trading effectiveness!
2025-07-24 09:58:30 +02:00

219 lines
8.7 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Simplified test for minimum percentages focusing on order validation
* This test simulates order placement without requiring full Drift Protocol connection
*/
// Simulate the current minimum percentage validation from the trading API
function validateOrderPercentages(stopLossPercent, takeProfitPercent, currentPrice = 200) {
console.log(`\n🧪 Testing SL: ${stopLossPercent}% / TP: ${takeProfitPercent}%`);
try {
// Current minimums from app/api/drift/trade/route.js
const currentMinimumSL = 0.03; // 3%
const currentMinimumTP = 0.01; // 1%
// Apply current minimum enforcement
const stopLossPercentCalc = Math.max(stopLossPercent / 100, currentMinimumSL);
const takeProfitPercentCalc = Math.max(takeProfitPercent / 100, currentMinimumTP);
// Calculate prices
const stopLossPrice = currentPrice * (1 - stopLossPercentCalc);
const takeProfitPrice = currentPrice * (1 + takeProfitPercentCalc);
console.log(` 📊 Current price: $${currentPrice.toFixed(4)}`);
console.log(` 🛑 Stop Loss: $${stopLossPrice.toFixed(4)} (${(stopLossPercentCalc * 100).toFixed(2)}% below)`);
console.log(` 💰 Take Profit: $${takeProfitPrice.toFixed(4)} (${(takeProfitPercentCalc * 100).toFixed(2)}% above)`);
// Price difference validation (minimum tick size simulation)
const stopLossDiff = Math.abs(currentPrice - stopLossPrice);
const takeProfitDiff = Math.abs(takeProfitPrice - currentPrice);
console.log(` 💹 Price differences: SL: $${stopLossDiff.toFixed(4)}, TP: $${takeProfitDiff.toFixed(4)}`);
// Simulate minimum price difference requirements
const minimumPriceDiff = 0.01; // $0.01 minimum difference
if (stopLossDiff < minimumPriceDiff) {
throw new Error(`Stop loss too close to entry (${stopLossDiff.toFixed(4)} < ${minimumPriceDiff})`);
}
if (takeProfitDiff < minimumPriceDiff) {
throw new Error(`Take profit too close to entry (${takeProfitDiff.toFixed(4)} < ${minimumPriceDiff})`);
}
// Check if minimums were enforced
const slEnforced = stopLossPercentCalc > stopLossPercent / 100;
const tpEnforced = takeProfitPercentCalc > takeProfitPercent / 100;
if (slEnforced) {
console.log(` ⚠️ Stop loss minimum enforced: ${stopLossPercent}% → ${(stopLossPercentCalc * 100).toFixed(1)}%`);
}
if (tpEnforced) {
console.log(` ⚠️ Take profit minimum enforced: ${takeProfitPercent}% → ${(takeProfitPercentCalc * 100).toFixed(1)}%`);
}
if (!slEnforced && !tpEnforced) {
console.log(` ✅ No minimums enforced - percentages accepted as-is`);
}
return {
success: true,
originalSL: stopLossPercent,
originalTP: takeProfitPercent,
enforcedSL: stopLossPercentCalc * 100,
enforcedTP: takeProfitPercentCalc * 100,
slEnforced,
tpEnforced,
stopLossPrice,
takeProfitPrice
};
} catch (error) {
console.log(` ❌ FAILED: ${error.message}`);
return {
success: false,
error: error.message,
originalSL: stopLossPercent,
originalTP: takeProfitPercent
};
}
}
// Test various percentage combinations
function runComprehensiveTest() {
console.log('🎯 Drift Protocol Minimum Percentage Analysis');
console.log(' Simulating current API validation logic');
console.log(' Current minimums: 3% SL / 1% TP\n');
const testCases = [
// Scalping scenarios (what we want to achieve)
{ sl: 0.5, tp: 0.3, desc: 'Ultra-tight scalping' },
{ sl: 0.8, tp: 0.5, desc: 'Tight scalping' },
{ sl: 1.0, tp: 0.5, desc: 'Moderate scalping' },
{ sl: 1.5, tp: 0.8, desc: 'Conservative scalping' },
// Current system minimums
{ sl: 3.0, tp: 1.0, desc: 'Current minimums' },
// Proposed new minimums for testing
{ sl: 2.0, tp: 0.8, desc: 'Proposed: 2%/0.8%' },
{ sl: 1.5, tp: 0.6, desc: 'Proposed: 1.5%/0.6%' },
{ sl: 1.0, tp: 0.5, desc: 'Proposed: 1%/0.5%' },
];
const results = [];
console.log('📋 Current System Behavior (3% SL / 1% TP minimums):');
console.log('=' .repeat(60));
for (const testCase of testCases) {
console.log(`\n📝 ${testCase.desc}:`);
const result = validateOrderPercentages(testCase.sl, testCase.tp);
results.push(result);
}
// Generate recommendations
console.log('\n\n💡 ANALYSIS & RECOMMENDATIONS');
console.log('=' .repeat(60));
const scalpingTests = results.slice(0, 4); // First 4 are scalping tests
const allEnforced = scalpingTests.every(r => r.slEnforced || r.tpEnforced);
if (allEnforced) {
console.log('❌ Current minimums are TOO HIGH for scalping strategies');
console.log(' All scalping percentages get enforced to higher values');
console.log('\n🎯 RECOMMENDED ACTION:');
console.log(' Test lower minimums with real Drift orders:');
console.log(' - Start with 1.5% SL / 0.6% TP');
console.log(' - If successful, try 1% SL / 0.5% TP');
console.log(' - Monitor order rejection rates');
console.log('\n📝 CODE CHANGES NEEDED:');
console.log(' File: app/api/drift/trade/route.js');
console.log(' Lines 273-274:');
console.log(' // Test these progressively:');
console.log(' const stopLossPercentCalc = Math.max(stopLossPercent / 100, 0.015) // 1.5% minimum');
console.log(' const takeProfitPercentCalc = Math.max(takeProfitPercent / 100, 0.006) // 0.6% minimum');
} else {
console.log('✅ Some scalping percentages work with current minimums');
}
// Show specific scalping impact
console.log('\n📊 SCALPING STRATEGY IMPACT:');
scalpingTests.forEach((result, index) => {
const testCase = testCases[index];
if (result.success) {
const slIncrease = result.enforcedSL - result.originalSL;
const tpIncrease = result.enforcedTP - result.originalTP;
if (slIncrease > 0 || tpIncrease > 0) {
console.log(` ${testCase.desc}:`);
if (slIncrease > 0) {
console.log(` - Stop Loss forced from ${result.originalSL}% to ${result.enforcedSL.toFixed(1)}% (+${slIncrease.toFixed(1)}%)`);
}
if (tpIncrease > 0) {
console.log(` - Take Profit forced from ${result.originalTP}% to ${result.enforcedTP.toFixed(1)}% (+${tpIncrease.toFixed(1)}%)`);
}
}
}
});
// Market context
console.log('\n📈 MARKET CONTEXT CONSIDERATIONS:');
console.log(' - SOL volatility: ~2-5% daily average');
console.log(' - Minimum tick size: 0.0001 (~$0.00002 at $200)');
console.log(' - Spread: typically 0.01-0.05%');
console.log(' - Slippage: 0.05-0.2% for small orders');
console.log('\n🔄 TESTING STRATEGY:');
console.log(' 1. Implement 1.5%/0.6% minimums in code');
console.log(' 2. Test with $1-5 positions first');
console.log(' 3. Monitor order acceptance rates');
console.log(' 4. Gradually reduce if successful');
console.log(' 5. Consider dynamic minimums based on volatility');
}
// Risk analysis for different minimum levels
function analyzeRiskLevels() {
console.log('\n\n⚠ RISK ANALYSIS FOR REDUCED MINIMUMS');
console.log('=' .repeat(60));
const scenarios = [
{ sl: 0.5, tp: 0.3, risk: 'EXTREME', desc: 'Very high noise sensitivity' },
{ sl: 1.0, tp: 0.5, risk: 'HIGH', desc: 'High noise sensitivity, good for stable conditions' },
{ sl: 1.5, tp: 0.6, risk: 'MODERATE', desc: 'Balanced for scalping, manageable risk' },
{ sl: 2.0, tp: 0.8, risk: 'LOW', desc: 'Conservative scalping, lower noise impact' }
];
scenarios.forEach(scenario => {
console.log(`\n${scenario.sl}% SL / ${scenario.tp}% TP - Risk: ${scenario.risk}`);
console.log(` ${scenario.desc}`);
// Calculate position sizing impact
const accountBalance = 1000; // $1000 example
const riskPerTrade = accountBalance * (scenario.sl / 100);
const maxPositionSize = accountBalance * 0.02 / (scenario.sl / 100); // 2% account risk
console.log(` - Risk per trade: $${riskPerTrade.toFixed(2)} (${scenario.sl}% of position)`);
console.log(` - Max position size: $${maxPositionSize.toFixed(2)} (2% account risk)`);
// Noise impact
const noiseThreshold = scenario.sl * 0.3; // 30% of SL
console.log(` - Noise threshold: ${noiseThreshold.toFixed(2)}% (stops at 30% of normal volatility)`);
});
}
// Main execution
console.log('🚀 Starting Drift Protocol Minimum Percentage Analysis\n');
runComprehensiveTest();
analyzeRiskLevels();
console.log('\n\n🎯 NEXT STEPS:');
console.log('1. Implement reduced minimums in app/api/drift/trade/route.js');
console.log('2. Test with small real positions');
console.log('3. Monitor execution success rates');
console.log('4. Document findings and adjust accordingly');