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

415 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Ú
commissiongÚ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
2V%!RR#R
R74 NRkNV&!RR#SR,Rj
2V%!RR#44 NRkNV&!R„R#SR…,Rj
2V%!R…R#R
R74 NRkNV&!R†\9SR‡,4V%!R‡Rf44 NRkNV&!R\9SR‰,4V%!R‰RfR
R74 NRkNV&!RŠ\9SR,4V%!RRf44 NRkNV&!RŚSRŤ, Rn2V%!RŤRn44 NRkNV&!RŽ\9SRŹ,4V%!RŹRf44 NRkNV&!RSR, Rn2V%!RRn44 NRN4p'RĽV=3R”llp(V(!V
R•V R“R7p)Rfp*V'S=P?V4p+R—RfP;RV+P44,R™,p,Rfp-V+PA4Fjwp.o>S>P=Rš^4p\CV4pT^8”dRM
T^8dRśMRfo;RfP;T;T>3lT+P44p/T-R—T/ R™2,
p-Kl \EV+4p0RžV0 RźV, R V- Rˇ2p*.R˝Op1V1U2u.uFp2V2V
P9gKV2NK p1p2R—RfP;V144,R™,p3Rfp4\GV
V1,PA44FRwp5wp.o>Rfo;\CS>R,4pV^8”dRŁMR¤o;RfP;T;T>3lT144p/T4R—T/ R™2,
p4KT \EV
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Ú_ddr
rrÚ 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?r@Ú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#r‡có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ú
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) Nr‡rrÚ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#)r‡z<td>ú</td>úrgba(52,194,122,0.18)rmÚ transparentr^r‰ú#888ú+.2frĄő—ú<td style="background:ú;color:ú">ú<tr>rŢ)ÚiterrowsrCr)Ú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órs&&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)rr‡Nrś©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!r6séаA $ q Ą»ůrÝzrgba(52,194,122,0.08)úrgba(220,80,80,0.08)c3óV<"TFpRVR8XdSMR RSV, R2xK R#5i)rr‡Nrś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>
<html><head>
<meta charset="utf-8">
<title>a</title>
2026-04-14 08:39:30 +10:00
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<style>
2026-04-14 08:39:30 +10:00
* { box-sizing: border-box; margin: 0; padding: 0; }
body { background:#0e1117; color:#e2e8f0; font-family:sans-serif; font-size:13px; padding:24px; }
h1 { font-size:22px; color:#7c6af7; margin-bottom:4px; }
h2 { font-size:16px; color:#a0aec0; margin:24px 0 12px; border-bottom:1px solid rgba(255,255,255,0.08); padding-bottom:6px; }
2026-04-14 08:39:30 +10:00
h3 { font-size:14px; color:#a0aec0; margin:20px 0 8px; }
.meta { color:#666; font-size:11px; margin-bottom:24px; }
2026-04-14 08:39:30 +10:00
.stats-grid { display:grid; grid-template-columns:repeat(5,1fr); gap:10px; margin-bottom:20px; }
.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; }
2026-04-12 18:25:46 +10:00
.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ÚsymbolrNÚvolumeÚ
open_priceÚ close_pricer)$rrKr&ÚnowrrÚ
to_numericr rrÚ sort_valuesr
ÚcumsumÚcummaxrrrrÚtolistrÚappendrr ÚreindexÚsortedÚuniqueÚstrrrCÚ DataFrameręÚfloatÚlenÚ enumerate)?Údf_plotr—rÚview_selrÚ
df_compareÚ
group_summaryÚ date_fromÚdate_torôr&r3raÚdf_srLÚ 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™Ú
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ÚhtmlrJrKrs?&f&&f&&&&& @@@@@r!Ú_generate_html_reportrm5sţ€ó
ŰÝ Ź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đÓŘ
Ź_‰_Ó
Řź=™=¨¨LŐ)9Ŕ(K×RĐSTÓUŘź>™>¨"¨\Ő*:Ŕ8LŘ
ŹY‰Y|n
-×
2026-04-12 18:25:46 +10:00
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
 T%Ť[×
Ń

2026-04-12 18:25:46 +10:00
!×
) 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Đ;ą[ČĐX[ĐeiÔ=jÓđmđń
\Qu 2°4Đ9ą;Ŕ|ĐTWÓ;XÓđ[đń
]Qu 3°DĐ:ąKČ
ĐVYĐcgÔ<hÓđkđń
Đ
¤# eĐ,=Ő&>Ó"?Á;ĐO`ĐacÓCdÓđgđń 
Đ
¤# eĐ,?Ő&@Ó"AÁ;ĐObĐceĐosÔCtÓvđ!đ wđ!ń"
]śS  }Ő!5Ó6ąkČ-ĐXZÓ>[Ó]đ#đ"^đ#ń$
_  oŐ 6Đ7°qĐ9ąkČ/ĐZ]Ó>^Ó`đ%đ$ađ%ń&
2026-04-14 08:39:30 +10:00
^śS  ~Ő!6Ó7ąkČ.ĐY[Ó>\Ó^đ'đ&_đ'ń(
Đ
 Đ'7Ő!8Đ 9¸Đ;ąkĐJZĐ[^Ó>_Óađ)đ(b ô)€J÷08
ńt! Đ'<ŔgĐX]Ô^€Lđ€HßŘ +Řr—w‘wŃż
ş
ÓŐPŘ Ř—n&‰FA
2026-04-14 08:39:30 +10:00
 )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' Đń
2026-04-14 08:39:30 +10:00
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<Ńp;Ň<qÓqŘqę q
2026-04-12 18:25:46 +10:00
ë5qě
qí)qń
qńqc$óLCanaoapaqarasatauavaw€\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&RW8XEde\[V4p-V%e \[V%4MRp.VRň9dV%eT%MTp/VR/8Xd V.'dT.MT-p0VR08Xd V.'dT.MRp1VR08XdV%eT%MRp2VRň9d \PP;R4MRp3^ReI.H.p4\_T/T0T;'gR\VV1V2V3\WSn4\WSo4\PP;R3R44Rf7
p5\P`!RgV5RhVP4 RiV4Pc4PeRj4 R2RkRlRm7VR/8XdV.'d V'!V.Ro4M$VR08XdV.'d
V'!V-RpV.Rq7M V'!V-Rp4VR08XdV%eV(!VR^V%R/Rr7MVR/8XdV%e V(!V%RsRt7MV(!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<Ru,Rv8wgKV<NK up<4p=\#V:U<u.uFp<V<Ru,Rv8XgKV<NK up<4p>\Ph!Rw\#V:4 RxV= RyV> Rz2R{R|7;_uu_4\P>!R}4V;PkV:4p?R~p@\Pl!V?PnPqV@R.R€7R R R7RRR4VR08XdV%eV+!VRRR„7V+!V%R…R†R„7EM.V+!V7RbR‡R„7EM!V&RX8XEd\MVR>,PC4PO4PQ44pAVA'g\Pr!R4EM˝\Pt!R‰4VRň9dV%eT%MTpB.pCXAEF„pDVDXBR>,Pv9dXBVBR>,XD8H,MWfR>,XD8H,pE\[VE4ovRŠXDRSvRŚ,RŤSvRŽ,RŹSvR,RSvR,R“SvR”,R•SvR,R—SvR,R™SvRš,RSvRś,/
pFVR08XV%eČXDV%R>,Pv9dV%V%R>,XD8H,MRpGVGe—\#XG4'd†\[XG4owRóVvVw3llpHSvRŽ,
VH!RŽ4 2XFRŤ&SvR, VH!R4 2VFRŹ&SvR, VH!R4 2VFR&SvR,
VH!R4 2VFR•&SvR,
VH!R4 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'!SvXJXLRq7M%VR/8XdXL'dV'!XLXJ Rˇ24M V'!SvXJ4V(!XEXJ R˘24\P!^4wp8p9V8;_uu_4V)!VE4RRR4V9;_uu_4V*!XE4RRR4\P@!4VR08Xd4XKe0\#XK4'dV+!XERRŁXJ 2R„7V+!XKR…R¤VJ 2R„7EMV+!XERbRĄXJ 2R„7EMV&RY8XE\MVR;,PC4PO4PQ44pM.pCVMFrpDWfR;,VD8H,pE\[VE4ovXCPyR<VDRSvRŚ,RŤSvRŽ,RŹSvR,RSvR,R“SvR”,R•SvR,R—SvR,/4Kt ^RI3opSpPkXC4P{RŤR{Rź7pI\Pl!VIPnPqV,.RôOR€7R 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
V'!SvXJXLRq7M%VR/8XdXL'dV'!XLXJ Rˇ24M V'!SvXJ4V(!XEXJ R˘24\P!^4wp8p9V8;_uu_4V)!VE4RRR4V9;_uu_4V*!XE4RRR4\P@!4VR08Xd3XKe/\#XK4'dV+!XERR§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;R4pSVSeCRuXSP9d2XRP}^RuXSRu,PvR\#VR44MXRP}^RuR\4\P>!R·4\P!.RöO4wpTpUpVVTPR¸RąRşR7pWVUPR»RĽR7pX\P~!XRR R R˝R¶\P€PR¶R RľRż7Ru\P€P…RuRľ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\Ru,PR\4PVP“4pfV\PťR RÍ7p\\U^\#V\4^,4V\RÔ&V\VfR\8g,P•VfVfR\8g,4EFwp`paVaRŽ,P™4pgRŐP©\MVaRÔ,PQ4444p#XePyRGT#RuT`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Ô,44RuRvR×^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 RiSo R2RčRé7RRR4R# +'giELÎ;i +'giELK;i \.d(p
2026-04-12 18:25:46 +10:00
\P$!RT
R 24RpRp
?
ELĺRp
?
ii;i \2dMp
\P$!R$T
24^RIp\P6!TP944Rp
?
EL(Rp
?
ii;i +'giELO;i +'giELű;i +'giEL§;iuup"i +'giEL';i +'giELŰ;i \2dMp6^RIp\P$!RnT6 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©Ú
horizontalrŹz<br>©Úunsafe_allow_htmlu
đź—‘ ClearÚta_clear)z2Upload MT5 Report (HTM/HTML) or Quant Analyzer CSVÚ ta_upload)rNú.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,
or a Quant Analyzer CSV export to begin analysis.
</div>
zFormat detected: **u** · z
total tradesÚOriginalr]ÚBothÚViewÚ ta_view_selÚ
2026-04-14 08:39:30 +10:00
ta_depositr.rÚFromÚta_from)ÚvalueÚ min_valueÚ max_valuerŹÚToÚta_tor/ÚSymbolÚta_symrz
Strategy / EAÚta_stratz Day of weekÚta_daysÚTypeÚbuyÚsellÚta_typezTrade #Ú
ta_idx_selzAll trades (filter by #))Ú placeholderzInitial Balance ($)gY@gĐcAg@Ź@z%.0fÚta_deposit_filterz3Used for % calculations in monthly table and report)ÚstepÚformatrŹÚhelpcóř<VP4pWR,PPSVR,PPS8*,,pS'dWR,PS4,pS'dWR,PS4,pS'dWR,PS4,pS
2026-04-12 18:25:46 +10:00
'dWR,PS
4,pVP RR7pS 'dgS Uu.uF7p\ V4^,
\
V48gK%\ V4^,
NK9 ppVPV,P RR7pV#uupi)rr/rrrNTr))rrÚdateÚisinr
r
r@Úiloc) Úsrc_dfrSrhÚsel_idxrFrGÚsel_daysÚ sel_strategyÚ
sel_symbolÚ
sel_tradesÚsel_types & €€€€€€€r!Ú_apply_filtersÚrender.<locals>._apply_filters'sř€Ř ŹK‰K‹MŘ
Ť~× Ń ×ŃŤ~× Ń ×Ń