์ค๋ช
<!DOCTYPE html> <html lang="ar" dir="rtl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ูููู ุงูุฐูุงุก ุงูุงุตุทูุงุนู ููุชุฏุงูู</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>๐ค ์ธ๊ณต์ง๋ฅ ๊ฑฐ๋ ์์ด์ ํธ</h1> <p>๊ณ ๊ธ ์ธํ ์๋ ๊ฑฐ๋ ์์คํ </p> </div> <div class="status-bar"> <div class="status-item"> <h3>์์คํ ์ํ</h3> <div class="status-value"> <span id="system-status">์ค์ง๋จ</span> <span class="indicator inactive" id="system-indicator"></span> </div> </div> <div class="status-item"> <h3>์์ต/์์ค</h3> <div class="status-value" id="pnl">$0.00</div> </div> <div class="status-item"> <h3>๊ฑฐ๋ ํ์</h3> <div class="status-value" id="trades-count">0</div> </div> <div class="status-item"> <h3>์ฑ๊ณต๋ฅ </h3> <div class="status-value" id="success-rate">0%</div> </div> </div> <div class="controls"> <div class="control-panel"> <h3>โ๏ธ ๊ฑฐ๋ ์ค์ </h3> <div class="form-group"> <label>ํตํ ์</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>๊ฑฐ๋ ๊ท๋ชจ (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>๊ฑฐ๋ ์ ๋ต</label> <select id="strategy"> <option value="scalping">์ค์บํ</option> <option value="swing">์ค์ ํธ๋ ์ด๋ฉ</option> <option value="trend">์ถ์ธ ์ถ์ข </option> <option value="reversal">๋ฐ์ </option> </select> </div> </div> <div class="control-panel"> <h3>๐ก๏ธ ๋ฆฌ์คํฌ ๊ด๋ฆฌ</h3> <div class="form-group"> <label>์์ ๋งค (ํฌ์ธํธ)</label> <input type="number" id="stop-loss" value="20" min="5" max="500"> </div> <div class="form-group"> <label>์ด์ต ์คํ (ํฌ์ธํธ)</label> <input type="number" id="take-profit" value="30" min="10" max="1000"> </div> <div class="form-group"> <label>์ต๋ ๋ฆฌ์คํฌ (%)</label> <input type="number" id="max-risk" value="2" min="0.5" max="10" step="0.1"> </div> </div> <div class="control-panel"> <h3>๐ ๊ธฐ์ ์งํ</h3> <div class="form-group"> <label> <input type="checkbox" id="use-ma" checked> ์ด๋ํ๊ท ์ ์ฌ์ฉ </label> </div> <div class="form-group"> <label> <input type="checkbox" id="use-rsi" checked> RSI ์ฌ์ฉ </label> </div> <div class="form-group"> <label> <input type="checkbox" id="use-macd"> MACD ์ฌ์ฉ </label> </div> <div class="form-group"> <label> <input type="checkbox" id="use-bollinger"> ๋ณผ๋ฆฐ์ ๋ฐด๋ ์ฌ์ฉ </label> </div> </div> </div> <div style="text-align: center; margin: 20px 0;"> <button class="btn btn-primary" onclick="startTrading()">๐ ๊ฑฐ๋ ์์</button> <button class="btn btn-danger" onclick="stopTrading()">โน๏ธ ๊ฑฐ๋ ์ค์ง</button> <button class="btn btn-warning" onclick="pauseTrading()">โธ๏ธ ์ผ์ ์ค์ง</button> <button class="btn btn-warning" onclick="resetSystem()">๐ ์ด๊ธฐํ</button> </div> <div class="chart-container"> <h3>๐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง</h3> <p>์ค์๊ฐ ์ฑ๋ฅ ๋ถ์</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;"> ๋ง์ง๋ง ์ ๋ฐ์ดํธ: <span id="last-update">--</span> </p> </div> <div class="trading-log"> <h3>๐ ๊ฑฐ๋ ๊ธฐ๋ก</h3> <div id="log-container"> <div class="log-entry info"> <strong>์ ๋ณด:</strong> ์์คํ ์ด ๊ฑฐ๋ ์ค๋น ์๋ฃ๋์์ต๋๋ค. ์์ํ๋ ค๋ฉด "๊ฑฐ๋ ์์"์ ๋๋ฌ์ฃผ์ธ์. </div> </div> </div> </div> <script> // ์์คํ ๋ณ์ let isTrading = false; let isPaused = false; let tradingInterval; let totalTrades = 0; let successfulTrades = 0; let currentPnL = 0; let marketData = {}; // ์ํ ์ ๋ฐ์ดํธ 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'}`; } // ํต๊ณ ์ ๋ฐ์ดํธ 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'; } // ๋ก๊ทธ ์ถ๊ฐ 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); // ์ต๊ทผ 50๊ฐ ๋ก๊ทธ๋ง ์ ์ง if (logContainer.children.length > 50) { logContainer.removeChild(logContainer.lastChild); } } // ์์ฅ ๋ฐ์ดํฐ ์๋ฎฌ๋ ์ด์ 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 }; }); } // ์ ํธ ๋ถ์ 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; // RSI ๋ถ์ if (useRSI) { if (data.rsi < 30) { signal = 'BUY'; confidence += 0.3; } else if (data.rsi > 70) { signal = 'SELL'; confidence += 0.3; } } // ์ด๋ํ๊ท ์ ๋ถ์ if (useMA) { if (data.price > data.ma) { if (signal === 'BUY' || signal === null) { signal = 'BUY'; confidence += 0.3; } } else { if (signal === 'SELL' || signal === null) { signal = 'SELL'; confidence += 0.3; } } } // ์ ๋ต ๋ถ์ if (strategy === 'scalping') { confidence += 0.2; } else if (strategy === 'trend') { confidence += 0.4; } return { signal, confidence }; } // ๊ฑฐ๋ ์คํ function executeTrade(signal, confidence) { if (confidence < 0.6) return; // ์ต์ ์ ๋ขฐ๋ 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++; // ๊ฑฐ๋ ๊ฒฐ๊ณผ ์๋ฎฌ๋ ์ด์ const success = Math.random() < confidence; const pnl = success ? (parseFloat(takeProfit) * parseFloat(lotSize) * 10) : (-parseFloat(stopLoss) * parseFloat(lotSize) * 10); currentPnL += pnl; if (success) { successfulTrades++; addLogEntry(`์ฑ๊ณต ๊ฑฐ๋: ${signal} ${pair} - ์์ต: +$${pnl.toFixed(2)}`, 'success'); } else { addLogEntry(`์คํจ ๊ฑฐ๋: ${signal} ${pair} - ์์ค: -$${Math.abs(pnl).toFixed(2)}`, 'error'); } updateStats(); } // ๋ฉ์ธ ๊ฑฐ๋ ๋ฃจํ function tradingLoop() { if (!isTrading || isPaused) return; generateMarketData(); const analysis = analyzeSignals(); if (analysis && analysis.signal) { addLogEntry(`์ ํธ ๊ฐ์ง๋จ: ${analysis.signal} - ์ ๋ขฐ๋: ${(analysis.confidence * 100).toFixed(1)}%`, 'info'); executeTrade(analysis.signal, analysis.confidence); } // ์งํ ๋ฐ ์ ๋ฐ์ดํธ const progress = document.getElementById('performance-progress'); progress.style.width = Math.min((successfulTrades / Math.max(totalTrades, 1)) * 100, 100) + '%'; // ๋ง์ง๋ง ์ ๋ฐ์ดํธ ์ ๋ฐ์ดํธ document.getElementById('last-update').textContent = new Date().toLocaleTimeString('ar-SA'); } // ๊ฑฐ๋ ์์ function startTrading() { if (isTrading) return; isTrading = true; isPaused = false; updateSystemStatus('์๋ ์ค', true); addLogEntry('์๋ ๊ฑฐ๋ ์์๋จ', 'success'); tradingInterval = setInterval(tradingLoop, 3000); // 3์ด๋ง๋ค } // ๊ฑฐ๋ ์ค์ง function stopTrading() { if (!isTrading) return; isTrading = false; isPaused = false; updateSystemStatus('์ค์ง๋จ', false); addLogEntry('๊ฑฐ๋ ์ค์ง๋จ', 'error'); clearInterval(tradingInterval); } // ์ผ์ ์ค์ง function pauseTrading() { if (!isTrading) return; isPaused = !isPaused; updateSystemStatus(isPaused ? '์ผ์ ์ค์ง๋จ' : '์๋ ์ค', !isPaused); addLogEntry(isPaused ? '๊ฑฐ๋ ์ผ์ ์ค์ง๋จ' : '๊ฑฐ๋ ์ฌ๊ฐ๋จ', 'info'); } // ์์คํ ์ด๊ธฐํ function resetSystem() { stopTrading(); totalTrades = 0; successfulTrades = 0; currentPnL = 0; updateStats(); const logContainer = document.getElementById('log-container'); logContainer.innerHTML = ` <div class="log-entry info"> <strong>์ ๋ณด:</strong> ์์คํ ์ด ์ด๊ธฐํ๋์์ต๋๋ค. ๋ค์ ๊ฑฐ๋ํ ์ค๋น๊ฐ ๋์์ต๋๋ค. </div> `; document.getElementById('performance-progress').style.width = '0%'; document.getElementById('last-update').textContent = '--'; } // ์์คํ ์ด๊ธฐํ document.addEventListener('DOMContentLoaded', function() { generateMarketData(); updateStats(); addLogEntry('์์คํ ์ด ์ฑ๊ณต์ ์ผ๋ก ๋ก๋๋์์ต๋๋ค', 'success'); }); </script> </body> </html>
์์ฝ
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.
