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

260 lines
56 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
HtHtRtRtR#)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
2026-04-14 08:39:30 +10:00
Ń Ř źÔ 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$ó„>aeafagahaiajakalaman€\P!R4RRRRR.RRRRRRRR/P4F/wrV\P9gKV\PV&K1 \P!^^.4wr#V;_uu_4\P
!R R
2026-04-14 08:39:30 +10:00
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
2026-04-14 08:39:30 +10:00
4p
V
2026-04-14 08:39:30 +10:00
\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
2026-04-12 18:25:46 +10:00
\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
!R0VR R1R7pMR-pR-\PR1&\P@!4R2\P9dR3\PR2&\P!^4wppppV;_uu_4VR4,PC4pVPE4PG4pVPI4PG4p\PJ!R5VVVR6R77oe\PJ!R8VVVR9R77ofRRR4V;_uu_4\MVR:,PC4PO4PQ44p\PR!R;VR<R7ojRRR4V;_uu_4\MVR=,PC4PO4PQ44p\PR!R>VR?R7oiRRR4T;_uu_4.RŘOp \PR!R@V RAR7oh\PR!RBRCRD.RER7ol\U^\#V4^,4U!u.uFp!\WV!4NK p"p!\PR!RFV"RGRHRI7okRRR4VeVfVhViVjVkVl3RJlp#V#!V4pVe V#!V4MRp$\P>!RK\#V4 RL24\P
!RM.RŮOR RRR7p%\P@!4RÚRTlp&RŰRVlp'RWp(RXp)RÜRZlp*R[p+V%RN8XEdV\YV4p,V$e \YV$4MRp-VR.8XdV-'d V&!V-R\4M$VR/8XdV-'d
V&!V,R]V-R^7M V&!V,R]4VR/8XdV$eV'!VRUV$R.R_7MVR.8XdV$e V'!V$R`Ra7MV'!V4VRÝ9dV$eT$MTp.\P!^4wp/p0V/;_uu_4V(!V.4RRR4V0;_uu_4V)!V.4RRR4\P@!4\PP;R4p1V1'VRÝ9^RI-p2\#V1U3u.uFp3V3Rb,Rc8wgKV3NK up34p4\#V1U3u.uFp3V3Rb,Rc8XgKV3NK up34p5\P\!Rd\#V14 ReV4 RfV5 Rg2RhRi7;_uu_4\P>!Rj4V2P_V14p6Rkp7\P`!V6PbPeV7Rl.Rm7R R Rn7RRR4VR/8XdV$eV*!VRoRpRq7V*!V$RrRsRq7EM.V*!V.RYRtRq7EM!V%RO8XEd\MVR=,PC4PO4PQ44p8V8'g\Pf!Ru4EM˝\Ph!Rv4VRÝ9dV$eT$MTp9.p:V8EF„p;V;V9R=,Pj9dV9V9R=,V;8H,MWfR=,V;8H,p<\YV<4omRwV;RxSmRy,RzSmR{,R|SmR},R~SmR,R€SmR,RSmR,R„SmR…,R†SmR‡,RSmR‰,/
p=VR/8XV$eČV;V$R=,Pj9dV$V$R=,V;8H,MRp>V>e—\#V>4'd†\YV>4onRŢVmVn3llp?SmR{,R
V?!R{4 2V=Rz&SmR}, V?!R}4 2V=R|&SmR, V?!R4 2V=R~&SmR,R
V?!R4 2V=R&SmR…,R
V?!R…4 2V=R„&V:PmV=4EK‡ ^RI-ogSgP_V:4PoRzRhRŚ7p@\P`!V@R R Rn7\P@!4\P<!RŤV84pAVA'Ed”XAV9R=,Pj9dV9V9R=,XA8H,MWfR=,XA8H,p<\YV<4omV$e,XAV$R=,Pj9dV$V$R=,XA8H,MRpBVBe\#XB4'd \YXB4MRpCVR/8XdXC'd
V&!SmXAXCR^7M%VR.8XdXC'dV&!XCXA RŽ24M V&!SmXA4V'!V<XA RŹ24\P!^4wp/p0V/;_uu_4V(!V<4RRR4V0;_uu_4V)!V<4RRR4\P@!4VR/8Xd4XBe0\#XB4'dV*!V<RoRXA 2Rq7V*!XBRrRVA 2Rq7EMV*!V<RYRXA 2Rq7EMV%RP8XE\MVR:,PC4PO4PQ44pD.p:VDFrp;WfR:,V;8H,p<\YV<4omV:PmR;V;RxSmRy,RzSmR{,R|SmR},R~SmR,R€SmR,RSmR,R„SmR…,/4Kt ^RI-ogSgP_V:4PoRzRhRŚ7p@\P`!V@PbPeV+.RßORm7R R Rn7VRÝ9dV$eT$MTpE\P<!R“XD4pAVA'Ed“XAXER:,Pj9dXEVER:,XA8H,MWfR:,XA8H,p<\YV<4omV$e,XAV$R:,Pj9dV$V$R:,XA8H,MRpBVBe\#XB4'd \YXB4MRpCVR/8XdXC'd
V&!SmXAXCR^7M%VR.8XdXC'dV&!XCXA RŽ24M V&!SmXA4V'!V<XA RŹ24\P!^4wp/p0V/;_uu_4V(!V<4RRR4V0;_uu_4V)!V<4RRR4\P@!4VR/8Xd3XBe/\#XB4'dV*!V<RoR”XA 2Rq7V*!XBRrR•VA 2Rq7M5V*!V<RYRXA 2Rq7M&V%RQ8Xd VRÝ9dV$eT$MTpFV(!VF4V)!VF4\P@!4\P\!R—4;_uu_4.RŕOpGVGUHu.uF-pHVH\PR,P9gK+XHNK/ pGpH\PR,VG,P4pIVIPq^RŁ\U^\#VI4^,44\PP;R4pJVJeCRbXJP9d2XIPq^RbXJRb,PjR\#VI44MXIPq^RbRS4\P>!R¤4\P!.RáO4wpKpLpMVKPRĄR¦R§R7pNVLPR¨R©R7pO\Pr!XIR R RŞRŁ\PtPwRŁR R«R¬7Rb\PtPyRbR«R­R®7R4\PtP{
PP•4^<, P—^4VQR˘&VQR{,^8„VQR»&VQR4,PP™4VQRĽ&VQR4,PVQR˝&\PR,p[V[PF8pRVRXQP9gKX[XR,PjR\#XQ4VQVR&K: XQP;RľRS4VQRľ&VQP;RżRŔ4VQRż&VQ\PR&.p\XSRb,P…RS4PVP‡4p]VSV]RS8g,P‰V]V]RS8g,4wpWpXVXR{,4p^X\PmRbTWRÁ\#VX4R;VXR:,^,RBVXR™,^,RÂVXR4,PE4RĂVXR,PI4RÄ\—VXRš,4^4Rl\—V^^4RĹV^^8”dRĆMRÇ/ 4K× XSX]RS8H,4Frwp_p=V=R{,p^X\PmRbRcRÁ^R;V=R:,RBV=R™,RÂV=R4,RĂV=R,RÄ\—V=Rš,^4Rl\—V^^4RĹV^^8”dRĆMRÇ/ 4Kt X\PźVg3lR7V\'dX\MR\PR&\#XTVTRS8g,PO44p`\P !RÉ\#XQ4 RĘV` RË24\P!4XO'dRR\PR&R\PR&\P !RĚ4\P!4pa\P@!4\PP;R4e\PR,M\PR,pbXGUHu.uFpHVHXbP9gKXHNK pcpH\PP;R4eR.MR-pd\P !RÎVd RĎ2XbXc,RhRĐ7RŃSe RŇSf R2RÓRÔ7RRR4R# +'giELŘ;i +'giELU;i \.d(p
\P$!RT
R24RpRp
?
ELďRp
?
ii;i \2dMp
\P$!R#T
24^RIp\P6!TP944Rp
?
EL2Rp
?
ii;i +'giELZ;i +'giEL;i +'giEL˛;iuup!i +'giEL2;i +'giELŢ;i +'giEL×;iuup3iuup3i +'giEL˝;i +'giELü;i +'giELő;i +'giE
LF;i +'giE
2026-04-12 18:25:46 +10:00
L?;iuupHiuupHi +'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©Ú
horizontalÚkeyz<br>©Úunsafe_allow_htmlu
2026-04-12 18:25:46 +10:00
đź—‘ ClearÚta_clear)r/z2Upload MT5 Report (HTM/HTML) or Quant Analyzer CSVÚ ta_upload)Útyper/ú.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)r7
<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ÚOriginalÚEditedÚBothÚViewÚ ta_view_selÚ
ta_depositçĂ@rÚFromÚta_from)ÚvalueÚ min_valueÚ max_valuer/ÚToÚta_toÚsymbolÚSymbolÚta_symrz
Strategy / EAÚta_stratz Day of weekÚta_daysÚTypeÚbuyÚsellÚta_typezTrade #Ú
ta_idx_selzAll trades (filter by #))r/Ú placeholdercóř<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)rrJrrr4Údrop)rrÚdateÚisinÚ reset_indexÚintÚlenÚiloc) Úsrc_dfÚsel_idxÚ date_fromÚdate_toÚsel_daysÚ sel_strategyÚ
sel_symbolÚ
sel_tradesÚsel_types & €€€€€€€r!Ú_apply_filtersÚrender.<locals>._apply_filtersÍsř€Ř ŹK‰K‹MŘ
Ť~× Ń ×ŃŤ~× Ń ×Ń
3ç Q ť{×
Ó<ß Q ť}×1°,Ó@ß Q Ő/×4°XÓ?ß Q ťyź~™~¨hÓ8Ř
ŹM‰Mt $ß Ů)3Ó A´s¸1łv¸aµxÄ#ŔaĂ&Ń7H”x”s1“va—xw•×Đ6ůňJs Ä"E7Ä:E7z
Showing **z** trades after filtersz
Analysis modeÚOverallú By Strategyú By SymbolúBy Day of WeekÚta_modeÚcóaaV'd\P!RV R24R7VV3RllpR8VV3Rllp\P!^4wrVrxp VPRRSR,R
2V!RR4R7VPRSR , R
2V!R R
4R7VPR SR , V!R R
4R7VPRSR, V!RR
4R7V PRRSR,R
2V!RR4R7\P!^4wrVrxp VPRSR,V!RR4R7VPRRSR,R
2V!RR4R7VPRRSR,R
2V!RR4RR7VPRRSR,R
2V!RR4RR7V PRRSR,R
2V!RR4R7\P!^4wrVrxp VPRSR ,V!R R4R7VPR!SR",V!R"R4RR7VPR#SR$, R%2V!R$R4R7VPR&SR', R%2V!R'R4RR7V PR(RSR),R
2V!R)R4RR7\P!^4wrVrxVPR*SR+,V!R+R4R7VPR,SR-, R
2V!R-R
4R7VPR.SR/,V!R/R4R7VPR0SR1, R
2V!R1R
4R7\P!^4wrVrxVPR2SP R3^4V!R3R4R7VPR4SP R5^4 V!R5R
4R7R6#)9ú**Ú$có°<SeVS9dR#SV,SV,,
pV^8XdR#VR8XdRVR
2#VR8XdVR
R2#VR8XdVR
#VR
#) z?Return delta string for st.metric when compare stats available.Nrsú+,.2fÚ+.1fÚ+.2fú+g©)r/ÚfmtÚhigher_is_betterÚdiffÚstatsÚ
stats_compares&&& €€r!Ú_deltaÚ,render.<locals>.render_stats.<locals>._deltaďsvř€ŕҰ=Ô(@ŮŘ  Ő¨c­
Ő2qŚyŮŘcŚzŘ4 Řt AĐŘtĐrĐ#r#cóš<SeVS9dR#SV,SV,,
pV^8XdR#VR8XdRVR
2#VR8XdVR
R2#VR
#)z4Delta where lower is better (e.g. drawdown, losses).Nrsrurvrwrzr{)r/r|r~rr€s&& €€r!Ú
_inv_deltaÚ0render.<locals>.render_stats.<locals>._inv_delta˙seř€ŕҰ=Ô(@ŮŘ  Ő¨c­
Ő2qŚyŮŘcŚzŘ4 Řt AĐrĐ#r#ú
2026-04-12 18:25:46 +10:00
Net Profitrz,.2f)ÚdeltazWin RateÚwin_ratervú
Profit FactorÚ
profit_factorrxz R:R RatioÚrr_ratioÚ
ExpectancyÚ
expectancyz Total TradesÚ total_tradesrpzAvg WinÚavg_winzAvg LossÚavg_lossÚinverse)r‡Ú delta_colorúMax DDÚ max_drawdownz
Best TradeÚ
best_tradezMax Consec WinsÚmax_consec_winszMax Consec LossesÚmax_consec_lossesz Avg Win DurÚavg_win_durationÚmz Avg Loss DurÚavg_loss_durationz Worst TradeÚ worst_tradez Long TradesÚ long_tradesz
Long Win RateÚ
long_win_ratez Short TradesÚ short_tradeszShort Win RateÚshort_win_ratez Trading DaysÚ trading_daysz Trades / DayÚtrades_per_dayN)rsT)rs)ÚstÚmarkdownrÚmetricÚget)
rÚlabelr€rr„Úc1Úc2Úc3Úc4Úc5s
f&f r!Ú render_statsÚrender.<locals>.render_statsës+ů€ß Ü ŹKŠK"UG 2Ô   źZšZ¨›]ŃŘ
Ź ‰ , Q u¨\Ő':¸4Đ&@Đ#AŮ|¨CÓ ô
2026-04-12 18:25:46 +10:00
Ź ‰ * e¨JŐ&7Đ%8¸Đ#:Ůz¨#Ó ô
Ź ‰ / e¨OŐ&<Đ%=٨sÓ ô
Ź ‰ + e¨JŐ&7Đ%8Ůz¨#Ó ô
2026-04-12 18:25:46 +10:00
Ź ‰ , Q u¨\Ő':¸4Đ&@Đ#AŮ|¨CÓ ô źZšZ¨›]ŃŘ
Ź ‰ . Ő#8Ů~¨bÓ ô
Ź ‰ ) Q u¨YŐ'7¸Đ&=Đ#>ŮÓ ô
2026-04-12 18:25:46 +10:00
Ź ‰ * Q u¨ZŐ'8¸Đ&>Đ#?Ů" :¨cÓ2Ŕ đ ô Kŕ
Ź ‰ ( Q u¨^Ő'<¸TĐ&BĐ#CŮ" >°#Ó6ŔIđ ô Oŕ
Ź ‰ , Q u¨\Ő':¸4Đ&@Đ#AŮ|¨CÓ ô źZšZ¨›]ŃŘ
Ź ‰ Đ# uĐ->Ő'?ŮĐÓ ô
Ź ‰ Đ% uĐ-@Ő'AŮ"Đ#6°rÓ:Č đ ô Sŕ
Ź ‰ -¨%Đ0BŐ*CĐ)DŔAĐ'FŮĐ1°"Ó ô
Ź ‰ .¨%Đ0CŐ*DĐ)EŔQĐ'GŮ"Đ#6°rÓ:Č đ ô Sŕ
Ź ‰ ¨5°Ő+?ŔĐ*EĐ'FŮ" Ó5Ŕ9đ ô Nôźš A›Ř
Ź ‰ - Ő#7Ů}¨RÓ ô
Ź ‰ / e¨OŐ&<Đ%=¸QĐ#?٨sÓ ô
Ź ‰ . Ő#8Ů~¨bÓ ô
Ź ‰ Đ" eĐ,<Ő&=Đ%>¸aĐ#@ŮĐÓ ôźš A›Ř
Ź ‰ . U§YˇY¨~¸qÓ%AŮ~¨bÓ ô
Ź ‰ Ż © Đ2BŔAÓ(FĐ'GŮĐÓ ö 6r#ú Equity Curvecój^RIpVPR4P4p.RROpVPRR4PRR4PRR 4P R4p\
P !^4pV^,PR
R R V 2R
7p V^,PRRRV 2R
7p
V^,PRRRV 2R
7p V^,PRRRV 2R
2026-04-14 08:39:30 +10:00
7p \P!4p
V 'VR,P4VR&V
P\P!VR,VR,RR\R^R7RRR74Ve€VPR4P4pVR,P4VR&V
P\P!VR,VR,RV\R^RR7RRR74V
'R VP 9\\VR ,P!4P#444wppWUR ,V8H,P4pVR,P4VR&V
P\P!VR,VR,RV\Wo^,\%V4,,R!R"R7R#74 V 'R$VP 9\\VR$,P!4P#444wppWUR$,V8H,P4pVR,P4VR&V
P\P!VR,VR,RV\Wo^,\%V4,,R!RR7R#74 V 'd×R%VP 9\.RSO4F´wppWUR%,V8H,P4pVP&'dK:VR,P4VR&V
P\P!VR,VR,RV\Wo^,\%V4,,R!R7R#74 V
P)VR&R'R'\R(R)7\R*R R+7\R*R,R R-7\^<^^(^(R.7\R'^R/7R0R17
\
P*!V
R R2V 2R37\
P,!R44VR,P4VR5&VR5,P/4VR6&VR5,VR6,,
VR7&\P!4pVP\P!VR,VR7,RR\R8R!R7R9R:R;74VVPR4P4pVR,P4VR5&VR5,P/4VR6&VR5,VR6,,
VR7&VP\P!VR,VR7,RR\R<R!R7R=R>V 2R;74VP)^R'R'\R(R)7\R*R RR?7\R*R,R R-7\^<^^^R.7RR@7\
P*!VR RAV 2R37\
P,!RB4VP1VR,P2P44R,P74P94pRCRD.VnVRD,P;RE4VRF&\P!4pVP\P<!VRC,VRD,VRF,R^RG74VVPR4P4pVP1VR,P2P44R,P74P94pRCRD.VnVRD,P;RH4VRF&VP\P<!VRC,VRD,VRF,V^RG74VP)^ RIR'R'\R(R)7\R*R R+7\R*R,R R RJRK7\^<^^^(R.7\R'RLRMRNRO7VRJRP7
\
P*!VR RQV 2R37R#)TéNrú#7c6af7ú#34C27AÚ Ú—rpz
Account totalTÚeq_acc_)rEr/rleq_str_rmÚeq_sym_rnÚeq_dow_rÚ_cumÚlinesr<)ÚcolorÚwidthÚtozeroyzrgba(124,106,247,0.06))rxÚmodeÚnameÚlineÚfillÚ fillcolorÚdash)zrgba(52,194,122,0.04)rgř?Údot)rxrJrihú
rgba(0,0,0,0)ú
2026-04-14 08:39:30 +10:00
sans-serif©Úfamilyúrgba(128,128,128,0.15))Ú gridcolorÚshowgridrs)Ú
tickprefixrΩÚrr`Úb)ÚbgcolorÚ borderwidthz x unified)
ÚtitleÚheightÚ plot_bgcolorÚ
paper_bgcolorÚfontÚxaxisÚyaxisÚmarginÚlegendÚ hovermodeÚeq_fig_)Úuse_container_widthr/z **Drawdown**Ú_cum2Ú_peakÚ_ddzrgba(124,106,247,0.8)zrgba(124,106,247,0.08)z DD Original)rxzrgba(220,80,80,0.8)zrgba(220,80,80,0.08)zDD )Úshowticklabels)r×Ú
showlegendÚeq_dd_z
**Daily P&L**rXÚpnlcóV^dR#R#)zrgba(52,194,122,0.85)zrgba(220,80,80,0.85)r{©Úvs&r!Ú<lambda>Ú5render.<locals>.render_equity_curve.<locals>.<lambda>µs°°a´ĐSĐ=SĐSr#)rxÚ marker_colorrÂÚ offsetgroupcóV^dR#R#)zrgba(124,106,247,0.45)zrgba(255,165,0,0.45)r{s&r!Ĺs°a¸1´XĐBXĐXr#Úgroupzrgba(128,128,128,0.4))ÚzerolineÚ
2026-04-14 08:39:30 +10:00
zerolinecolorÚbottomgR¸…ëQđ?)Ú orientationÚyanchorrŔ)
r×ÚbarmoderŘÚ eq_daily_)
r˛z#F5A623ú#E05555z#4C8EF5z#A78BFAz#22D3EEz#FB923Cz#F472B6z#86EFAC©ÚMondayÚTuesdayÚ WednesdayÚThursdayÚFriday)rÚ sort_valuesrÚreplaceÚstripr˘rÚcheckboxÚgoÚFigureÚcumsumÚ add_traceÚScatterÚdictÚ enumerateÚsortedÚdropnaÚuniquer\ÚemptyÚ
update_layoutÚ plotly_chartrŁÚcummaxÚgroupbyrrXÚsumrZÚapplyÚBar)Údf_plotr¦Ú
2026-04-14 08:39:30 +10:00
df_compareÚ
compare_labelrÚdf_sÚCOLORSÚsafe_keyÚovÚ show_accountÚ
2026-04-12 18:25:46 +10:00
show_strategyÚ show_symbolÚshow_dowÚfigÚdf_cÚstratÚsubÚsymÚdowÚfig_ddÚdf_c2ÚdailyÚfig_dÚdcÚdaily_cs&&&& r!Úrender_equity_curveÚ#render.<locals>.render_equity_curveAŰŘ×" 0×7ňEđ—=‘=  SÓ1°#°cÓBŔ5ČÓRĐSVÓWÜ
ŹZŠZ‹]Řź ¸tČGĐT\ĐS]ĐJ^Ó_ Řź }¸uČGĐT\ĐS]ĐJ^Ó_
Řź {¸uČGĐT\ĐS]ĐJ^Ó_ ŘźĐ'7¸uČGĐT\ĐS]ĐJ^Ó_äŹiŠi‹kç Ř  Ő6D‰LŘ ŹM‰Mś"ź*š*بV­ ¸7ČÜ  °ÔĐ*Bôô
đ Ň-¨lÓBŘ# 1×:V Ř
śbźjšjŘ(¨D°­L¸ I°Q¸"Đ.Eô ô÷ Z¨4Ż<©<Ô%¤f¨T°*Ő-=×-DŃ-DÓ-F×-MŃ-MÓ-OÓ&PÖQ 
Ő+¨UŃ:Ř! /×8F Ř
2026-04-12 18:25:46 +10:00
śbźjšjŘ'¨3¨v­;¸WČ5Ü F¨a­C´°VłŐ+<Ő$=ŔSČuÔöńR÷ 8 t§|ˇ|Ô#¤F¨4°­>×+@Ń+@Ó+B×+IŃ+IÓ+KÓ$LÖM ť>¨3Ń/×6Ř! /×8F Ř
śbźjšjŘ'¨3¨v­;¸WČ3Ü F¨a­C´°VłŐ+<Ő$=ŔSČvÔöńN÷ 
¨Ż©Ô#Ň$XÖY‘ 
ŐŃ;Ř—9—99™hŘ! 8F Ř
śbźjšjŘ'¨3¨v­;¸WČ3Ü F¨a­C´°VłŐ+<Ő$=ŔSÔöń Zđ ×ŃŘ ŘÜĐ!9ŔDÔĐ!9ŔcĐTXÔ"  b¨BÔ ¸ ô
ô ŹŠ°¸WŔXŔJĐ;OŐ Ź Š *×3W‰
Ř
×.W‰
Ř
¨¨W­
Ő5U‰ ÜŘ×ŃśźšŘ  D¨ĄKŘĐ3¸3Ô.°]ô 
ô đ Ň ×*¨<Ó8×?" 0×9E'‰NŘ" 7ť^×4E'‰NŘ" 7ť^¨e°G­<E%‰LŘ × Ń śRźZšZŘ Ő¨u­Ř 9ÜĐ 5¸SÔ¸]¸OĐ7Lô ô
đ ×ŃŘŘÜĐ!9ŔDŘ&+ôĐ!9ŔcŘ $ô"  a¨1Ôđ ô
ô ŹŠ°DŔŔxŔjĐ>QŐ Ź Š d 0×3×9¸,Ő‘#“%ź
đ ŕ Ś
Ř× Ug‰ô— ’ “ Ř
ŹśźšŘFŤmu Uť|ŘŘŘô 
ô đ Ň × Ó5×<—zz " \Ő"2×"5Ń"5×":Ń":Ó;¸źk™k›mđ
ŕ% enGŚOŘ& uť~× ZG ŕ ŹO‰OśBźFšFŘ&•/ W¨UĄ^Ř$ ô ô
đ ×ŃŘ ŘÜĐ!9ŔDÔĐ!9ŔcŘ $¨tŘ%<ô"  a¨2Ô ¸SŘ (¨DôĐ ô
ô ŹŠ°4¸Č
Đ=S×Tr#cóx.ROpVPR4PRR RR3R7PVUu.uF"q"VR,P49gK VNK$ up4pWR,,PR4R,P 4PVP
2026-04-12 18:25:46 +10:00
^R7pWR,(,PR4R,P 4PVP
^R7p\ P!4pVP\ P!VP
VRRR 74VP\ P!VP
VR
R R 74VPR R
RRR\RR7\^<^^(^(R7\RR7\RRR7\RR7R7
\P!VRR7VP4p.R!OVnVR,P!^4VR&\P"!VRRR7R#uupi)"rürrr
cóD\VP4^d,^4#)éd)rÚmean)rxs&r!Ú2render.<locals>.render_dow_chart.<locals>.<lambda>ás¬5°·±ł¸#µ¸qÔ+Ar#)Útradesrr©Ú
fill_valueÚProfitúrgba(45,198,83,0.8)©rxÚLossúrgba(230,57,70,0.8)zP&L by Day of WeekéÚrelativerČ)rs©©©
r×r†©Ú
hide_indexN)rÚSaturdayÚSunday©rÚcount©rr)ÚDayÚTradesr†ú
Win Rate %)rÚaggÚreindexrrÚindexrrrrrr
rrZrrÚ dataframe)rÚ dow_orderr_r(Úwins_dowÚ
losses_dowr"rs& r!Úrender_dow_chartÚ render.<locals>.render_dow_chartÜÚ\ ŘŹo‰oŃ!AĐ
÷ ‰'™iÓP™i°¸
Ő0F×0MŃ0MÓ0OŃ+O—11™iŃ
đ  Uť^Ő,×4°]ÓCŔLŐQ×W×_Đ`c×`iŃ`iĐvwĐxŘ eťn5°mÓDŔ\ŐR×X×`Đad×ajŃajĐwxĐy
äŹiŠikŘ Ź
”b—ffsźy™y¨H¸XĐTiÔ Ź
”b—ffsźy™y¨J¸VĐTiÔ ×ŃŘ&¨s¸(¸Ü*´4¸ŔbČBÔ3OÜĐ!9ÔĐ!9ŔcÔ Ô
ô
ô ŹŠ°Ő
2026-04-14 08:39:30 +10:00
Ź_‰_Ó
ÚBŚ
Ř+×1°!Ó4Ü
2026-04-12 18:25:46 +10:00
Ź Š R¨T¸d×Cůň+Qs ¸H7ÁH7cóNVPR4PRRR7pWR,,PR4R,P4PVP^R7pWR,(,PR4R,P4PVP^R7p\
P !4pVP\
P!VPVRRR74VP\
P!VPVRR R74VPR
R R R
R
\RR7\^<^^(^(R7\RRR7\RRR7\R
R7R7
\P!VRR7R#)rr)r6rr
r7r9r:r;r<r=zP&L by Hour of Dayr>r?z