Files
mt5-tools/__pycache__/view_trade_analysis.cpython-314.pyc
T

408 lines
80 KiB
Plaintext
Raw Normal View History

2026-04-12 18:25:46 +10:00
+
Ăśäi… ăóđRt^RIt^RIHt^RIt^RIt]PP^]PP]PP] 444^RI
2026-04-12 18:25:46 +10:00
HtHtRtRRltRtR#)uk
pages/trade_analysis.py
=======================
MT5 Trade Analysis page — migrated from main dashboard.
2026-04-14 08:39:30 +10:00
N)Údetect_and_parseÚ
calc_statscór^RIpVP4pRVP9dRVP9d
VR,VR&RVP9dRVP9d
VR,VR&RVP9dRVR&RVP9dRVR&R VP9dRVR &R
VP9dRVR
&R VP9d!RVP9dVR,^8„VR &R VP9d„VPVR ,R
R7VR &RVP9d%VR ,PP 4VR&RVP9d!VR ,PP VR&RVP9dVPVR,R
2026-04-14 08:39:30 +10:00
R7VR&RVP9dkR VP9dZRVP9dIVR,VR ,,
PP4^<, P^4VR&V#)zFMap IC Markets DataFrame columns to the schema expected by calc_stats.NÚ symbol_baseÚstrategyÚ
net_profitÚprofitÚ
commissionçÚswapÚslÚtpÚwinÚ open_timeÚcoerce©ÚerrorsÚ day_of_weekÚhourÚ
close_timeÚ duration_min) ÚpandasÚcopyÚcolumnsÚ to_datetimeÚdtÚday_namerÚ
total_secondsÚround)ÚdfÚpdÚouts& Ú+C:\Users\pc\MT5Tools\view_trade_analysis.pyÚ
_normalise_icr#ăŘ
Ź'‰')€Cđź Ô
¸#ż+ą+Ô(EŘ,J‰Řs—{" x°s·{±{Ô'BŘ)H‰
Ř3ź;™;ÔŘ
S—[‘[Ô ŘF‰ Ř 3—;‘;ÔŘD‰ Ř 3—;‘;ÔŘD‰ ŕ C—K‘KÔ L°C·K±KÔ$?ŘŐŃ*E‰
ŕc—kź>™>¨#¨kŐ*:Ŕ8LŘ  § ˇ Ô +Ř!$ [Ő!1×!4Ń!4×!=Ń!=Ó!?C
Ń Ř źÔ 2C‰KŘs—{źN™N¨3¨|Ő+<ŔXNŘSź[™[Ô(¨[¸CżKąKÔ-GČLĐ\_×\gŃ\gÔLgŘ # LŐ 1°C¸ Ő4DŐ Dß "ˇ§=ˇ=Ł?°Rő 8ß9>ą¸đ ŕ €Jóc
óüaaa:a;a<a=a>€^RIo=^RIo<^RIHp
V
P4P R4p RV 2p VP 4p
S=P
V
R,RR7P^4V
R&S=PV
R,RR7V
R&V
PR.R 7PR4PR
R 7p
V
R,P4V
R &V
R ,P4V
R
&V
R ,V
R
,,
V
R&V
R,^8„V
R&RV
P9d%V
R,PP!4V
R&RV
P9d!V
R,PP"V
R&RRRRRRRRR/RRRR^/RRR /R!RR R"R#//o:RĽV:V<3R$llpR%R&R'R(R)R*R+V
R,PP R,4P%4R-V
R ,P'^4P%4R.RR/R0^/R1R2R3R4/.pVEe VP 4pS=P
VR,RR7P^4VR&S=PVR,RR7VR&VPR.R 7PR4pVR,P4VR &VP)R%R&R'R(R)R5R+VR,PP R,4P%4R-VR ,P'^4P%4R.RR6R0^R7R7//4V!R8VR9R:R;R<R=R>R?R@^<RA^RB^(RC^(//4pV!RDR%R&R'R(R)RER+V
R,PP R,4P%4R-V
R,P'^4P%4R.RRFR0RG/R1R2R3RH/.R9^R;RERIRJR?R@^<RA^RB^(RC^/RRR RKRJ/R!RR R"R#/RRRRRRRRR// 4pV
P+V
R,PP RL44R,P-4pVP.P%4pVP'^4P%4pVUu.uFpV^dRMMRNNK ppV!ROR%RPR)RQR+VR-VRRRV//.R9^ R;RQRIRJRSRTR?R@^<RA^RB^(RC^(/RR%RURR RKRJ/R!RR R"R#RVR
RWRX/RRRRRRRRR//
4p.R˝OpVUu.uFpVV
R,P09gKVNK! ppWÝR,,P+R4R,P-4P3V^RY7pWÝR,(,P+R4R,P-4P3V^RY7pV!RZR%RPR)R[R+VR-VP'^4P%4RRRRM//R%RPR)R\R+VR-VP'^4P%4RRRRN//.R9R]R;R^R_R`RSRaR?R@^<RA^RB^(RC^(/RR%RURR /R!RR R"R#/RRRRRRRRR/RRR// 4p\5V
R,P744pVU u.uFp \9V 4NK p!p WÝR,,P+R4R,P-4P3V^RY7p"WÝR,(,P+R4R,P-4P3V^RY7p#V!RbR%RPR)R[R+V!R-V"P'^4P%4RRRRM//R%RPR)R\R+V!R-V#P'^4P%4RRRRN//.R9R]R;RcR_R`RSRaR?R@^<RA^RB^(RC^(/RR%RUR;RdRR /R!RR R"R#/RRRRRRRRR/RRR// 4p$RľVV3Rellp%RżRglp&RfP;.RhNV&!RiR#SR,Rj
2V%!RR#44 NRkNV&!RlSRm, Rn2V%!RmRn44 NRkNV&!Ro\9SRp,4V%!RpR+44 NRkNV&!Rq\9SRr,4V%!RrR+44 NRkNV&!RsR#SRt,Rj
2V%!RtR#44 NRkNV&!Ru\9SRv,4V%!RvRf44 NRkNV&!Rw\9SP=Rx^44V%!RxRf44 NRkNV&!Ry\9SP=Rz^44V%!RzR+44 NRkNV&!R{R#SR|,Rj
2V%!R|R#44 NRkNV&!R}R#SR~,Rj
2V%!R~R#R
R74 NRkNV&!R€R#SR,Rj
R\?SP=R^44R„
R…2V%!RR#R
R74 NRkNV&!R†R#SR‡,Rj
2V%!R‡R#44 NRkNV&!RR#SR‰,Rj
2V%!R‰R#R
R74 NRkNV&!RŠ\9SR,4V%!RRf44 NRkNV&!RŚ\9SRŤ,4V%!RŤRfR
R74 NRkNV&!RŽ\9SRŹ,4V%!RŹRf44 NRkNV&!RSR, Rn2V%!RRn44 NRkNV&!R\9SR“,4V%!R“Rf44 NRkNV&!R”SR•, Rn2V%!R•Rn44 NRN4p'RŔV=3Rllp(V(!V
R™V R—Rš7p)Rfp*V'S=PAV4p+RRfP;V+P44,Rť,p,Rfp-V+PC4Fjwp.o>S>P=Rž^4p\EV4pT^8”dRźM
T^8dR MRfo;RfP;T;T>3lT+P44p/T-RT/ Rť2,
p-Kl \GV+4p0R˘V0 RŁV, R¤V- RĄ2p*.RÁOp1V1U2u.uFp2V2V
P9gKV2NK p1p2RRfP;V144,Rť,p3Rfp4\IV
V1,PC44FRwp5wp.o>Rfo;\ES>R,4pV^8”dR§MR¨o;RfP;T;T>3lT144p/T4RT/ Rť2,
p4KT \GV
4p6RŞV6 R«V3 R¤V4 RĄ2p7V'dV R¬V 2MRfp8RfP;.R­NV NR®NV NRŻNV NR°NV8 NR±NV NR˛NV NRłNV' NR´NV NRµNV NRµNV NR¶NV NR·NV$ NR¸NV* NRąNV) NRşNV7 NR»N4p9V9#uupiuupiuup i ^pELĆ;iuup2i L×;i)Âz<Generate a self-contained HTML report of the trade analysis.N©Údatetimez%Y-%m-%d %H:%MuTrade Analysis Report — rrrr©ÚsubsetT©ÚdropÚ_cumÚ_peakÚ_ddrrrÚ plot_bgcolorzrgba(20,20,30,1)Ú
paper_bgcolorÚfontÚcolorz#cccÚfamilyú
sans-serifÚlegendÚbgcolorú
rgba(0,0,0,0)Ú borderwidthÚxaxisÚ gridcolorúrgba(128,128,128,0.15)ÚyaxisÚ
tickprefixÚ$c ó¬</SCT;'g/CpSPV4pSPV4pRV RVPRR4 RV RV RV R2 #)z <div id="z" style="width:100%;height:Úheighté,z#px"></div>
<script>Plotly.newPlot("z",Ú,z6,{"responsive":true,"displayModeBar":false});</script>)ÚdumpsÚget)Údiv_idÚtracesÚ layout_extraÚlayoutÚ traces_jsonÚ layout_jsonÚ LAYOUT_BASEÚjsons&&& €€r"Ú_chartÚ%_generate_html_report.<locals>._chartWsyř€Ř88 L×$6Đ$6°BĐ8Ř—j‘j Ó( Ř—j‘j Ó( ŕ:¸6ż:ą:ŔhČsÓ;SĐ:TđU'Ř'- h¨b°°
¸Q¸{¸LFđ
Gđ
r$ÚtypeÚscatterÚmodeÚlinesÚnameÚEquityÚxz%Y-%m-%d %H:%M:%SÚlineú#7c6af7ÚwidthÚfillÚtozeroyÚ fillcolorúrgba(124,106,247,0.08)ÚEditedú#34C27AÚdashÚeq_chartr@rAÚtitleú Equity CurveÚ hovermodeú x unifiedÚmarginÚdd_chartÚDrawdownz#dc5050çř?úrgba(220,80,80,0.18)Ú
showlegendFÚshowticklabelsz%Y-%m-%dúrgba(52,194,122,0.85)úrgba(220,80,80,0.85)Ú daily_chartÚbarz Daily P&LÚmarkerÚbargapgš™™™™™É?ÚcategoryÚzerolineÚ
zerolinecolorúrgba(128,128,128,0.4)©Ú
fill_valueÚ dow_chartÚProfitÚLosséúP&L by Day of WeekÚbarmodeÚrelativeg333333Ó?Ú
hour_chartúP&L by Hour of Dayú
Hour (UTC)có<S eVS 9dR#S V,SV,,
p\V4R8dR#V'gV^8„MV^8pV'dRMRpV^8”dRMRpVR8XdR\V4R
2M \V4R
pR V R
V V R 2#) çü©ńŇMbP?r_ú#E05555őâ–˛őâ–Ľr>ú.2fz<span style="color:z!;font-size:11px;margin-left:6px">z</span>©Úabs)
ÚkeyÚfmtÚinverseÚdiffÚbetterÚcolÚarrowÚvalÚstatsÚ
stats_compares
&&& €€r"Ú _delta_htmlÚ*_generate_html_report.<locals>._delta_htmlĽs™ř€Ř Ň  C¨}Ô$<ÁRŘ! E¨#ĄJŐ.Ü t9 ˇRß!(¨d°Q©hß#‘ ¨Ř ś uŘ'*¨C¤x!”C“Ic¸D» Ŕ#°Ř$ S EĐ)JČ5Č'ĐRUĐQVĐV]Đ^r$rcóRV RV V R2#)z <div class="sc"><div class="sl">z</div><div class="sv">z </div></div>©)Úlabelr—Údeltas&&&r"Ú_statÚ$_generate_html_report.<locals>._statĆsŘ1°%°Đ8NČsČeĐTYĐSZĐZfĐgr$z$
<div class="stats-grid">
ú
Net Profitú,.2fz
úWin RateÚwin_rateÚ
Profit FactorÚ
profit_factorú R:R RatioÚrr_ratioÚ
ExpectancyÚ
expectancyú Total TradesÚ total_tradesú Trading DaysÚ trading_daysz
Trades/DayÚtrades_per_dayúAvg WinÚavg_winúAvg LossÚavg_loss)rúMax DDÚ max_drawdownúmax_drawdown_pctrŤú%)ú
Best TradeÚ
best_tradeú Worst TradeÚ worst_tradeúMax Consec WinsÚmax_consec_winsúMax Consec LossesÚmax_consec_lossesú Long TradesÚ long_tradesú
Long Win RateÚ
long_win_rateú Short TradesÚ short_tradesúShort Win RateÚshort_win_ratez
</div>Úmt1có0<aa
aVeVP'dR#VRR.,P4P4pSPVR,4PP
VR&SPVR,4PP VR&VPRR.4R,P4P4pVP'dR#VPRRRR7P^4oSPUu.uF.pSPR\V4^4PR4NK0 upSn SP^R 7SR
&SP!R R 7o.ROpVUu.uFqSP9gKVNK upo
R
RP#RS
44,R,p V
VV3Rlp
V
!R 4p V
!R4p RV RV RV RV RV RSR
RV RV RV RV RV RV R2#uupiuupi) NrrrÚyearÚmonth©ÚindexrÚvalueséĐú%b©ÚaxisÚYTDF©Ú ascendingz<tr><th>Year</th>c3ó."TF pRV R2xK
R#5i©z<th>ú</th>Nrť©Ú.0Úcs& r"Ú <genexpr>Ú?_generate_html_report.<locals>._monthly_html.<locals>.<genexpr>îséĐ+JÁTŔ¨d°1°#°U­OĂTůóú</tr>c
ó®<RpS
S ,P4wr#RV R2pS FpVPV^4pV'd\VS , ^d,^4MTpV^8”dRM
V^8dRMRpV^8”dRM
V^8dRMRp V'dV^8wdVR
R
2MR M V^8wdVR
MR p
VR V R
V RV
R2,
p VRV R2,
pK¸ V#)rz<td>ú</td>úrgba(52,194,122,0.18)rnÚ transparentr_ú#888ú+.2fr¦ő—ú<td style="background:ú;color:ú">ú<tr>râ)ÚiterrowsrDr)Úuse_pctr!ÚrowÚcellsr•ÚpvÚbgÚfgÚtxtÚcolsÚdepositÚpivots& €€€r"Ú_rowsÚ;_generate_html_report.<locals>._monthly_html.<locals>._rowsđř€Ř" 4ť[×3 Řtf EĐ*Űź  QAß8?śq 7ť{¨SŐ0°!Ô4ŔQBŘ46°q´0ĐY[Đ\]ÔY]Ń?UĐcpBŘ&(¨¤d™¸Ľd±ČBßAH¨B°¬Eb Y a™=±uĐ_aĐcdÔ_dĐRTĐUYŃQZĐjoĐ5°b°T¸ŔŔŔBŔsŔeČ5ĐQ’Eń
 đeW EĐ*ńJr$Tz
<div style="margin:20px 0">
<div style="display:flex;align-items:center;gap:12px;margin-bottom:8px">
<h3 style="margin:0">zź</h3>
<div style="display:flex;border:1px solid rgba(255,255,255,0.15);border-radius:4px;overflow:hidden;font-size:11px">
<button onclick="mtToggle('z ','$')" id="zź_btn_d"
style="padding:3px 10px;background:rgba(124,106,247,0.3);color:#e2e8f0;border:none;cursor:pointer">$</button>
<button onclick="mtToggle('z ','%')" id="zş_btn_p"
style="padding:3px 10px;background:transparent;color:#888;border:none;cursor:pointer">%</button>
</div>
<span style="font-size:11px;color:#666">Initial balance: $z,.0fz</span>
</div>
<div id="z_d"><table class="tbl"><thead>ú</thead><tbody>z"</tbody></table></div>
<div id="z3_p" style="display:none"><table class="tbl"><thead>av</tbody></table></div>
</div>
<script>
function mtToggle(id, mode) {
document.getElementById(id+'_d').style.display = mode==='$' ? '' : 'none';
document.getElementById(id+'_p').style.display = mode==='%' ? '' : 'none';
document.getElementById(id+'_btn_d').style.background = mode==='$' ? 'rgba(124,106,247,0.3)' : 'transparent';
document.getElementById(id+'_btn_d').style.color = mode==='$' ? '#e2e8f0' : '#888';
document.getElementById(id+'_btn_p').style.background = mode==='%' ? 'rgba(124,106,247,0.3)' : 'transparent';
document.getElementById(id+'_btn_p').style.color = mode==='%' ? '#e2e8f0' : '#888';
}
</script>©
ÚJanÚFebÚMarÚAprÚMayÚJunÚJulÚAugÚSepÚOctÚNovÚDecrÖ)ÚemptyÚdropnarrrÚgroupbyÚsumÚ reset_indexrůÚfillnarÚ TimestampÚintÚstrftimeÚ
sort_indexÚjoin)Údf_mržÚtable_idÚtmpÚmonthlyÚ month_orderrŢÚhdrrúÚrows_dÚrows_pr÷r s&&f& @@€r"Ú
_monthly_htmlÚ,_generate_html_report.<locals>._monthly_htmlásű€Ř Š<4ź:ź::©bŘL Đ/×8×?Ř—~~ c¨,Ő&7Ó8×;×@F‰ Ř—~~ c¨,Ő&7Ó8×;×AG‰ Ř—+‘+v gĐ Ő=×QŘ Ź=Ź=Ř
 F°GŔL
ÓQ×XĐYZÓ[ŘMRĎ]Ę]Ó[É]Čź d¬3¨q«6°!Ó=¸CÉ]Ń[Ś
Ř—y‘y a(e‰ Ř× Ń ¨5Đ Ó1Úe Ů=™;a¨uŻ}©}Ń*<—™;Ń=Ř! B§GˇGŃ+JÁTÓ+JÓ$JŐJČWŐT÷ ńu“Ůt“đđ đ!"ŕ"* ¨<¸°zđB"ŕ"* ¨<¸°zđB@GŔt¸M ŕ 3°C°5¸ČŔxđP Ř ČČ_Đ]cĐ\dđ e
đ
đ
ůň1\ůň>sÄ4HĆHĆHúMonthly Performance)rc3ó."TF pRV R2xK
R#5is& r"Ú(_generate_html_report.<locals>.<genexpr>!séĐ
°1  a ť»
ůráú Net P&L ($)zrgba(52,194,122,0.12)zrgba(220,80,80,0.12)c3óV<"TFpRVR8XdSMR RSV, R2xK R#5i)r#rNrť©r•s& €€r"r"(s<řéđ6Ů'4 đ5¸
Ô;M±RĐSUĐ4VĐVXĐY\Đ]`ŐYaĐXbĐbgŐhŰ'4ůó&)z/<details class="sd"><summary>Position Summary (z/ positions)</summary><table class="tbl"><thead>rüz</tbody></table></details>c3ó."TF pRV R2xK
R#5is& r"r"6séаA $ q Ą»ůrázrgba(52,194,122,0.08)úrgba(220,80,80,0.08)c3óV<"TFpRVR8XdSMR RSV, R2xK R#5i)rrNrťr%s& €€r"r">s;řéđ-Ů#+1°s¸LÔ7H±ČbĐ0QĐQSĐTWĐX[ŐT\ĐS]Đ]bŐcŰ#+ůr&z(<details class="sd"><summary>Trade Log (z3 trades)</summary><table class="tbl tbl-sm"><thead>u — z;<!DOCTYPE html>
2026-04-14 08:39:30 +10:00
<html><head>
<meta charset="utf-8">
2026-04-14 08:39:30 +10:00
<title>a</title>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
2026-04-14 08:39:30 +10:00
body { background:#0e1117; color:#e2e8f0; font-family:sans-serif; font-size:13px; padding:24px; }
h1 { font-size:22px; color:#7c6af7; margin-bottom:4px; }
2026-04-14 08:39:30 +10:00
h2 { font-size:16px; color:#a0aec0; margin:24px 0 12px; border-bottom:1px solid rgba(255,255,255,0.08); padding-bottom:6px; }
h3 { font-size:14px; color:#a0aec0; margin:20px 0 8px; }
.meta { color:#666; font-size:11px; margin-bottom:24px; }
.stats-grid { display:grid; grid-template-columns:repeat(5,1fr); gap:10px; margin-bottom:20px; }
2026-04-12 18:25:46 +10:00
.sc { background:rgba(255,255,255,0.04); border-radius:6px; padding:10px 12px; }
.sl { font-size:10px; color:#888; margin-bottom:4px; text-transform:uppercase; letter-spacing:.5px; }
.sv { font-size:16px; font-weight:600; color:#e2e8f0; }
.charts { display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:20px; }
.chart-full { margin-bottom:8px; }
table.tbl { width:100%; border-collapse:collapse; font-size:12px; margin-bottom:20px; }
table.tbl th { background:rgba(255,255,255,0.06); padding:6px 10px; text-align:left; color:#888; font-weight:500; }
table.tbl td { padding:5px 10px; border-bottom:1px solid rgba(255,255,255,0.04); }
table.tbl-sm td, table.tbl-sm th { font-size:11px; padding:3px 8px; }
.tag { display:inline-block; background:rgba(124,106,247,0.2); color:#7c6af7;
border-radius:4px; padding:2px 8px; font-size:11px; margin-bottom:16px; }
details.sd { margin:20px 0; border:1px solid rgba(255,255,255,0.08); border-radius:6px; overflow:hidden; }
details.sd summary { padding:10px 16px; cursor:pointer; font-size:14px; font-weight:600;
color:#a0aec0; background:rgba(255,255,255,0.03); list-style:none;
display:flex; align-items:center; gap:8px; user-select:none; }
details.sd summary::-webkit-details-marker { display:none; }
details.sd summary::before { content:'B6'; font-size:10px; transition:transform 0.2s; }
details[open].sd summary::before { transform:rotate(90deg); }
details.sd summary:hover { background:rgba(255,255,255,0.06); }
</style>
</head><body>
<h1>z"</h1>
<div class="meta">Generated u &nbsp;·&nbsp; u &nbsp;·&nbsp; Format: z</div>
<span class="tag">z</span>
<h2>Statistics</h2>
z*
<h2>Charts</h2>
<div class="chart-full">z</div>
<div class="chart-full">z#</div>
<div class="charts">
<div>z</div>
<div>z</div>
</div>
z
z
<h2>Trade Log</h2>
z
</body></html>©ÚMondayÚTuesdayÚ WednesdayÚThursdayÚFriday)r>r)çĂ@rË)rrÚsymbolrOÚvolumeÚ
open_priceÚ close_pricer)%rrLr'ÚnowrrÚ
to_numericrrr Ú sort_valuesrÚcumsumÚcummaxrrrrÚtolistrÚappendr r
ÚreindexÚsortedÚuniqueÚstrrrDÚ DataFramerîÚfloatÚlenÚ enumerate)?Údf_plotrrÚview_selr™Ú
df_compareÚ
group_summaryÚ date_fromÚdate_torřr'r7rbÚdf_srMÚ eq_tracesÚdcÚeq_htmlÚdd_htmlÚdailyÚ daily_datesÚ
daily_valsrňÚ daily_colorsÚ
daily_htmlÚ dow_orderÚ present_daysÚwins_dowÚ
losses_dowÚdow_htmlÚ all_hoursÚhÚ str_hoursÚwins_hÚlosses_hÚ hour_htmlršr Ú
stats_htmlrÚ monthly_htmlÚpos_htmlÚgs_dfrÚ rows_htmlÚ_rńÚn_posÚlog_colsrŢÚlog_hdrÚlog_rowsÚn_logÚlog_htmlÚdate_strÚhtmlrKrLr s?&f&&f&&&&& @@@@@r"Ú_generate_html_reportrq5ţ€ó
ŰÝ ŹL‰L‹N× #Đ$4Ó 5€Cب
Đ 3€Eŕ Ź<‰<>€DŘź t¨LŐ'9Ŕ(ÓK×RĐSTÓU€DŃŘź¨¨\Ő(:Ŕ8ÓL€DŃŘ Ź;‰;|n -× 9¸ G× SĐY]Đ ^€DŘŐ&×/€D•L×)€D•L Ą=Ő0€DŐŃ*€DDźL™LÔ" 0×3×>Ř
T—\‘\Ô,×1V‰ đ ĐĐ& (¨LĐ9o¨}¸ŔsĐ
€K÷
đ
đ  6 7¨F°HŘ T
×
"×
+Đ,?Ó
@×
 T&Ť\×
Ń
 Ó
"×
) W¨aĐ ;Đ(@đ đ€IđÓŘ
2026-04-12 18:25:46 +10:00
Ź_‰_Ó
Řź=™=¨¨LŐ)9Ŕ(K×RĐSTÓUŘź>™>¨"¨\Ő*:Ŕ8LŘ
ŹY‰Y|n
-×
9¸
GŘ Ő%×.6‰
Ř×ŃŘ Iv w°¸Ř !×-Đ.AÓ F•×!  W°!°V¸
ô ń ¨X°s¸GŔ^Ř[ (¨S°°C¸¸3¸rŔ#ŔbĐ,Iđ-KóL€Gń 6 7¨F°JŘ T
2026-04-12 18:25:46 +10:00
×
"×
2026-04-12 18:25:46 +10:00
+Đ,?Ó
@×
2026-04-12 18:25:46 +10:00
 T%Ť[×
Ń

!×
) W¨cĐ ;Đ(>đ #đ"đ
3 ¨\¸C3r # ¨RĐ7Đ9IČ5Đ7¸ŔcĐĐ*¨OĐ<NŘ  ¨Đ 
9€Gđ
ŹL‰L+×.×7¸
Ó DŔ\Ő X€EŘ—++×&€KŘ—++a“.×)€JŮ[eÓfŃ[eĐVW¨q°A¬vŃ+Đ;QŇQŃ[e€LĐ
Řv [#7)đ(đ
3 ¨l¸3 3 r¨#¨b°°R¸¸BĐ"?Ř 6: {Đ4LĐN^Đ`eĐ;Đ 8¸Řt _Đ6MđOŕ Đ*¨OĐ<NŘ  ¨Đ

9€JňH€IŮL™y!¨A°°mŐ1D×1KŃ1KŃ,K—AA™y€LĐ5•kŐ"×*¨=Ó9¸G×M×UĐVbĐopĐq€HŘE•{#×+¨MÓ:¸H×N×VĐWcĐpqĐr€JŮfX c¨,°s¸8ż>ą>Č!Ó;L×;SŃ;SÓ;UŘ fV c¨,°s¸:×;KŃ;KČAÓ;N×;UŃ;UÓ;WŘ $đ
1°)¸JŔxĐPSŘ#bR  B s¨2Đ
 ;Đ/GĐĐ5°lŔ3ĐĐ)¨/Đ:LŘ Đ)
 /€Hô ×.€IŮ"+Ó,ˇ)Q”#a&ˇ)€IĐ•KŐ ×ÓŐ>×D×LČYĐcdĐe€FŘ%•[!×)¨&Ó1°,Ő?×E×MČiĐdeĐf€HŮfX c¨)°C¸ż ą ŔQ»×8NŃ8NÓ8PŘ fV c¨)°C¸żąŔqÓ8I×8PŃ8PÓ8RŘ &đ
1°)¸JŔxĐPSŘ#bR  B s¨2Đ
 7¨<¸ ĐD\ĐĐ5°lŔ3ĐĐ)¨/Đ:LŘ Đ)
 /€I÷_đ_ôh÷óđđá \Qu 2°4Đ9ą;Ŕ|ĐTWÓ;XÓđ[đń
Ze Đ2ą+ŔjĐQTÓ:UÓđXđń
_śc Ő"8Ó9ą;ŔĐWZÓ;[Óđ^đ ń

[ś3u 1ą+ŔjĐQTÓ:UÓ đ
Xđ ń 
\Qu 2°4Đ9ą;Ŕ|ĐTWÓ;XÓ
đ [đ
ń
^śS  ~Ő!6Ó7ą+ŔnĐUWÓ:XÓđ[đń
^śS §ˇ¨>¸!Ó!<Ó=ą{Č>ĐZ\Ó?]Óđ`đń
\śS §ˇĐ+;¸AÓ!>ÓĐM]Đ^aÓAbÓđeđń
YQu Đ6ą+ŔiĐPSÓ:TÓđWđń
ZQu Đ7ą+ŔjĐQTĐ^bÔ:cÓđfđń
XQu 4°TĐ:¸"ĽSŔÇÁĐK]Đ^_ÓA`Ó=aĐbeĐ<fĐfhĐiŃkvđxFđGJđTXôlYóZđ[đđ[đń
\Qu 2°4Đ9ą;Ŕ|ĐTWÓ;XÓđ[đń
]Qu 3°DĐ:ąKČ
2026-04-14 08:39:30 +10:00
ĐVYĐcgÔ<hÓđkđń
Đ
¤# eĐ,=Ő&>Ó"?Á;ĐO`ĐacÓCdÓđgđń 
Đ
¤# eĐ,?Ő&@Ó"AÁ;ĐObĐceĐosÔCtÓvđ!đ wđ!ń"
]śS  }Ő!5Ó6ąkČ-ĐXZÓ>[Ó]đ#đ"^đ#ń$
2026-04-14 08:39:30 +10:00
_  oŐ 6Đ7°qĐ9ąkČ/ĐZ]Ó>^Ó`đ%đ$ađ%ń&
^śS  ~Ő!6Ó7ąkČ.ĐY[Ó>\Ó^đ'đ&_đ'ń(
Đ
 Đ'7Ő!8Đ 9¸Đ;ąkĐJZĐ[^Ó>_Óađ)đ(b ô)€J÷08
2026-04-14 08:39:30 +10:00
ńt! Đ'<ŔgĐX]Ô^€Lđ€HßŘ +Řr—w‘wŃż
ş
2026-04-12 18:25:46 +10:00
ÓŐPŘ Ř—n&‰FA
 )1“Xŕ,-¨a¬CŃ(ĐPQĐRSÔPSŃ6LĐY[—G6Ř',§}˘}ó6 4 w  ,ŠIńE“
ŕ=¸e¸WđE)Ř),¨¨_¸Y¸Hđ
đ ň9€Há9™8a q¨DŻL©LŃ'8—™8€HĐźŃÓBŔWŐL€GŘ€HÜ   hĄ×!8Ń!8Ó!:Ö;‰ ‰8A
đ Üc(AŘ,-¨a¬CŃ(Đ5Kő-Ů#+ó-ŕd5' Đń
I€Eŕ
2°5°'đ:,Ř,3¨9°OŔHŔ:đNđ đ
2026-04-12 18:25:46 +10:00
÷09)E ' Ń+¸b€H÷9 ó9 đđ9 đ €wđ9 đđ9 đD €GđE9 đD đE9 đF!EđG9 đF"2đG9 đF3;°đG9 đF<TđG9 đFUXĐSXđG9 đFYđG9 đH*đI9 đHđI9 đN đO9 đN
đO9 đT! đU9 đT"đU9 đV! đW9 đV"đW9 đX$ đY9 đX%đY9 đ\ €zđ]9 đ\đ]9 đ^ €{đ_9 đ^đ_9 đd
đe9 đd đe9 đhđi9 đhđi9 đn
đo9 đn ôo9 €Dđt €KůňugůňMůň$-řđv
“Aüň:řđ ús<ŃqŇ<qÓqŘq#ę q(ěq2ě+q2îq7ń(q/ń7q;c$óĚCanaoapaqarasatauavaw€\P!R4RRRRR.RRRRRRRR/P4F/wrV\P9gKV\PV&K1 \P!^^.4wr#V;_uu_4\P
!R R
R .R R
R7pRRR4T;_uu_4\P !RR R7\P!RRR7'dOR\PR&R\PR&.\PR&\P!4RRR4XR
8XEd4\P!RRRR7pV'VPP4PRě4'\VP4VP4wrgVeV\PR&VP4\PR&V\PR&.\PR&\P !R\#V4 RV 24EMŞ\P$!R4EMV'd\P&!R4EMr\P!RRRR7pV'Ed3VPP4PRí4'Ed^RIHpHp V'VP4p X!V 4p V 'g\P$!R!4M×V \PR&V \PR&R \PR&X !WĽ^,R"7p
\1V
4p
V
\PR&V
P4\PR&\P !R\#V
4 R\#V 4 R#24MMV'd\P&!R%4\PP;R4'\PP;R
V4R 8X\PR,p R&.V ,p\P<!R'VR(R7pVR&8XdRMTp\PP;R4'dD^R)IHp V !\PR,VR"7p
\1V
4p
V
\PR&\PR,p\PP;R4p\PR,pVe\#V4^8Xd\P !R*R R7R#V'd'\P>!R+V R,\#V4 R-24\PP;R4RJpV'd .RîOp\P
!R1VR R2R7pMR.pR.\PR2&\P@!4R3\P9dR4\PR3&\P!^4wpppppV;_uu_4VR5,PC4pVPE4PG4pVPI4PG4p\PJ!R6VVVR7R87on\PJ!R9VVVR:R87ooRRR4V;_uu_4\MVR;,PC4PO4PQ44p\PR!R<VR=R7osRRR4V;_uu_4\MVR>,PC4PO4PQ44p \PR!R?V R@R7orRRR4T;_uu_4.RďOp!\PR!RAV!RBR7oq\PR!RCRDRE.RFR7ou\U^\#V4^,4U"u.uFp"\WV"4NK p#p"\PR!RGV#RHRIRJ7otRRR4V;_uu_4\PX!RKRLRM\PP;R3R44RNRORPRQRR7\PR3&RRR4VnVoVqVrVsVtVu3RSlp$V$!V4pVe V$!V4MRp%\P>!RT\#V4 RU24\P
!RV.RđOR R[R7p&\P@!4RńR]lp'RňR_lp(R`p)Rap*RóRclp+Rdp,V&RW8XE\[V\PP;R3Re4Rf7p-V%e,\[V%\PP;R3Re4Rf7MRp.VRô9dV%eT%MTp/VR/8Xd V.'dT.MT-p0VR08Xd V.'dT.MRp1VR08XdV%eT%MRp2VRô9d \PP;R4MRp3^RgI.H.p4\_T/T0T;'gR\VV1V2V3\WSn4\WSo4\PP;R3R44Rh7
p5\P`!RiV5RjVP4 RkV4Pc4PeRl4 R2RmRnRo7VR/8XdV.'d V'!V.Rq4M$VR08XdV.'d
V'!V-RrV.Rs7M V'!V-Rr4VR08XdV%eV(!VR^V%R/Rt7MVR/8XdV%e V(!V%RuRv7MV(!V4VRô9dV%eT%MTp7\P!^4wp8p9V8;_uu_4V)!V74RRR4V9;_uu_4V*!V74RRR4\P@!4\PP;R4p:V:'VRô9^RI3p;\#V:U<u.uFp<V<Rw,Rx8wgKV<NK up<4p=\#V:U<u.uFp<V<Rw,Rx8XgKV<NK up<4p>\Ph!Ry\#V:4 RzV= R{V> R|2R}R~7;_uu_4\P>!R4V;PkV:4p?R€p@\Pl!V?PnPqV@R.R7R R R7RRR4VR08XdV%eV+!VR„R…R†7V+!V%R‡RR†7EM.V+!V7RbR‰R†7EM!V&RX8XEd\MVR>,PC4PO4PQ44pAVA'g\Pr!RŠ4EM˝\Pt!R4VRô9dV%eT%MTpB.pCXAEF„pDVDXBR>,Pv9dXBVBR>,XD8H,MWfR>,XD8H,pE\[VE4ovRŚXDRŤSvRŽ,RŹSvR,RSvR,R“SvR”,R•SvR,R—SvR,R™SvRš,RSvRś,RťSvRž,/
pFVR08XV%eČXDV%R>,Pv9dV%V%R>,XD8H,MRpGVGe—\#XG4'd†\[XG4owRőVvVw3llpHSvR,R 
VH!R4 2XFRŹ&SvR, VH!R4 2VFR&SvR”, VH!R”4 2VFR“&SvR,R 
VH!R4 2VFR—&SvRš,R 
VH!Rš4 2VFR™&XCPyXF4EK‡ ^RI3opSpPkXC4P{RŹR}Rˇ7pI\Pl!VIR R R7\P@!4\P<!R˘XA4pJVJ'Ed”XJXBR>,Pv9dXBVBR>,XJ8H,MWfR>,XJ8H,pE\[VE4ovV%e,XJV%R>,Pv9dV%V%R>,XJ8H,MRpKVKe\#XK4'd \[XK4MRpLVR08XdXL'd
V'!SvXJXLRs7M%VR/8XdXL'dV'!XLXJ RŁ24M V'!SvXJ4V(!XEXJ R¤24\P!^4wp8p9V8;_uu_4V)!VE4RRR4V9;_uu_4V*!XE4RRR4\P@!4VR08Xd4XKe0\#XK4'dV+!XER„RĄXJ 2R†7V+!XKR‡R¦VJ 2R†7EMV+!XERbR§XJ 2R†7EMV&RY8XE\MVR;,PC4PO4PQ44pM.pCVMFrpDWfR;,VD8H,pE\[VE4ovXCPyR<VDRŤSvRŽ,RŹSvR,RSvR,R“SvR”,R•SvR,R—SvR,R™SvRš,/4Kt ^RI3opSpPkXC4P{RŹR}Rˇ7pI\Pl!VIPnPqV,.RöOR7R R R7VRô9dV%eT%MTpN\P<!R¨XM4pJVJ'Ed“XJXNR;,Pv9dXNVNR;,XJ8H,MWfR;,XJ8H,pE\[VE4ovV%e,XJV%R;,Pv9dV%V%R;,XJ8H,MRpKVKe\#XK4'd \[XK4MRpLVR08XdXL'd
2026-04-12 18:25:46 +10:00
V'!SvXJXLRs7M%VR/8XdXL'dV'!XLXJ RŁ24M V'!SvXJ4V(!XEXJ R¤24\P!^4wp8p9V8;_uu_4V)!VE4RRR4V9;_uu_4V*!XE4RRR4\P@!4VR08Xd3XKe/\#XK4'dV+!XER„R©XJ 2R†7V+!XKR‡RŞVJ 2R†7M5V+!XERbR«XJ 2R†7M&V&RZ8Xd VRô9dV%eT%MTpOV)!VO4V*!VO4\P@!4\Ph!R¬4;_uu_4.R÷OpPVPUQu.uF-pQVQ\PR,P9gK+XQNK/ pPpQ\PR,VP,P4pRVRP}^R¸\U^\#VR4^,44\PP;R4pSVSeCRwXSP9d2XRP}^RwXSRw,PvR\#VR44MXRP}^RwR\4\P>!Rą4\P!.RřO4wpTpUpVVTPRşR»RĽR7pWVUPR˝RľR7pX\P~!XRR R RżR¸\P€PR¸R RŔRÁ7Rw\P€P…RwRŔRÂRĂ7R5\P€P‡
4^<, ^4VZR·&VZR,^8„VZRĐ&VZR5,4VZRŃ&VZR5,VZRŇ&\PR,pdVdPF8p[V[XZP9gKXdX[,PvR\#XZ4VZV[&K: XZP;RÓR\4VZRÓ&VZP;RÔRŐ4VZRÔ&VZ\PR&.peX\Rw,PR\4PVP“4pfV\PťR RĎ7p\\U^\#V\4^,4V\RÖ&V\VfR\8g,P•VfVfR\8g,4EFwp`paVaR,P™4pgR×\MVaRÖ,PQ4444p#XePyRGT#RwT`RŮ\#Va4R<VaR;,P^,RCVaR®,P^,RÚVaR5,PE4RŰVaR­,PI4RÜ\ŁVaRŻ,P™4^4RVg^4RÝVg^8”dRŢMRß/
4EK X\XfR\8H,4wphpFVFR,pgXePyRG\W\­VFRÖ,44RwRxRŮ^R<VFR;,RCVFR®,RÚVFR5,RŰVFR­,RÜ\ŁVFRŻ,^4RVg^4RÝVg^8”dRŢMRß/
4 XePŻVp3lR7Ve'dXeMR\PR&\#X]V]R\8g,PO44pi\P !Rá\#XZ4 RâVi Ră24\P!4XX'dRR\PR&R\PR&\P !Rä4\P!4pj\P@!4\PP;R4e\PR,M\PR,pkXPUQu.uFpQVQXkP9gKXQNK plpQ\PP;R4eR/MR.pm\P`!RćVm Rç2XkXl,R}Rč7RéSn RkSo R2RęRë7RRR4R# +'giEL;i +'giEL;i \.d(p
\P$!RT
R 24RpRp
?
EL%Rp
?
ii;i \2dMp
\P$!R$T
24^RIp\P6!TP944Rp
?
ELhRp
?
ii;i +'giELŹ;i +'giEL;;i +'giELç;iuup"i +'giELg;i +'giEL;i \2dMp6^RIp\P$!RpT6 24\P6!TP944Rp6?6ELoRp6?6ii;i +'giELŇ;i +'giELË;iuup<iuup<i +'giEL±;i +'giELđ;i +'giELé;i +'giEL:;i +'giEL3;iuupQiuupQi +'giR#;i)üu📊 Trade AnalysisÚta_dfNÚ ta_formatÚ ta_accountsÚ ta_ic_bytesÚta_df_originalÚ ta_df_editedÚta_group_summaryz File sourcezMT5 / Quant AnalyzerzIC Markets XLSXTÚ ta_source©Ú
horizontalrz<br>©Úunsafe_allow_htmlu
đź—‘ ClearÚta_clear)rz2Upload MT5 Report (HTM/HTML) or Quant Analyzer CSVÚ ta_upload)rOrú.htmlú.csvu âś“ Loaded u trades — u,Could not parse report — check file formatz*Please upload a .htm, .html, or .csv file.z*Upload IC Markets Position History (.xlsx))Úget_icmarkets_accountsÚparse_icmarkets_xlsxuHicmarkets_parser.py not found — ensure it is in the MT5Tools folder. (Ú)uJNo accounts found — check this is an IC Markets Position History export.)Úaccountz account(s) foundzError parsing file: zPlease upload an .xlsx file.z All accountsÚAccountÚ
ta_ic_account)r„
<div class="info-card">
Upload an MT5 account history report (.htm/.html), MT5 backtest report,
2026-04-14 08:39:30 +10:00
or a Quant Analyzer CSV export to begin analysis.
</div>
zFormat detected: **u** · z
2026-04-12 18:25:46 +10:00
total tradesÚOriginalr^ÚBothÚViewÚ ta_view_selÚ
ta_depositr2rÚFromÚta_from)ÚvalueÚ min_valueÚ max_valuerÚToÚta_tor3ÚSymbolÚta_symrz
Strategy / EAÚta_stratz Day of weekÚta_daysÚTypeÚbuyÚsellÚta_typezTrade #Ú
ta_idx_selzAll trades (filter by #))rÚ placeholderzInitial Balance ($)gY@gĐcAg@Ź@z%.0fÚta_deposit_filterz3Used for % calculations in monthly table and report)rrrÚstepÚformatrÚhelpcóř<VP4pWR,PPSVR,PPS8*,,pS'dWR,PS4,pS'dWR,PS4,pS'dWR,PS4,pS
'dWR,PS
4,pVP RR7pS 'dgS Uu.uF7p\ V4^,
\
V48gK%\ V4^,
NK9 ppVPV,P RR7pV#uupi)rr3rrrOTr*)rrÚdateÚisinrrrDÚiloc) Úsrc_dfrWriÚsel_idxrJrKÚsel_daysÚ sel_strategyÚ
sel_symbolÚ