The site was mothballed for a long time. Nobody is following this NYSE ADV ROC system so we need a matrix of perhaps dozens of other lookbacks to add a derivative (choice)? Yeah, I don't think so. He's clearly freaking out and trying to prove that a Sharpe <1 is better than it is.
It took me all of three minutes to solve for the methodology of his crap from perusing the entries. How? Hitting the ceiling on WAIS. Sorry if it hurts his feels but no regerts.
anyone can use it at https://www.oddball.systems/portdata/ this will take up to 10 systems data files and compare the profit factor of each and determine which is the best system to trade at the time. it updates in real time so it stays current. below is the html code for the page so you can have it locally or on a server. Code: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Multi-System Profit Factor Comparison Dashboard</title> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: linear-gradient(135deg, #0f172a 0%, #1e293b 50%, #334155 100%); color: #fff; min-height: 100vh; padding: 20px; } .container { max-width: 1800px; margin: 0 auto; } .header { text-align: center; margin-bottom: 30px; padding: 30px; background: rgba(255, 255, 255, 0.1); border-radius: 20px; backdrop-filter: blur(15px); border: 1px solid rgba(255, 255, 255, 0.2); } h1 { font-size: 2.5em; margin-bottom: 10px; background: linear-gradient(135deg, #3b82f6, #8b5cf6, #10b981); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .file-upload-section { background: rgba(255, 255, 255, 0.1); padding: 25px; border-radius: 20px; backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.2); margin-bottom: 30px; } .upload-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 15px; margin-top: 20px; } .file-upload-item { display: flex; flex-direction: column; gap: 10px; } .system-name-input { padding: 8px 12px; background: rgba(255, 255, 255, 0.1); border: 1px solid rgba(255, 255, 255, 0.3); border-radius: 8px; color: #fff; font-size: 0.9em; } .system-name-input::placeholder { color: rgba(255, 255, 255, 0.6); } .file-label { display: inline-block; padding: 12px 20px; background: linear-gradient(135deg, #3b82f6, #8b5cf6); border-radius: 10px; cursor: pointer; transition: all 0.3s; font-weight: 600; font-size: 0.95em; text-align: center; } .file-label:hover { transform: translateY(-2px); box-shadow: 0 5px 20px rgba(59, 130, 246, 0.4); } .file-label.loaded { background: linear-gradient(135deg, #10b981, #059669); } input[type="file"] { display: none; } .performance-ranking { background: rgba(255, 255, 255, 0.1); padding: 25px; border-radius: 20px; backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.2); margin-bottom: 30px; } .ranking-title { text-align: center; font-size: 1.5em; font-weight: bold; color: #3b82f6; margin-bottom: 20px; } .ranking-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 15px; } .ranking-item { background: rgba(255, 255, 255, 0.05); padding: 15px; border-radius: 10px; border: 2px solid transparent; transition: all 0.3s; display: flex; justify-content: space-between; align-items: center; } .ranking-item.winner { border-color: #00ff88; background: rgba(0, 255, 136, 0.1); box-shadow: 0 0 20px rgba(0, 255, 136, 0.3); } .ranking-item.second { border-color: #3b82f6; background: rgba(59, 130, 246, 0.1); } .ranking-item.third { border-color: #f59e0b; background: rgba(245, 158, 11, 0.1); } .rank-number { font-size: 1.5em; font-weight: bold; min-width: 30px; } .system-info { flex: 1; margin-left: 15px; } .system-name { font-weight: bold; font-size: 1.1em; } .system-stats { font-size: 0.85em; opacity: 0.8; margin-top: 5px; } .performance-value { font-size: 1.3em; font-weight: bold; } .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; margin-bottom: 30px; } .stat-card { background: rgba(255, 255, 255, 0.1); padding: 25px; border-radius: 15px; text-align: center; backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.2); transition: transform 0.3s; } .stat-card:hover { transform: translateY(-5px); } .stat-value { font-size: 2.5em; font-weight: bold; margin-bottom: 5px; } .stat-label { font-size: 0.9em; opacity: 0.8; text-transform: uppercase; letter-spacing: 1px; } .positive { color: #10b981; } .negative { color: #ef4444; } .neutral { color: #f59e0b; } .excellent { color: #00ff88; } .chart-container { background: rgba(255, 255, 255, 0.1); padding: 25px; border-radius: 20px; backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.2); margin-bottom: 30px; height: 600px; } .chart-title { text-align: center; margin-bottom: 20px; font-size: 1.5em; font-weight: bold; color: #3b82f6; } .chart-controls { display: flex; justify-content: center; gap: 15px; margin-bottom: 20px; flex-wrap: wrap; } .chart-toggle { padding: 8px 16px; background: rgba(255, 255, 255, 0.1); border: 1px solid rgba(255, 255, 255, 0.3); border-radius: 20px; color: #fff; cursor: pointer; transition: all 0.3s; font-size: 0.9em; } .chart-toggle.active { background: #3b82f6; border-color: #3b82f6; } .info-text { text-align: center; color: #94a3b8; font-size: 0.9em; margin-top: 10px; } .clear-all-btn { background: linear-gradient(135deg, #ef4444, #dc2626); color: white; border: none; padding: 10px 20px; border-radius: 8px; cursor: pointer; font-weight: 600; transition: all 0.3s; margin-top: 15px; } .clear-all-btn:hover { transform: translateY(-2px); box-shadow: 0 5px 15px rgba(239, 68, 68, 0.4); } </style> </head> <body> <div class="container"> <div class="header"> <h1> Multi-System Performance Dashboard</h1> <p id="subtitle">Load up to 10 trading systems for comparison</p> </div> <div class="file-upload-section"> <h3 style="text-align: center; margin-bottom: 20px;"> System Data Upload</h3> <div class="upload-grid" id="uploadGrid"> <!-- Upload slots will be generated here --> </div> <div style="text-align: center;"> <button class="clear-all-btn" onclick="clearAllSystems()">️ Clear All Systems</button> </div> </div> <div class="performance-ranking" id="performanceRanking" style="display: none;"> <div class="ranking-title"> System Performance Ranking</div> <div class="ranking-list" id="rankingList"> <!-- Rankings will be populated here --> </div> </div> <div class="stats-grid" id="statsGrid" style="display: none;"> <div class="stat-card"> <div class="stat-value neutral" id="totalSystems">0</div> <div class="stat-label">Systems Loaded</div> </div> <div class="stat-card"> <div class="stat-value" id="bestSystem">--</div> <div class="stat-label">Best Performer</div> </div> <div class="stat-card"> <div class="stat-value" id="avgPerformance">--</div> <div class="stat-label">Average PF</div> </div> <div class="stat-card"> <div class="stat-value" id="totalTrades">--</div> <div class="stat-label">Total Trades</div> </div> </div> <div class="chart-container" id="chartContainer" style="display: none;"> <div class="chart-title"> System Comparison Chart</div> <div class="chart-controls"> <button class="chart-toggle active" onclick="switchChartView('pf')">Profit Factor</button> <button class="chart-toggle" onclick="switchChartView('rolling')">Rolling Average</button> <button class="chart-toggle" onclick="switchChartView('both')">Both Lines</button> </div> <canvas id="comparisonChart"></canvas> <p class="info-text">Compare multiple trading systems performance over time</p> </div> </div> <script> let systems = {}; let comparisonChart = null; let currentChartView = 'pf'; // Color palette for different systems const systemColors = [ '#3b82f6', '#10b981', '#f59e0b', '#ef4444', '#8b5cf6', '#06b6d4', '#84cc16', '#f97316', '#ec4899', '#6366f1' ]; // Initialize upload slots function initializeUploadSlots() { const uploadGrid = document.getElementById('uploadGrid'); for (let i = 1; i <= 10; i++) { const uploadItem = document.createElement('div'); uploadItem.className = 'file-upload-item'; uploadItem.innerHTML = ` <input type="text" class="system-name-input" placeholder="System ${i} Name" id="systemName${i}"> <label for="csvFile${i}" class="file-label" id="fileLabel${i}"> Load System ${i} CSV </label> <input type="file" id="csvFile${i}" accept=".csv" onchange="handleFileUpload(${i}, event)"> `; uploadGrid.appendChild(uploadItem); } } function handleFileUpload(slotIndex, event) { const file = event.target.files[0]; if (file) { const systemNameInput = document.getElementById(`systemName${slotIndex}`); const fileLabel = document.getElementById(`fileLabel${slotIndex}`); // Use custom name or filename const systemName = systemNameInput.value.trim() || file.name.replace('.csv', ''); systemNameInput.value = systemName; fileLabel.innerHTML = ` ${file.name}`; fileLabel.classList.add('loaded'); const reader = new FileReader(); reader.onload = function(e) { processSystemCSV(slotIndex, systemName, e.target.result); }; reader.readAsText(file); } } function processSystemCSV(slotIndex, systemName, csvText) { const lines = csvText.trim().split('\n'); const data = []; let minTarget = 1.5; const FirstTradePFCap = 1.75; // Parse CSV for (let i = 1; i < lines.length; i++) { const cols = lines[i].split(','); if (cols.length >= 5) { let pf = parseFloat(cols[2]); let rollingPf = parseFloat(cols[3]); let tradingDays, tradeCount; if (cols.length === 7) { tradingDays = parseInt(cols[4]) || 0; tradeCount = parseInt(cols[5]) || 0; minTarget = parseFloat(cols[6]) || 1.5; } else if (cols.length === 6) { tradingDays = parseInt(cols[4]) || 0; tradeCount = parseInt(cols[5]) || 0; } else { tradingDays = 0; tradeCount = parseInt(cols[4]) || 0; } // Replace 0.00 values with FirstTradePFCap if (pf === 0.00) pf = FirstTradePFCap; if (rollingPf === 0.00) rollingPf = FirstTradePFCap; if (tradeCount === 1 && pf > 100) { pf = FirstTradePFCap; rollingPf = FirstTradePFCap; } if (!isNaN(pf) && !isNaN(rollingPf)) { data.push({ date: cols[0].trim(), time: cols[1].trim(), profitFactor: pf, rollingPF: rollingPf, tradingDays: tradingDays, tradeCount: tradeCount, minTarget: minTarget }); } } } if (data.length === 0) return; // Recalculate rolling PF after zero replacements let sumPF = 0; for (let i = 0; i < data.length; i++) { sumPF += data[i].profitFactor; data[i].rollingPF = sumPF / (i + 1); } // Store system data systems[slotIndex] = { name: systemName, data: data, color: systemColors[slotIndex - 1], minTarget: minTarget }; updateDashboard(); } function updateDashboard() { const systemCount = Object.keys(systems).length; if (systemCount === 0) { document.getElementById('performanceRanking').style.display = 'none'; document.getElementById('statsGrid').style.display = 'none'; document.getElementById('chartContainer').style.display = 'none'; return; } // Show sections document.getElementById('performanceRanking').style.display = 'block'; document.getElementById('statsGrid').style.display = 'grid'; document.getElementById('chartContainer').style.display = 'block'; updatePerformanceRanking(); updateStats(); updateChart(); } function updatePerformanceRanking() { const rankingList = document.getElementById('rankingList'); rankingList.innerHTML = ''; // Calculate current performance for each system const systemPerformance = Object.entries(systems).map(([id, system]) => { const lastData = system.data[system.data.length - 1]; return { id: id, name: system.name, currentPF: lastData.profitFactor, rollingPF: lastData.rollingPF, trades: lastData.tradeCount, tradingDays: lastData.tradingDays, color: system.color }; }); // Sort by rolling PF (better indicator of consistent performance) systemPerformance.sort((a, b) => b.rollingPF - a.rollingPF); systemPerformance.forEach((system, index) => { const rankItem = document.createElement('div'); rankItem.className = `ranking-item ${index === 0 ? 'winner' : index === 1 ? 'second' : index === 2 ? 'third' : ''}`; const rankEmoji = index === 0 ? '' : index === 1 ? '' : index === 2 ? '' : `${index + 1}`; rankItem.innerHTML = ` <div class="rank-number" style="color: ${system.color}">${rankEmoji}</div> <div class="system-info"> <div class="system-name">${system.name}</div> <div class="system-stats">${system.trades} trades • ${system.tradingDays} days</div> </div> <div class="performance-value" style="color: ${system.color}"> ${system.rollingPF.toFixed(2)} </div> `; rankingList.appendChild(rankItem); }); } function updateStats() { const systemCount = Object.keys(systems).length; const allSystems = Object.values(systems); document.getElementById('totalSystems').textContent = systemCount; if (systemCount > 0) { // Find best performer const bestSystem = allSystems.reduce((best, current) => { const bestLastPF = best.data[best.data.length - 1].rollingPF; const currentLastPF = current.data[current.data.length - 1].rollingPF; return currentLastPF > bestLastPF ? current : best; }); document.getElementById('bestSystem').textContent = bestSystem.name; document.getElementById('bestSystem').className = 'stat-value excellent'; // Calculate average performance const avgPF = allSystems.reduce((sum, system) => { return sum + system.data[system.data.length - 1].rollingPF; }, 0) / systemCount; document.getElementById('avgPerformance').textContent = avgPF.toFixed(2); document.getElementById('avgPerformance').className = 'stat-value ' + getPFClass(avgPF); // Total trades across all systems const totalTrades = allSystems.reduce((sum, system) => { return sum + system.data[system.data.length - 1].tradeCount; }, 0); document.getElementById('totalTrades').textContent = totalTrades; } } function updateChart() { const ctx = document.getElementById('comparisonChart').getContext('2d'); if (comparisonChart) comparisonChart.destroy(); const datasets = []; const systemsArray = Object.values(systems); if (systemsArray.length === 0) return; // Find the shortest dataset length to align all systems const minLength = Math.min(...systemsArray.map(s => s.data.length)); console.log(`Aligning all systems to shortest dataset: ${minLength} trades`); systemsArray.forEach(system => { // Take only the last 'minLength' trades from each system for fair comparison const alignedData = system.data.slice(-minLength); if (currentChartView === 'pf' || currentChartView === 'both') { datasets.push({ label: `${system.name} - PF`, data: alignedData.map(d => d.profitFactor), borderColor: system.color, backgroundColor: system.color + '20', borderWidth: 2, fill: false, tension: 0.1, pointRadius: alignedData.length > 50 ? 0 : 2 }); } if (currentChartView === 'rolling' || currentChartView === 'both') { datasets.push({ label: `${system.name} - Rolling`, data: alignedData.map(d => d.rollingPF), borderColor: system.color, backgroundColor: system.color + '20', borderWidth: currentChartView === 'rolling' ? 3 : 1, borderDash: currentChartView === 'both' ? [5, 5] : [], fill: false, tension: 0.4, pointRadius: 0 }); } }); // Create labels based on the aligned (shortest) dataset length const labels = Array.from({length: minLength}, (_, i) => `T${i + 1}`); comparisonChart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: datasets }, options: { responsive: true, maintainAspectRatio: false, interaction: { mode: 'index', intersect: false }, plugins: { legend: { labels: { color: '#fff' } }, tooltip: { callbacks: { title: function(context) { return `Aligned Trade ${context[0].dataIndex + 1}`; }, footer: function(context) { return `Note: Chart shows last ${minLength} trades from each system for fair comparison`; } } } }, scales: { x: { ticks: { color: '#94a3b8', maxTicksLimit: 20 }, grid: { color: 'rgba(255, 255, 255, 0.05)' } }, y: { ticks: { color: '#94a3b8', callback: function(value) { return value.toFixed(2); } }, grid: { color: 'rgba(255, 255, 255, 0.05)' }, min: 0 } } } }); } function switchChartView(view) { currentChartView = view; // Update button states document.querySelectorAll('.chart-toggle').forEach(btn => { btn.classList.remove('active'); if (btn.onclick.toString().includes(`'${view}'`)) { btn.classList.add('active'); } }); updateChart(); } function clearAllSystems() { if (confirm('Are you sure you want to clear all loaded systems?')) { // Clear systems data systems = {}; // Reset all upload slots for (let i = 1; i <= 10; i++) { const systemNameInput = document.getElementById(`systemName${i}`); const fileLabel = document.getElementById(`fileLabel${i}`); const fileInput = document.getElementById(`csvFile${i}`); if (systemNameInput) systemNameInput.value = ''; if (fileLabel) { fileLabel.innerHTML = ` Load System ${i} CSV`; fileLabel.classList.remove('loaded'); } if (fileInput) fileInput.value = ''; } // Destroy existing chart if (comparisonChart) { comparisonChart.destroy(); comparisonChart = null; } // Hide all sections document.getElementById('performanceRanking').style.display = 'none'; document.getElementById('statsGrid').style.display = 'none'; document.getElementById('chartContainer').style.display = 'none'; // Reset stats display document.getElementById('totalSystems').textContent = '0'; document.getElementById('bestSystem').textContent = '--'; document.getElementById('avgPerformance').textContent = '--'; document.getElementById('totalTrades').textContent = '--'; console.log('All systems cleared successfully'); } } function getPFClass(value) { if (value >= 2.0) return 'excellent'; if (value >= 1.5) return 'positive'; if (value >= 1.0) return 'neutral'; return 'negative'; } // Initialize the dashboard initializeUploadSlots(); </script> </body> </html>
you @demoncore keep talking about sharpe ratio tell us what my percentage of return was you @demoncore are confusing a bond system i traded for managed accounts and sharpe with oddball system which used only advancing issues and kicked ass for 2.5 years with a daytrade model that i am currently running which is kicking ass unlike you @demoncore i am not a one pony show - buying options and doing the shit you @demoncore do - can't figure out market direction? post your @demoncore trades everyday in advance put up or shut up mine are on web sites live. you @demoncore can't even post 1 single trade in advance without some excuse why it didn't work. i don't expect you @demoncore to win every trade but for fuck's sake post something big man anything! but no your @demoncore just a desert rat pos that has been permanently banned more than anyone on this forum, and i am positive @Baron will ban you again one day when enuff people complain.
38% win rate is horrible. I don't care if the profit factor is larger for the wins. A trader needs much higher concentration refinement yield to be potent overall.
look if you don't know shit about trading just say so and i will educate you but do not try and run my ass down unless you can back it with proof that you know what your talking about. Because win rate is a vanity metric. Profit factor is the truth. The most successful systems often have low win rates—sometimes below 40%—because they’re designed to let winners run and cut losers fast. That means: Small frequent losses are tolerated as part of the cost of doing business. Occasional large wins drive the entire profitability of the system. Risk-reward ratio is skewed heavily in favor of big payoffs, not frequent wins. Take a system with a 35% win rate but a 3.0 profit factor. It might lose $100 six times, then win $800 once. Net result: +$200. That’s a winning system, even though most trades are losers. Compare that to a 70% win rate system with a 0.9 profit factor. It wins often but bleeds slowly—death by a thousand cuts. This is why my Oddball system, despite its 38% win rate, still “kicks ass” it’s built to exploit asymmetry, not chase comfort. Traders who obsess over win rate are usually trying to soothe their ego, not optimize their capital.
What is it with you Texas boys... you and SimpleMeLike likes to type in Colorful, enlarged, bold font.
How do you post a trade "in advance" of the trade taking place? I trade vol and don't divulge structuring. It's too important so I post PNL instead. You post one lot PNL on sim which earned SOFR-returns. I am responsible for ~10% of site traffic. I gotta be pretty egregious to warrant @Baron flushing ad-monies. Dude, if you need the colors, font and logorrhea then you've already lost. You're p-hurt bc it took me no time to RE your garbage.
@Baron can do what he wants with his site and if you have value that he likes more power to the both of you. you and about 20 others keep real trading discussions at zero on this site because of your little dick syndrome and supposedly big mussels - like what grown man is so insecure that he has to show off his arm mussels? fuck it's like a saturday night live script your so napoleon....