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

134 lines
24 KiB
Plaintext
Raw Normal View History

2026-04-12 18:25:46 +10:00
+
äOĺiśOăóRt^RIt^RItRtRtRtRRltRtRRlt RRlt
RR lt RR
lt R R lt
2026-04-12 18:25:46 +10:00
RR
ltRRltRtRtR#)
mt5_parser.py
=============
Parsers for three MT5 trade report formats:
1. MT5 Real Account HTM export
2. MT5 Backtest HTM report
3. Quant Analyzer CSV export
All normalise to a common DataFrame schema.
NcóLRFpVPV4u# R# K ;i)úutf-16Ú)rzutf-8úlatin-1Úcp1252)Údecode)Ú
file_bytesÚencs& Ú"C:\Users\pc\MT5Tools\mt5_parser.pyÚ_decoder s1Ű7đ Ř×$ SÓ 
řđ Ú úsž#cóŽ\P!RRV4P4PRR4PRR4#)z<[^>]+>rô )ÚreÚsubÚstripÚreplace©Úss&r
Ú_striprs9Ü
Ź6Š6*b  $× ,× 4°V¸RÓ ĐSUÓ có|\\V4PRR4PRR44# R#;i)Ú rÚ,N)ÚfloatÚstrrrs&r
Ú _to_floatr"s8đÜ”S“V—^‘^ C¨Ó,×4°S¸>řđÚús36;có2\P!WRR7#)Úcoerce©ÚformatÚerrors)ÚpdÚ to_datetime)rÚfmts&&r
Ú_to_dtr$)sÜ
Ź>Š>Ô 9rcó&^RIpVPPVPPV44^,p\P
!RRV4p\P
!RRV4pVP
R4pVPR4p.pVFRp\P!RV4'dM4\P!RV4'dMVPV4KT V'dRPV4MTpV'dV#T#) zú
Derive a clean strategy name from a filename.
2026-04-12 18:25:46 +10:00
Strips leading date prefix (DD_MM_YYYY_ or YYYY_MM_DD_) and file extension.
E.g. '22_03_2026GoldPhantomModerate.csv' -> 'GoldPhantomModerate'
'GoldPhantom_XAUUSD_Daily_OHLC_A.htm' -> 'GoldPhantom'
2026-04-12 18:25:46 +10:00
Nz^\d{2}_\d{2}_\d{4}rz^\d{4}_\d{2}_\d{2}z_-Ú_z?^(H\d+|M\d+|Daily|Weekly|Monthly|OHLC|EVERYTICK|CTRLPTS|[A-Z])$z^[A-Z]{3,8}(\.a)?$) ÚosÚpathÚsplitextÚbasenamerrÚlstripÚsplitÚmatchÚappendÚjoin)Úfilenamer'ÚstemÚpartsÚcleanÚresults& r
Ú_strategy_from_filenamer6-s×óŘ
Ź7‰7× Ń BźG™G×,¨XÓ Ő :€Dä
Ź6Š6ШTÓ 2€DÜ
Ź6Š6ШTÓ 2€Dŕ Ź;‰; €Dŕ ŹJ‰Js‹O€EŘ €EŰ
ô Ź8Š8ĐVĐXY× Ü
Ź8Š8Đ)¨1× Ř
Ź ń÷!&SŹX‰XeŚ_¨4€Fß% Đ%rcó\P!VR,RR7VR&\P!VR,RR7VR&VR,PPVR&VR,PPVR&VR,PP 4VR&VR,PP
VR&VR,VR,,
PP
4^<, P^4VR &RF|pW P9gK\P!W,P\4PPR
R4PPRR4RR7W&K~ RVP9dqVPR ^4P^4VPR
^4P^4,VPR ^4P^4,VR&VR,^8„VR&VR,PP4PP!4VR&RVP9dRVR&VR,P#\$4VR&V'd%VR,R8HP'4'dWR&VR,PPRRRR7PP)4VR&V#)z*Add derived columns common to all formats.Ú open_timer©r Ú
close_timeÚ open_dateÚ
close_dateÚ day_of_weekÚhourÚ duration_minÚ
commissionÚswapÚprofitrrrÚ
net_profitÚwinÚtypeÚcommentÚstrategyÚManualÚsymbolú \.[a-z]+$T©ÚregexÚ symbol_base)ÚvolumeÚ
open_priceÚ close_priceÚslÚtpr@rArB)r!r"ÚdtÚdateÚday_namer>Ú
2026-04-12 18:25:46 +10:00
total_secondsÚroundÚcolumnsÚ
to_numericÚastyperrÚgetÚfillnaÚlowerrÚapplyÚextract_strategyÚallÚupper)ÚdfÚfallback_strategyÚcols&& r
Ú_enrichreJsgäźš¨¨;­ŔÔJ€B€{źš¨¨<Ő(8ŔÔJ€B€|ŃŘ×0€B€{1€B€|ŃŘ×6€B€}ŃŘ×0€B€v+¨b°­oŐ™2źm™m›o°ő3ß49±E¸!łHđ€~Ńó0ŕ —*‘*Ö Ü—m’mŘśsÓ#×'×°RÓ8×<×DŔSČ"ÓôB2ź:™:Ô ŹF‰F8 × &  ŹF‰F< Ó #× *¨1Ó 
ŹF‰F6 × $  
 đ
2026-04-12 18:25:46 +10:00
 ŐŃ)€B€u•Z—^‘^×/×7€B€vź
Ô9‰
Ř •]×(Ô)9Ó:€B€zb ťn°Ń*:‰ŕ ׸rČĐZ€B€}ŃŘ
€Irc ó&a a \V4p\P!RV\P4p.pRp.ROpVEF p\P!RV\P4o S Uu.uF2p\P!RR\ V44P
2026-04-12 18:25:46 +10:00
4NK4 upo S 'd#S ^,R8Xd\S 4^
dRpK“V'gS 'dD\;QJdV 3RlR4F 'gK RM RM!V 3RlR44'dEM)\S 4^g\P!R S ^,4'gEK!S Uu.uFq'gK VP4NK upo \;QJdV 3R
lR4F 'gK RM RM!V 3R
lR44'dE\S 4^
8g%\P!R S ^ ,4'gER \S ^,49dE\\VS R ,44p VPV 4EK V'gR
#\P !V4p
2026-04-12 18:25:46 +10:00
RV
R&\#WˇR7#uupiuupi EKR;i)z1Parse MT5 real account HTML trade history report.ú<tr[^>]*>(.*?)</tr>Fú<t[dh][^>]*>(.*?)</t[dh]>ú\s+rÚTimeTc3ó:<"TFqS^,9xK R#5i)é)Ú.0ÚkwÚcellss& €r
Ú <genexpr>Ú#parse_mt5_report.<locals>.<genexpr>…sřéđOŮ-/u QťxžŰMůsú\d{4}\.\d{2}\.\d{2}c3ó,<"TF qS9xK R#5i©Nrm)rnrÚlasts& €r
rqrrsřéĐTŃ&S 9Ó&SůsÚ/:NéNNÚrealÚsource©rc)r8ÚpositionrIrErFrNrOrQrRr:rPr@rArB)zTotal Net ProfitÚResultsÚBalanceÚEquity)ÚplacedÚ cancelledÚexpiredÚpartial)r rÚfindallÚDOTALLrrrÚlenÚanyr-r]rÚdictÚzipr.r!Ú DataFramere)
rrcÚtextÚrowsÚtradesÚ in_tradesÚCOLSÚrowÚtraderbrprvs
&& @@r
Úparse_mt5_reportr“qů€ä  €DÜ ŹJŠJĐ-¨t´R·Y±YÓ ?€DŘ€FŘ€Iň ,€DôÜ
ĐĽbżiąiÓHŮAFÓ¸A” ¤V¨AŁYÓŃGç U1•X Ô'¬C°«J¸"Ô,<Ř ßŮ ß —S“SôOŮO—S—S’SôOŮO÷OňOâ ä u‹:Ö ¤§˘Đ)?ŔŔqĹ× JŐ JŮ',Ó2ˇu ”IA—GGIˇuŃ2TŃ&SÓTŹsŹsŠsÔTŃ&SÓT×Ü5z¤b§h˘hĐ/EŔuČQĹx×&PŇ&PÚŘ”c% ť(“mÔđ
ÜśS  u¨SĄzÓ3Ř
$ń/÷6 Ůä ŹŠ€BŘ€B€x  ;ůň=Hůň3řđ
ŰúsÁ,8JĹ# JĹ1JČ-J
Ę
Jc"óÜ\V4p\P!RV\P4p\ V4^8dR#\P!RV^,\P4pRp.pVEFp\P!RV\P4Uu.uF2p\P
!RR\
V44P4NK4 p pV Uu.uFq'gK VNK p pV 'gRV 9dR pK•V'dV ^,R
8Xd
R V 9dK´V'g\ V 4^g\P!R V ^,4'gVPV 4EK
V'gR#.R%Op
2026-04-12 18:25:46 +10:00
.p VF4p\\W§R\ V
444p V PV 4K6 \P!V 4p
WÝR,PRR.4,p
/p.pV
P4EFwppVP!RR4P4pVP!RR4P4pV'gKQVR8Xd$VP#V.4PV4K{VR8XgK„VP!V.4pV'gK VP%^4pTPRVR
,RVR
,RTRVP!RR4RVR,RVR,RVR,RRR RR\'VP!R^44R\'VP!R^44R\'VP!R^44RVP!RR4;'gVP!RR4R!VP!RR4/4EK™ V'gR#\P!V4pR"VR#&\)VVR$7#uupiuupi)&zQ
Parse MT5 Strategy Tester HTML report.
Pairs in/out deals into complete trades.
z<table[^>]*>(.*?)</table>NrgFrhrirÚDealsTrjÚDealrsÚtimeÚdealrIrEÚ directionrNÚpricer@rArBrFÚinÚoutrr8r:rOrPrQrRr|Úbacktestrzr{)
r—rrIrEr™rNÚorderr@rArBÚbalancerF)r rr„r…r†rrrr-r.rr‰r!ÚisinÚiterrowsr[Ú
setdefaultÚpoprre)rrcrÚtablesrŚÚin_dealsÚ deal_rowsrrrpÚ DEAL_COLSÚdealsÚdf_dealsÚ
open_stackrŤr&rÚsymÚdirnÚstackÚentryrbs&& r
Úparse_backtest_reportr°ˇsKô

€DÜ
ŹZŠZĐ4°dĽBżIąIÓ
F€FÜ
6{Q„Ůä
Ź:Š:Đ,¨f°Q­iĽżąÓ C€Dđ€HŘ€IÜäź*š*Đ%AŔ3ĚĎ É ÔTŮR ¤V¨AŁYÓ đTá'™EqŁQ—™EĐŮ Ř  Ř ß  FÔ*¨v¸¬Ů ß ‰8śE›
2026-04-12 18:25:46 +10:00
 ¬BŻHŞHĐ5KČUĐSTÍX×,VÔ,VŘ × Ń  ÷ ŮňY€Iđ
€EŰÜ Y O¤S¨Ł^Đ 4Ó 6Ř
Ź ńôŹ|Š|"€HŘ .×3°T¸5°MÓC€Hđ
€JŘ€Fŕ×$×&‰Źx‰x %×-ŘŹx‰x  RÓ0÷Ů ŕ 4Ś<Ř × ! #  *× 1°$Ö
UŽ]Ř—N‘N 3¨Ó+‰uŘź ™  !› Ř
2026-04-12 18:25:46 +10:00
Ř 5¨Ą=Ř  4¨Ą<Ř  5§9ˇ9¨V°RÓ#8Ř Ą?Ř  Ą>Ř! 4¨Ą=Ř   ¤9¨UŻY©Y°|ŔQÓ-GÓ#Hؤ9¨TŻX©X°f¸aÓ-@Ó#Aؤ9¨TŻX©X°hŔÓ-BÓ#CŘ 5§9ˇ9¨Y¸Ó#;×#VĐ#V¸tżxąxČ ĐSUÓ?VŘ 5§9ˇ9¨V°RÓ#8đ÷ń'÷> Ůä ŹŠ€BŘ€B€x 2Đ):Ô ;ůňOTůâ'sÂ#8O$Ă! O)Ă/O)có$VPR4p^RIHp\P!T!T44pTP
Uu.uF`qUP
4P4PRR4PRR4PRR4PR R4NKb upTn/R
.R(ObR .R)ObR .R*ObR
.R+ObR.R,ObR.R-ObR.R.ObR.R/ObR.R0ObRRR.bR.R1ObR.R2ObR.R3ObR.R4ObR.R5ObR.R6Obp/pTP4F+wr‰T F p
Y¤P
9gKYJ,Yx&K) K- \P!T4p R7p YËP
9gK\P!YĽ,RRR7p
T
P4P4'd \P!YĽ,RRR7p
2026-04-12 18:25:46 +10:00
T
P4P4'd\P!YĽ,RR7p
YŰT & RT P
9dRT P
9dR T R&RT P
9dR!T R&R"T P
2026-04-12 18:25:46 +10:00
9dR!T R"&R#T P
9d(T PR$\\!T 444T R#&R%T R&&R8F5pYäP
2026-04-12 18:25:46 +10:00
9gK\P"!YN,RR7Yľ&K7 \%Y±R'7# TPR4pEL÷;iuupi)9z-Parse Quant Analyzer listOfTrades CSV export.z utf-8-sigr)ÚStringIOrr&rwÚ(rÚ)r8r:rIrErNrOrPrBr@rAzswap_$rQrFrGÚmaeÚmfeÚdrawdownz%d.%m.%Y %H:%M:%Srrz%Y-%m-%d %H:%M:%Sr9çNrRr|ÚticketÚ quant_csvrzr{)z open_time_$z open_time_$_r8Úopentime)z close_time_$z
close_time_$_r:Ú closetime)zsymbol_$z symbol_$_rI)ztype_$ztype_$_rEr™)zsize_$zsize_$_ÚsizerNÚlots)z open_price_$z
open_price_$_rOÚ openprice)z
close_price_$zclose_price_$_rPÚ
closeprice)z
profit_loss_$zprofit_loss_$_Ú profit_lossrBrC)z comm_swap_$z comm_swap_$_r@Úcomm)z stop_loss_$z stop_loss_$_Ú stop_lossrQ)z comment_$z
comment_$_rF)zstrategy_name_$zstrategy_name_$_Ú