{{ currentMenuName }}
{{ syncMessage }}
Showing data for: {{ activeRangeLabel }} · {{ activeTrades.length }} of {{ trades.length }} trades
{{ t('netPnl') }}
{{ totalPnl >= 0 ? '+' : '' }}${{ formatNum(displayPnl) }}
{{ t('winRate') }}
{{ winRate }}%
{{ wins.length }}W / {{ losses.length }}L
Profit Factor
{{ formatNum(profitFactor, 2) }}
{{ t('totalTrades') }}
{{ activeTrades.length }}
Vol {{ formatNum(totalVolume, 2) }}
{{ t('avgWinLoss') }}
+${{ formatNum(avgWin) }}
/
${{ formatNum(avgLoss) }}
Expectancy {{ expectancy >= 0 ? '+' : '' }}${{ formatNum(expectancy) }}
{{ t('maxDrawdown') }}
-${{ formatNum(maxDrawdown) }}
Peak ${{ formatNum(peakEquity) }}
{{ t('noData') }}
Import your MT5 HTML/XML report, or load sample data to explore the dashboard.
Cumulative P&L
Equity CurveWin / Loss
{{ winRate }}%P&L by Hour
IntradayP&L by Symbol
Top 12Daily P&L
By dateP&L by Weekday
Avg / dayBest Trade
+${{ formatNum(bestTrade.profit) }}
{{ bestTrade.symbol }} · {{ bestTrade.type.toUpperCase() }} · {{ bestTrade.volume }} lot
—
Worst Trade
${{ formatNum(worstTrade.profit) }}
{{ worstTrade.symbol }} · {{ worstTrade.type.toUpperCase() }} · {{ worstTrade.volume }} lot
—
Current Streak
{{ currentStreak.type === 'win' ? '' : '-' }}{{ currentStreak.count }} {{ currentStreak.type === 'win' ? 'wins' : 'losses' }}
Best win {{ maxStreak.win }} · Worst loss {{ maxStreak.loss }}
Top Tags by P&L
{{ topTags.length }} tags
{{ tag.pnl >= 0 ? '+' : '' }}${{ formatNum(tag.pnl) }} · {{ tag.count }}
No tags yet. Open a trade to add one.
Recent Journal Notes
{{ recentNotes.length }} notes
{{ n.symbol }} {{ n.type.toUpperCase() }}
{{ n.profit>=0?'+':'' }}${{ formatNum(n.profit) }}
{{ n.note }}
{{ n.openTime }}
No notes yet. Click a trade to journal it.
{{ currentMonthName }}
Profit
Loss
Sun
Mon
Tue
Wed
Thu
Fri
Sat
0 && selectDay(day)"
:class="['rounded-xl p-2 sm:p-3 min-h-[88px] sm:min-h-[108px] flex flex-col border transition',
day.date ? 'cursor-pointer' : '',
day.trades > 0 ? (day.pnl >= 0 ? 'bg-emerald-500/10 border-emerald-500/30 hover:bg-emerald-500/15' : 'bg-rose-500/10 border-rose-500/30 hover:bg-rose-500/15') : 'border-slate-800/60 hover:border-slate-700',
day.isToday ? 'ring-1 ring-cyan-400/50' : '']">
{{ day.date.getDate() }}
{{ day.trades }}
{{ day.pnl >= 0 ? '+' : '' }}${{ formatNum(day.pnl) }}
Month P&L
{{ monthSummary.pnl >= 0 ? '+' : '' }}${{ formatNum(monthSummary.pnl) }}
Trades
{{ monthSummary.trades }}
{{ t('winRate') }}
{{ monthSummary.winRate }}%
Trading Days
{{ monthSummary.days }}
Range:
Tags:
{{ t }} ×
| Open Time {{ sortDir==='asc'?'↑':'↓' }} | Symbol {{ sortDir==='asc'?'↑':'↓' }} | Type {{ sortDir==='asc'?'↑':'↓' }} | Volume {{ sortDir==='asc'?'↑':'↓' }} | Open {{ sortDir==='asc'?'↑':'↓' }} | Close {{ sortDir==='asc'?'↑':'↓' }} | Profit {{ sortDir==='asc'?'↑':'↓' }} | |
|---|---|---|---|---|---|---|---|
| {{ t.openTime }} | {{ t.symbol }} {{ tag }} | {{ t.type }} | {{ t.volume }} | {{ t.openPrice || '—' }} | {{ t.closePrice || '—' }} | {{ t.profit>=0?'+':'' }}${{ formatNum(t.profit) }} |
{{ '★'.repeat(t.rating) }}
|
|
📭
No trades match your filters.
|
|||||||
Page {{ page }} of {{ totalPages }}
No data in current range. or import data.
Equity Curve (cumulative)
Drawdown Curve
Symbol Performance
| Symbol | Trades | Win% | P&L |
|---|---|---|---|
| {{ s.symbol }} | {{ s.count }} | {{ s.winRate }}% | {{ s.pnl>=0?'+':'' }}${{ formatNum(s.pnl) }} |
Risk & Performance Metrics
Gross Profit
${{ formatNum(grossProfit) }}
Gross Loss
${{ formatNum(grossLoss) }}
Profit Factor
{{ formatNum(profitFactor,2) }}
Expectancy
${{ formatNum(expectancy) }}
Avg Trade
${{ formatNum(avgTrade) }}
{{ t('maxDrawdown') }}
-${{ formatNum(maxDrawdown) }}
Recovery Factor
{{ formatNum(recoveryFactor,2) }}
Payoff Ratio
{{ formatNum(payoffRatio,2) }}
Best Streak
{{ maxStreak.win }}W
Worst Streak
{{ maxStreak.loss }}L
Monthly Performance
Buy vs Sell
Session Breakdown
UTC hours{{ s.name }}
{{ s.range }}
{{ s.pnl>=0?'+':'' }}${{ formatNum(s.pnl) }}
{{ s.count }} trades · {{ s.winRate }}% win
P&L Distribution
{{ pnlDistribution.bins.length }} bucketsBest
+${{ formatNum(pnlDistribution.max) }}
Median
${{ formatNum(pnlDistribution.median) }}
Worst
${{ formatNum(pnlDistribution.min) }}
R-Multiple Distribution
risk-basedAvg R
{{ formatNum(rDistribution.avg, 2) }}R
Winners >1R
{{ rDistribution.aboveOne }}
Losers <-1R
{{ rDistribution.belowMinusOne }}
{{ t('riskCalculator') }}
Calculate lot size based on account risk, entry & stop loss.
Recommended Position Size
{{ formatNum(calcResult.lots, 2) }} lots
Risk $
${{ formatNum(calcResult.riskAmount) }}
SL Distance
{{ formatNum(calcResult.slDistance, 5) }}
Pip Value/Lot
${{ formatNum(calcResult.pipValue) }}
R Multiple
1 : {{ formatNum(calcResult.rMultiple, 1) }}
{{ calcResult.warning }}
Quick Symbol Presets
{{ t('import') }} MT5
Upload your MT5 / MT4 report directly. Supports .html, .htm, .xml. Parsed locally — nothing is uploaded.
Click to select or drag & drop your report
Parsing file...
MT5: Report → Save as Report (.html) · MT4: Account History → Save as Report
{{ importStatus.msg }}
Preview (first 8 rows)
| Time | Symbol | Type | Vol | Price | Profit |
|---|---|---|---|---|---|
| {{ t.openTime }} | {{ t.symbol }} | {{ t.type }} | {{ t.volume }} | {{ t.openPrice || '—' }} | {{ t.profit>=0?'+':'' }}${{ formatNum(t.profit) }} |
{{ dupInfo.count }} duplicate{{ dupInfo.count>1?'s':'' }} detected (same time+symbol+type+volume)
Data Management
{{ trades.length }} trades stored locally
{{ t('parsingTips') }}
- • The parser detects the trade table automatically by scanning headers (Time, Symbol, Type, Volume, Price, Profit).
- • Handles MT5's merged S/L · T/P · Profit columns by extracting the last numeric value as profit.
- • Falls back to content-based profit detection if header mapping fails.
- • XML reports from MT5 are parsed via tag name (Deal/Position/Order).
{{ t('accentTheme') }}
Personalize the highlight color across the app.
Active: {{ accents.find(a=>a.id===settings.accent)?.name }}
{{ t('displayPref') }}
Number formatting, currency, and default risk.
EA Real-time Sync
Connect MT5 Expert Advisor for automatic trade syncing.
Status: {{ syncStatus }} · {{ syncMessage }}
{{ t('keyboardShortcuts') }}
Speed up your workflow.
Command palette⌘ K
DashboardG D
CalendarG C
Trade HistoryG T
AnalyticsG A
CalculatorG R
Import dataG I
Close panel/drawerEsc
{{ t('dataStorage') }}
All data lives in your browser under mt5_trades_pro.
About
Pro Trading Journal — MT5 Edition · v3.1
Single-file Vue 3 + Tailwind CSS + Chart.js. No backend, no tracking. Deploy to Cloudflare Pages by copying this file as index.html.
Made for personal trading accountability.