Penerangan
<!DOCTYPE html> <html lang="ar" dir="rtl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Ejen Kecerdasan Buatan untuk Perdagangan</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Arial', sans-serif; background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%); color: white; min-height: 100vh; padding: 20px; } .container { max-width: 1200px; margin: 0 auto; background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(10px); border-radius: 20px; padding: 30px; box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3); } .header { text-align: center; margin-bottom: 30px; border-bottom: 2px solid rgba(255, 255, 255, 0.2); padding-bottom: 20px; } .header h1 { font-size: 2.5em; margin-bottom: 10px; text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); } .status-bar { display: flex; justify-content: space-around; margin-bottom: 30px; flex-wrap: wrap; } .status-item { background: rgba(255, 255, 255, 0.15); padding: 15px; border-radius: 10px; min-width: 150px; text-align: center; margin: 5px; border: 1px solid rgba(255, 255, 255, 0.2); } .status-item h3 { margin-bottom: 5px; font-size: 0.9em; opacity: 0.8; } .status-value { font-size: 1.2em; font-weight: bold; } .controls { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; margin-bottom: 30px; } .control-panel { background: rgba(255, 255, 255, 0.1); padding: 20px; border-radius: 15px; border: 1px solid rgba(255, 255, 255, 0.2); } .control-panel h3 { margin-bottom: 15px; color: #FFD700; font-size: 1.1em; } .form-group { margin-bottom: 15px; } .form-group label { display: block; margin-bottom: 5px; font-size: 0.9em; opacity: 0.9; } .form-group input, .form-group select { width: 100%; padding: 10px; border: none; border-radius: 8px; background: rgba(255, 255, 255, 0.15); color: white; font-size: 0.9em; } .form-group input::placeholder { color: rgba(255, 255, 255, 0.7); } .btn { padding: 12px 25px; border: none; border-radius: 8px; cursor: pointer; font-size: 1em; font-weight: bold; transition: all 0.3s ease; margin: 5px; } .btn-primary { background: linear-gradient(45deg, #00c853, #00e676); color: white; } .btn-danger { background: linear-gradient(45deg, #f44336, #ff5722); color: white; } .btn-warning { background: linear-gradient(45deg, #ff9800, #ffc107); color: white; } .btn:hover { transform: translateY(-2px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); } .trading-log { background: rgba(0, 0, 0, 0.3); border-radius: 15px; padding: 20px; margin-top: 20px; max-height: 300px; overflow-y: auto; border: 1px solid rgba(255, 255, 255, 0.2); } .log-entry { padding: 10px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); margin-bottom: 10px; border-radius: 8px; } .log-entry.success { background: rgba(76, 175, 80, 0.2); border-left: 4px solid #4CAF50; } .log-entry.error { background: rgba(244, 67, 54, 0.2); border-left: 4px solid #f44336; } .log-entry.info { background: rgba(33, 150, 243, 0.2); border-left: 4px solid #2196F3; } .chart-container { background: rgba(255, 255, 255, 0.1); border-radius: 15px; padding: 20px; margin-top: 20px; text-align: center; border: 1px solid rgba(255, 255, 255, 0.2); } .indicator { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-left: 5px; } .indicator.active { background: #4CAF50; animation: pulse 2s infinite; } .indicator.inactive { background: #f44336; } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.2); } 100% { transform: scale(1); } } .progress-bar { width: 100%; height: 8px; background: rgba(255, 255, 255, 0.2); border-radius: 4px; overflow: hidden; margin-top: 10px; } .progress-fill { height: 100%; background: linear-gradient(90deg, #00c853, #00e676); width: 0%; transition: width 0.3s ease; } @media (max-width: 768px) { .controls { grid-template-columns: 1fr; } .status-bar { flex-direction: column; align-items: center; } .container { padding: 20px; } } </style> </head> <body> <div class="container"> <div class="header"> <h1>🤖 Ejen Kecerdasan Buatan untuk Perdagangan</h1> <p>Sistem Perdagangan Automatik Forex yang Canggih</p> </div> <div class="status-bar"> <div class="status-item"> <h3>Status Sistem</h3> <div class="status-value"> <span id="system-status">Berhenti</span> <span class="indicator inactive" id="system-indicator"></span> </div> </div> <div class="status-item"> <h3>Keuntungan/Kerugian</h3> <div class="status-value" id="pnl">$0.00</div> </div> <div class="status-item"> <h3>Bilangan Dagangan</h3> <div class="status-value" id="trades-count">0</div> </div> <div class="status-item"> <h3>Kadar Kejayaan</h3> <div class="status-value" id="success-rate">0%</div> </div> </div> <div class="controls"> <div class="control-panel"> <h3>⚙️ Tetapan Perdagangan</h3> <div class="form-group"> <label>Pasangan Mata Wang</label> <select id="currency-pair"> <option value="EURUSD">EUR/USD</option> <option value="GBPUSD">GBP/USD</option> <option value="USDJPY">USD/JPY</option> <option value="USDCHF">USD/CHF</option> <option value="AUDUSD">AUD/USD</option> </select> </div> <div class="form-group"> <label>Saiz Lot</label> <input type="number" id="lot-size" value="0.01" min="0.01" max="10" step="0.01"> </div> <div class="form-group"> <label>Strategi Perdagangan</label> <select id="strategy"> <option value="scalping">Scalping</option> <option value="swing">Perdagangan Ayunan</option> <option value="trend">Penjejakan Trend</option> <option value="reversal">Pembalikan</option> </select> </div> </div> <div class="control-panel"> <h3>🛡️ Pengurusan Risiko</h3> <div class="form-group"> <label>Henti Rugi (Poin)</label> <input type="number" id="stop-loss" value="20" min="5" max="500"> </div> <div class="form-group"> <label>Ambil Untung (Poin)</label> <input type="number" id="take-profit" value="30" min="10" max="1000"> </div> <div class="form-group"> <label>Risiko Maksimum (%)</label> <input type="number" id="max-risk" value="2" min="0.5" max="10" step="0.1"> </div> </div> <div class="control-panel"> <h3>📊 Penunjuk Teknikal</h3> <div class="form-group"> <label> <input type="checkbox" id="use-ma" checked> Gunakan Purata Pergerakan </label> </div> <div class="form-group"> <label> <input type="checkbox" id="use-rsi" checked> Gunakan RSI </label> </div> <div class="form-group"> <label> <input type="checkbox" id="use-macd"> Gunakan MACD </label> </div> <div class="form-group"> <label> <input type="checkbox" id="use-bollinger"> Gunakan Bollinger Bands </label> </div> </div> </div> <div style="text-align: center; margin: 20px 0;"> <button class="btn btn-primary" onclick="startTrading()">🚀 Mula Berdagang</button> <button class="btn btn-danger" onclick="stopTrading()">⏹️ Hentikan Perdagangan</button> <button class="btn btn-warning" onclick="pauseTrading()">⏸️ Jeda</button> <button class="btn btn-warning" onclick="resetSystem()">🔄 Tetapkan Semula</button> </div> <div class="chart-container"> <h3>📈 Pemantauan Prestasi</h3> <p>Analisis Prestasi Masa Nyata</p> <div class="progress-bar"> <div class="progress-fill" id="performance-progress"></div> </div> <p style="margin-top: 10px; font-size: 0.9em; opacity: 0.8;"> Kemas Kini Terakhir: <span id="last-update">--</span> </p> </div> <div class="trading-log"> <h3>📋 Log Perdagangan</h3> <div id="log-container"> <div class="log-entry info"> <strong>Maklumat:</strong> Sistem sedia untuk berdagang. Sila tekan "Mula Berdagang" untuk memulakan. </div> </div> </div> </div> <script> // Pembolehubah sistem let isTrading = false; let isPaused = false; let tradingInterval; let totalTrades = 0; let successfulTrades = 0; let currentPnL = 0; let marketData = {}; // Kemas kini status function updateSystemStatus(status, isActive) { const statusEl = document.getElementById('system-status'); const indicatorEl = document.getElementById('system-indicator'); statusEl.textContent = status; indicatorEl.className = `indicator ${isActive ? 'active' : 'inactive'}`; } // Kemas kini statistik function updateStats() { document.getElementById('trades-count').textContent = totalTrades; document.getElementById('success-rate').textContent = totalTrades > 0 ? Math.round((successfulTrades / totalTrades) * 100) + '%' : '0%'; document.getElementById('pnl').textContent = (currentPnL >= 0 ? '+' : '') + '$' + currentPnL.toFixed(2); document.getElementById('pnl').style.color = currentPnL >= 0 ? '#4CAF50' : '#f44336'; } // Tambah log function addLogEntry(message, type = 'info') { const logContainer = document.getElementById('log-container'); const entry = document.createElement('div'); entry.className = `log-entry ${type}`; const timestamp = new Date().toLocaleTimeString('ar-SA'); entry.innerHTML = `<strong>${timestamp}:</strong> ${message}`; logContainer.insertBefore(entry, logContainer.firstChild); // Kekalkan hanya 50 log terakhir if (logContainer.children.length > 50) { logContainer.removeChild(logContainer.lastChild); } } // Simulasi data pasaran function generateMarketData() { const pairs = ['EURUSD', 'GBPUSD', 'USDJPY', 'USDCHF', 'AUDUSD']; pairs.forEach(pair => { marketData[pair] = { price: Math.random() * 2 + 1, change: (Math.random() - 0.5) * 0.01, volume: Math.floor(Math.random() * 1000000), rsi: Math.floor(Math.random() * 100), ma: Math.random() * 2 + 1 }; }); } // Analisis isyarat function analyzeSignals() { const pair = document.getElementById('currency-pair').value; const strategy = document.getElementById('strategy').value; const useMA = document.getElementById('use-ma').checked; const useRSI = document.getElementById('use-rsi').checked; const data = marketData[pair]; if (!data) return null; let signal = null; let confidence = 0; // Analisis RSI if (useRSI) { if (data.rsi < 30) { signal = 'BELI'; confidence += 0.3; } else if (data.rsi > 70) { signal = 'JUAL'; confidence += 0.3; } } // Analisis purata bergerak if (useMA) { if (data.price > data.ma) { if (signal === 'BELI' || signal === null) { signal = 'BELI'; confidence += 0.3; } } else { if (signal === 'JUAL' || signal === null) { signal = 'JUAL'; confidence += 0.3; } } } // Analisis strategi if (strategy === 'scalping') { confidence += 0.2; } else if (strategy === 'trend') { confidence += 0.4; } return { signal, confidence }; } // Laksanakan dagangan function executeTrade(signal, confidence) { if (confidence < 0.6) return; // had minimum keyakinan const pair = document.getElementById('currency-pair').value; const lotSize = document.getElementById('lot-size').value; const stopLoss = document.getElementById('stop-loss').value; const takeProfit = document.getElementById('take-profit').value; totalTrades++; // simulasi hasil dagangan const success = Math.random() < confidence; const pnl = success ? (parseFloat(takeProfit) * parseFloat(lotSize) * 10) : (-parseFloat(stopLoss) * parseFloat(lotSize) * 10); currentPnL += pnl; if (success) { successfulTrades++; addLogEntry(`Dagangan berjaya: ${signal} ${pair} - Keuntungan: +$${pnl.toFixed(2)}`, 'success'); } else { addLogEntry(`Dagangan rugi: ${signal} ${pair} - Kerugian: -$${Math.abs(pnl).toFixed(2)}`, 'error'); } updateStats(); } // Gelung dagangan utama function tradingLoop() { if (!isTrading || isPaused) return; generateMarketData(); const analysis = analyzeSignals(); if (analysis && analysis.signal) { addLogEntry(`Isyarat dikesan: ${analysis.signal} - Keyakinan: ${(analysis.confidence * 100).toFixed(1)}%`, 'info'); executeTrade(analysis.signal, analysis.confidence); } // kemas kini bar kemajuan const progress = document.getElementById('performance-progress'); progress.style.width = Math.min((successfulTrades / Math.max(totalTrades, 1)) * 100, 100) + '%'; // kemas kini kemas kini terakhir document.getElementById('last-update').textContent = new Date().toLocaleTimeString('ar-SA'); } // Mula berdagang function startTrading() { if (isTrading) return; isTrading = true; isPaused = false; updateSystemStatus('Berjalan', true); addLogEntry('Perdagangan automatik dimulakan', 'success'); tradingInterval = setInterval(tradingLoop, 3000); // setiap 3 saat } // Hentikan perdagangan function stopTrading() { if (!isTrading) return; isTrading = false; isPaused = false; updateSystemStatus('Berhenti', false); addLogEntry('Perdagangan dihentikan', 'error'); clearInterval(tradingInterval); } // Jeda function pauseTrading() { if (!isTrading) return; isPaused = !isPaused; updateSystemStatus(isPaused ? 'Jeda' : 'Berjalan', !isPaused); addLogEntry(isPaused ? 'Perdagangan dijeda' : 'Perdagangan disambung semula', 'info'); } // Tetapkan semula sistem function resetSystem() { stopTrading(); totalTrades = 0; successfulTrades = 0; currentPnL = 0; updateStats(); const logContainer = document.getElementById('log-container'); logContainer.innerHTML = ` <div class="log-entry info"> <strong>Maklumat:</strong> Sistem telah ditetapkan semula. Sedia untuk berdagang semula. </div> `; document.getElementById('performance-progress').style.width = '0%'; document.getElementById('last-update').textContent = '--'; } // Inisialisasi sistem document.addEventListener('DOMContentLoaded', function() { generateMarketData(); updateStats(); addLogEntry('Sistem berjaya dimuatkan', 'success'); }); </script> </body> </html>
Ringkasan
The system integrates technical indicators like Moving Average (MA), Relative Strength Index (RSI), MACD, and Bollinger Bands to analyze market signals and generate trade decisions. It evaluates signal confidence before executing trades, simulating outcomes based on configured parameters. Real-time performance monitoring includes profit/loss tracking, trade count, and success rate, with a detailed trading log for transparency.
Control features allow starting, stopping, pausing, and resetting the trading process. The interface provides a status overview and performance progress visualization, supporting informed management of automated trading activities.
