Loading ProJournal…

{{ currentMenuName }}

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') }}

EA connected — waiting for your first closed trade to sync in.

Connecting to your EA…

Trades will appear here automatically once your EA syncs. You can also load sample data to explore the dashboard, or import a report manually.

{{ currentMonthName }}

Sun
Mon
Tue
Wed
Thu
Fri
Sat
{{ 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 }}

{{ selectedDay.date.toLocaleDateString('en-US', { weekday:'long', month:'long', day:'numeric' }) }}

TimeSymbolTypeVolProfit
{{ fmtTime(t.openTime) }} {{ t.symbol }} {{ t.type }} {{ t.volume }} {{ t.profit>=0?'+':'' }}${{ formatNum(t.profit) }}
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.

{{ 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)
TimeSymbolTypeVolPriceProfit
{{ 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.
Pro Trading Journal · Single-file Vue app · localStorage key: mt5_trades_pro
Deploy-ready for Cloudflare Pages
Esc
No matches for "{{ cmdQuery }}"
{{ cmdResults.length }} results ↑↓ navigate select
Trade Detail
{{ drawer.trade?.symbol }} {{ drawer.trade?.type?.toUpperCase() }}
Open Time
{{ drawer.trade.openTime }}
Volume
{{ drawer.trade.volume }} lot
Open Price
{{ drawer.trade.openPrice || '—' }}
Close Price
{{ drawer.trade.closePrice || '—' }}
Profit
{{ drawer.trade.profit>=0?'+':'' }}${{ formatNum(drawer.trade.profit) }}
{{ t }} × No tags yet
Auto-saved on blur · {{ (drawer.trade.note||'').length }} chars
{{ t.type==='error'?'⚠️':t.type==='success'?'✓':'ℹ️' }} {{ t.msg }}

{{ modal.title }}

{{ modal.body }}

{{ tourSteps[tour.step].icon }}
Step {{ tour.step + 1 }} of {{ tourSteps.length }}

{{ tourSteps[tour.step].title }}

{{ tourSteps[tour.step].body }}