From ba7815d856ab5719911959dbcadb4e4ae1650be9 Mon Sep 17 00:00:00 2001 From: Bell Date: Fri, 31 Oct 2025 00:05:47 +0700 Subject: [PATCH] Trend with structure --- Experts/BellMainPriceAction.ex5 | Bin 23466 -> 16062 bytes Experts/EA_Trend_Structure_EMA50.mq5 | 226 +++++++++++++++++++++++++++ 2 files changed, 226 insertions(+) create mode 100644 Experts/EA_Trend_Structure_EMA50.mq5 diff --git a/Experts/BellMainPriceAction.ex5 b/Experts/BellMainPriceAction.ex5 index 5ab24df6e8a2305ed063900368a8b5d288027844..912f950640269dbe0a74ee3ba55dee36d68e73ac 100644 GIT binary patch literal 16062 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 literal 23466 zcmeFXQ?M^Q5GVLQwr$(C?R#w7wr$(CZQo;?_t>_v-^}j3OzqRwK5cDxC5ewU{&)F* z#qodu0RBfC0N_#n?^8aicNW8CH+Tj;28)9<08E+tsr}_76!iuWRgP~uXWl&ho-}f7 z?-u`KoiM-@VDldn0we*R0Eho9r~i6afHUBK4*&0=|9|`cV>`eEpa(Gi$Nx`>k%>TZ zSg$Y0Oap#aN6dzL)%VpKsNXJCPChyN0)bpD-)zjuay+5qCkJmJrrJbKi|%hBW;_M5 z*X%qzLcqk#pihO1ub~UVPoB8&>$q=SgVN=vvwx@s_5eN$oiSXEuoCBY->(7Cp?PxU zX8(jPFg$hv-YrOXRAc{hnq6f76LF@W5N|%eA$BSD^3D0jP*8%3>-EHC27MA$LX))~ zQq=lR^3LQbE70c+W`*x$uO@_)(jB{AezH6>o%?s{e!x;D70_G6KgD{uRCGz}Q?Lv!;}6Fen1rDk z&Rk5F4%FFDs|MrVQcBY{pEU5$Txh)YLC!)g3;*>yB#cU4-lg_=Rcy);CUKxVo#^GlL zqM8%d&Mk~=V$kDLFfQDA^ZKLponZgcuQ7fp(di#_omx-WJBW+F*h>XhiKuT~lMFK| zhz%R|mGdMKV+0o3A0QYpkOjh1tTA9de0_Jl238wekfh#_CxF<#mEuaD8TOq1p=cJc z=ez#ZqjTC{B63O?3P1O1l*IAHFmnB_oYKLYub_LP2bvNa#Ot^q=}4x*7KG3BjnecT z1VOAJ{dfd+U|}vQ~%=C~bG^@<3^kC2jmmM)4)AkSbOq z;NI~m9@QmzH)RE@&g6)>OdU6er2`Qt(ro_~oUXYCg~~z3!0+nAUOl~J9+?7FLU_nV z&XsWipzw>j13*|F8ey>>q0XST7Oh8hfueVxy_V3Vm<%YiCMSwo)N&jSGXT$3DiPA<>cL>Uy&ed5deFO21lRtrvA`NbL@3{?puyEu|VzHYg&T zW9Y>qwm85@2lQ^1Y8ZGt6{)~-s1ckwUvVgVL2hRIeW4uxR%!Lr`O3x9iB2GZHCqk8 zuE=|Cf3Rw>} zGspZ-jH;ZkDu#yM&c@zTLY0bJz@}vHQr1^yx!6tw;hHL zR_flV>Bc!mZ{dI9SWHr05$ymACig;4A_)6E0_nyfmerfPcA<*IQ%|>p1wH ztzfue5wrYx-%Qp_L zy!9eyujO2+_U^LH^OG#AvyPGBS`<*H*yi8=Y{{ue6K?P*W!qNb$>+c^q)IdnSf=-Z znht?Kr={g)LQ5ZCf>iB4f$J&a{>kKm;dN{|Mw5~wxXg4Whe}57_92yCowFuGK6llqLueUa&c+qU zxe8E(IFl17qSDqyCH`D&Ud|ve#Rn-kk}rYSvm6=aT$ID_fjUknm9=bqCYC? zVDY6F*%z@iosIUl>rrf|xWGvux6zY8*CCPVLRX6U2tg^%KW4vZvC17v{&q^(Ih(fA zooSz7wnRImm?e6a zzSx{zdTKAE2yhJk_mk&1zf*jQDd{@|?!O6UC$^v)s|_RXpQo{vp^Ws{O5{|p={#@d zaZ#5TO&d{;5P(J>NHy8?l{3^KBs1Ezp9a|I$7Xgt%l~fdVlhbRkc9)*BIxN;Cic+y zEfQk>RK5va2KLWW)G3zLKYHAPv+e(A99hojR*rLqNe|0dfD7r`8YZ!5CBu%);2n=bru}IV?)#bfvg@obVGqZO1Yt$Di z1+`$PkJS(2I5fR3*!`!l7lqhb6iHbU0Kq331Q)_8YiWik1PwnG^Lw%zJ;|`$j7VPi zCeJqT!w709c~l=8Fi07+l{*cp=xzc&+Y;E(g#~&X=E?<4wA^Zu6*Ikp!>)3vVL&yJ zNJop)9S@U@Q$T_{g0@SVvHi#O3v>;J*@HYAl-G9vM!~-xh}pbq3q~+>Lcb++uaakh z1{!wiG~FPxfDB}0gsS+F&Ea7ptKKRiZ-K!Se`xYSu!VP1>Q-?2kzz|OfE|rUkdIj4 zWdT{}XuWH=$vzK@LKhM-gs6fEw2jd_Ut<@e@RKSWT8{e}2$%RY_;l~O0HOw{p*R3l zDi3I!QMu^!Y3YMU#tm9&ko5z!FSJ<XYzvd09gxrjjbt=;4hrj$We}y?DCu5?uY%|T(42qb zT|cO^DaWMg21Y+4$`N6_nMQqC<64x|sX68yRUiq$7P6-TH9QX|&Rcb2{{_F-=cG@P#;VQ?Dpf^xEFegRZPRS@K(6`8;n|%e9QTAsY6IsUG%e`{x!#x#v9yb4Qc5=+flSNCN+- zAp2qNh+>EeW*+!8GT32I*mLX~ywPFCkdGYV&YuA_m2WAkGzzz^Y{oc3yfX)|SK?dy zI?HI8b7n0Zh+M+y+?PO1Zs-tOJO=i5s&W$7(yvS-=<}Cm70f-#!v))lu&S{Wo)uP< z-xQ;#*3P>9(HGZsuP=;FT-xD2HqXVe2<2cZhXfRo4BoJ^sa=c26@ z6y$t$!XR??6od+`>GiK3BKe`@8Su$;e&KhBRs(L`aRN4qNZDXI-qXxR{#(pjF86pi z%?aZ+lH}_B*Yz57(XVl~qBK78dIKhynNc;D|06DpwRag7o1kd7-N5~(D}DAnsS#HW z#p<266XJ1Q*~*OtyJmTtxo$}A#IXK+5+)j?@z&4mb#@Ox5>T<9ueC$2W>1_x>Bah(QCIokp+BJ~Q|a}KF?0~$=heKum__Lk(W?3OSy$be6v0t- zPh$iS^0s^*pQ;8vG003rMsPK~adQp$h4xjOSi`CIrl7y0`m%_pb;Fo`l#QNZ#mJQ8 zgcw7jaSRq2@rvH?K5N`Y&{;yuKGxu??V=+5>H%o322CszfLD-hv-EF|%H$Sj%d2e+bWT?07<2_B%O%$SBb9p5LDwoFR-tZg zLmRIvnW(*{OHqur%CN<*KF{kpjvss8qx~$P(ua>`MY((AvQKzEqtJ`J@7=!j05wKZ2=z5Z3u)Lr{W$Y2OCJHFp#92&g%3m1;T7Gt-iooViE& z)fsI&0AhuJyslVmO~4d`zhxa(*H~yptWr&hw73cXqU~`jCz`FM zJhmo){~Gu}9pNZ^57@F~E`RMi(`ugp`p!kZ$V9pHjmMu$(QX=Rd}dAKeqq25&oR^7 z6c@qQ7nglZ2~SS-whIaYV8+Ea3d&;OI8w6DP107cK6P%+=tx*qITeFSvIj6-T5Ziz7SwNl<+CPy)T5zPh9p9&n?CO>ht_O zX8A(t`6+}cOhj`1T^bAV`^>&%zCtFM+aIUCTYF-dx)p;!-oi<*fQtzJhH$3m7udy_ zvCHHkzJ$y^UYD?0?GVW)KiU|LM5u`4Y#-Iz$DIhbKn=R`I3RxzmT%@2!WPiyLg-MBHjulf(Zu z@gulROW!|bl071AvyrLGDpI^`H?cjH0q zcGz5=4Qf_nWEvz98yP)`di?b~Wu)j+z5rX^+9v^?Zcx}@8LIHlhVEtC=g~?e7We)3 z`;z5b($Qy7EJq^f;&Z%AR~b`%*esNmm?O`WX}^$D8p=aYU32^kv_@P3!WzqYkCTbQ5%)2Hw6y)mz=rP_vyeI}Ov0Q4$a zzR_kE)lF{1aZwcY_50L}beG01%s1h^CNQc>rUiY}a?8(dVs8d-ntAzXCT9*Vmvj?w zZrKwGk*K7VSG&Z|wHDq(-uk+EYv~Bw%6fJjzei@nsVR2qUY8fRtq{1v%+gsVroOBG zi|Fz=sQudTup=N>JTH4&^5#BdMNO?IIF;2BK|vIUQlfL(gVQbVbLsvBFhxG$*TF8% z)jX!Dt_{;M$ru_^y(;M{QAd}F!d*OfgIvi`IeNxp?ly0zN=f0&N}teN!{Hs?wg<%V2LVR7t-uP_`~D;PNjpL zJsKFhbL563^jz<-fFDxyM|e!9Y-;3gNX zruHwiE@O$o2I8`|T}YOBTA?)EcLF-tABDk5rBM=EYN~$h=OB|WUS2q;)OXB3p$L=6 z6Cy&@RdsT~okPkHVaG3I4nvj6VqjdvbbVHD*oTx&HzAN6qP*Cva1|LBa`{;v?QC}6 zL@Dx>p(>^4WcW&!`~GNMwf1Ph4w_X<9n)+dr(IuJlgRco)80qf*Ne;EtkE)cv3GgT zB%*Pg!`ps7%2_fTUKRQC+tY+7-$X? z*=QV@`f$E2*f1f8{qsYDUovYHvDuIjhu! z(6XSn)7|AuD3Ts{{Y)|aaC84&_&tPPc-hz#dG2`-&K%edk`f?9b8XwQVgl|8F0U$x z(BB)n!}rTF%7SkJ(+CDTOrtwC&P9dZ$K)6SwB1NP>YfZDXs*A5hKzwjT#dyM91eeJ zic6!&O(QJk*xBu+4ZG<|2b_=ziLR${G=nU+uTw^eVoPxi)y~iYiRYfyPt)C(S0}4r z%Q_9!sf){mlpj0)krNrWYaYu|kgGI6ql#Egks(51z1 z{Ibd&OT9h34NS{RgI!i4dzr{pRFK=YrrQL*-=q}N_XoEisZqoV4bxmNW9D9-Sla{2 z3$eR%yDUD5Lw<#*3h@`;RB8;~q?!uqk`5Vo4g~9`n%9I92Mc-PUA9p;B_q$T=(H5H zD^~4Cs7frYpRkZkGv!ZOqY}~P5Qu&PY@C+AEQYC!y~-h9OIjWC*FT_F299+bE|Aq~DM^87dS?o-3M7dKVe{`{#LL5Yja)@R{Sf0r~Ge7u3nuAUJh#y{KY zE5q?akVLWg9WjoeBg>v5iy0|@ztDaBLlu@ey@y#S^r>1^9SuX!4RJ9gGV-4?0mCIq zrKl>NV!8PmKiIPQWPN4&9~5v2S^N*KCV zpVkt`k?{e4c{=&$63KCeKGV9V&jD|^5GqMAd$z5yo_?mQ87V#7Dtn6gbUG?G|4wZ? z{mED%r{f?P`Qh*q6ha*RoS$3Y-p5$}{)5gNYk0EgfkDcq7@e_y9Mod#(MDsSC^C&? zaYzzr!frv!i85L9HZ-yE1(*D{+kkJPr65q)nBwaIqDs+E$oHqngYDu}SCO^F-|$Ay zuQDsUbrS|GA|hUSp_O`)hhaSR;M+w}oAZ}`uJ{^C^|CMR4jj*0DVNI%NSrV@1Y~=W z`oJnoCQygip((M@0&~^y%mGDDuy}@k9wU(nAvsB$bN3W3$b4(9ydvOLy0TXNI{exU zL8wkS1<8pWb(;m*5WB9S#jE$w$-6#^(G*Kx&?u#&3;r%eJoX1_7NZL9(sZYY|3H32 ztT375376z3=xWqlU7y^}-;uC&YF1>;sR))0fYT`Z`UgKkz;?r|aEe9y{VOLbl%7}i zU*lzugn{tQXV{Wq0sHYb8VoJ1q==au3?xx!{#B>^37Q{C`6v6#jw+Qe8{rm4J32bR zR5f8h96(nZm$>H`E$XxF!|=i0udwKCJx@BEDCZMazol>}nsiGpw+6G?ue>Di9x#Ga zxJ4YS;&7|tvy=2gcu#B6)1nL>9?$ja6KR!PRDRmLUtu}w9=rTY#h&f^)?V1r<8fK0 zksJJWd@T8A8+(PSVE2agbTh^AX#?F9`{>S=9fUZZ{e^*JN_P8C=%)Yu%|@~@<8$^p zj%r4G23c(PLMR#6o*7&*4WpO)40$;1CcvTP-h2fF!>O&j-H>c9AgemJ}6 z$6GvbdIY6Ts@2|JEnDv)rM0I=#>G?g^?O$HukE9!Z=z_(GT|DLOh!lUL6xvWS^FW1 za!snQNUF@D>!v1*tgv7UG}t-%ex5u^;OY7o?Knw?yLNrT1GYBEf2bWBabmJK`DcG( z1eP&%x9h8s7>adj&zH872eyc*VEJ)p+suDNTSvU(db3V-+88{l4I8fI_4G4!{%+x! zvXT=>4Ix{R)F5=vzShF3I;sH{0*$&n4}vrNJ^Y)E)*QnJgX_U(c>LYC89A#NHe zVqOO3qYRrO3F6bMBV(M$i`<#QSr2Q-6y>-->8}T=zry=;$+P9qxkJ_m)TkJbkjmPX zg9QfbN?}IHQ*%^>pERvaW6%ac%&zUguZXJqsk^Y@pRjLlOpV4tMDK1sS05-V;iRRP zO=^!4x;WWdC59g{P*MqyZ5iQx6?w|>L_CF;-)IJGx;V!7VkkVRjS9O7Lbc1+=9Gqn*tM!i&Db~R+bdORFc|*+L!p3ASPiA=!_WQ; z=}i2_Ky`E7we3a3cKJ=h8aFHmI65YIaC_GqJuS_C6nj-_UW^SNIRPl z4t12$$YfttA6(D9gW*L0X6L82UI^@r?`%734h}ow zY&6(KYh?+|fYH+@X|c7yne!=(JX{c`G{rmazwr})TlTKilH~tYlAhX6RW422;$k!g@^Mb*SA80N*_rD9 zDvsR#cLO|qj^NnVRaq*!UQAYo#iloW!P|qZN{ zE{lz4lrp&!Ab_8YACg4Y;R0R+^Clr>p8B^(<6NqO=GQNckb6Wo@o}G@3MI|4=^3qY zaXQB>f$aUACLPVij%e>hucBU32)=Fpx)kT_X7>I-#asF0(I9#T4P5RwSozUip4rNSr@RyN0#t#Eq#oE;RAYN8pIjV9 zW5k1jgFyt2$0kTQeR9gwtOoKoVI53FxxlgK!Z`W!P$#dUn2VNtVh;=xan^G+1K?4Q zu*3-?y1}`)!A}P=Mr_REv9MGzB(3fFuRTFwdV(JLoKmNqRf6RUk^ULU&X0OXBJ5lT zlz#c1Qhb(T9a2oBX4)}955rpYsU922dH-Flu{SS-Q;_?!x>+oP*iqYq?u&KnpY!3h zN_Y?d71StWG>hK^bQmXzm%2$B$5tym6cB58H+0nXG`(m6i)rnXDr^n+Db5_vGq-$NL= zFPx9`Mq2YUI%Ox4Sv(ZSkq70%q5eNcDJY!xQ`Zgr3XKP)W$aAhJtK)p$6i)F*Irl~ zXa`BLT!>`jt@aXAsAvc_cDs`&(ECn$5{lO^!MS?mF;f%pt zY;g4@2*u0-Tg&z7zc$Z>D4rAZpJ-vC;n=#_p0nNgW@ zCc1YLBZ}&OmczQT?=hVZj27~pcu9% zR{Ks7B*CyB!~$FR9e;RW*-*R<_XUU?O>|cy zMBu{H4&lj|)g&5p=fzvq;-2$e`xaxMC|xn8%1qGo>M3vJ6Gm@D^)&Foc2Z;U{djh` zP}Np|0_aDHBLe3Nili6wbfVvrXn-a~C^m5^w54{>{OO|=eieC;0NPY7Zkx6KVZCka ztk&$vAOszr{*GBGrqWWr>3i~p(S+P*#YFrQ(>|8~38REJCntY=Rybt3Ga*mk;_nP7 z${b`6?+#5B9v1jW4)~nMf#k&N+m;t{+P7ZMdG1F;(um}iu&3KHjvPL#hVWSD*Wv|J z%((AzX@3lovhQXb-}*m~S25_jZb^DCL#5Odolx~ck>IrLOl#c<(8xT+9}i&o2D%>X!QEqcei9}N93jq~DX zDj&bt3?(n`vwy#*Zj?|i5VaeLDtu$zqZmkW4-hYal6R^Gudm(oA30hS#iCN`4`+rF z);zj`15Rk0+3}SFW9%5C0zLdg4Z1DnHZKJNu{z9{NlNpLC9k5uCfg__=Efch0$kk* zDSi*HQ}!rTr+%48sg_Ns(&q4A>XC(QfTRT{boE*(IX(&U_k$ezBqN`)4`i z9+Z8?be;q*s%J8eKd#rKd^|?O)0t)tK^d>S&&*Q-5h)!sx3PwS6CUH`kaQ9<^>XK1 z3mu^Yj9^}@_SMi)Y_#y?ISv~g&z{s1%QS1JRrFax2n8y2tT(!r@umYZ4M#Pd1No?0 z_rDXAFI4u_6YY)=9sm()nPa24fp$vedoTdc`TiIddrSuqjNe8`r(zm{ZD#z$%pnhM zC2|{B;^+!*1AewH~KiB^rAFNrtqh{;MRZKlU=HEmYsu$se5t_80dBCwiArYs?+ z1^pElaBZQ|Xs&1nuM&2BU}!78$1dBwG;p7-k$I10S0$Z6%kT@dPz-Qz8vwH*4 zM5u7UKkV?236Ib2n|g_|+n(-RWcLc0GO{`KR;Yf*-&1ofv-6(oOtVvuU{_A?&*{ho z5_##8gYtWUrO0;d<)a)6c+2J`FgM>fQ%s0=H{5z!Z zR%>;ji$?@DGNbVl$RR`DpKQh2^HLSeuLsOGF}p--k-0W4*ghCAe$gGl!VCLQDb!w?+0g?>b6 z9G14(Evccse{(5kMkJi-9M9_q1FzB|md}2;7x7Iyt~(1k7=Lc?CDA$rUS`^R^3-QA`T) zRt=Z+qCs{po}G?^D<@LrGSRDXd!T&!rTb>>ZqYs$e#|rH5;ZJ zha=8PPT--yl{#gimOYOqde3miO07w3 zSOcrOk`6IQk)kwR2m^<|`GI0W#ps0w^rbxPZE!(yyxFi(kuUi7E~?3R3x=3Fdylj- zuspaM5tX=O*C-<)#+@A5$UeX$F-;m*+q70caI}b&dLv9XdJ);pQn};mgqGqC-B4{4 zF`gSKrTotcDu>#LYoK_{%U~GW8E`pUlRR4Jd%w6zL{j(`f5XIe+M|jcPw-uAJImNwvfGW= zMs@+;h&97_Oh|1XQtqUH&{%!dk_h3qWhL3N>5zpkTR=evW^`*nH>riK;V&mMR|yHU zB%zRc%R33$5jE)8iSD-iQM3i*oTqVbam0hF+#pOxN57IHv>8_d18x& zrt%qzvIVdv@GS~!%Nh809aPv}AUN{}70W&Y9mJ0R%9=OtyK^eCCzf8)bXT*;5Lw9OI%i%k ztI9HRC0%k*40qDOCN;O51O)xqkbK?*?c*P?C3jB^`xNBFgC3yEs?YOW5Io1lXUXj;-I$Xnpo;HJy~&ee8w<9a9Aa3R&mG0uid| zDq%D5mZ(~N>l;;?x-@t)*gzW2p~5b&5z->;*8Gmm-JKX;5g9Tc!LL6ud|>XuTXMz9 zP+P91Sl4%E%hGYn0{6auIYmTPBZtVy1~01vgv5+90#A${3cy(_MFx#|t40i&31@H= zS9)dt%KnO1LDV&@N0Vr|*FN#K3wu9J0K%2M{y3}ior(U`lD-lvU)seE=ojwecy<7m zb!C%BB&E|ueE*o zV5k5662-gUBMYVGgzX;2FZ=pN-wE{vUm&-gT^zVHb)8q+wv2%KQH5asZQ*0=htQ{_ zpB#yWdg5?xhX2FhV(gjR8+anR&}8tF|nA;L(OU1wr}fhIcxqymdCQ+iWCbIc)>%F?LMV;z(S2&gpO=% zL=CeqGkaY+w+kno*4#qs1KP8saH$y}1dr(03L$jJiYvU2yk;yXXXfP+yGw zv_5;Z@vSBpl35?A<}q67O8z8~ z@m<_F{`8FYeMb$f*$?lVoadIP)bNEV|LFaYi6;{Kn$C_Quw2Bnp_Me z2K7V(T!>yUS+A3tek&{FrWA5E`ISmhdLbF>U@Cj7#=;nX+(Km);5bMcHc}&@SNx_& z28ZvOIAvvF_IDgf`UQK3lV3zaAed-ViA|U5B22m(-&bL-DlqeYb8w@}@;IOl+=ZDl z_s&&m_)V5nen*-*AFM23#9-@gMFYri&FqVZEJuD{`zE_ZN_>7$?N&%gRL5)~hfjT= zm1r<1%!~D`KJ#hiV?4|}LV;*7a{pRoKtI7v3-l>vj5ah`PrtJrKbcgz3If&6MYK}3 zdE$GH-PKSZ?^&ugE||NMsD*GOJba-)t_+S{?_F|(3s23?dZHo8&vhes7uD?1?H|)R zdC!P-^uzp_X*QTfvfXU=UzJ|baJ5k`>0F-Y0hB-kG;v&lw35%CGlmd*Vb|r!7C5Lb z;bb-lTpN;Eh|233qu?{0@v>R>I@kH_xC6PrW)A%$cn!Z{p)abphGyDb zotyj`OU>!H}^rxt{R1#8_0#9-xM_p(4uG3=@IY{ZPKeU%3ud^7nMPmf%6Co zJ8s?nhvN0xJ8Hf|tSH>UTSPkr-z7a*0)21NrBtsCdf%;DPWZAHypcQ?y{CYA;Rt9vzW`Os46CQArCqw?7vM>@Va{g9+}1M2*~+aUFQm*s#w&`!64CO( zaWk_X!~B^=>Xi|xplgP-2?B$qd;AIm-jALo=hO*C^^CG)pg$U6eTvm<91)me*yPPJ zEDDUqD+j<43VzrrYCl27Dw1Og1jb=xoOLjf= zph+Lt8D($J4RJ0CmD-$xnuRN@2W!@E4@9S}tyic9>;TvW?_3zp_by3zS(O-Cd1T;L zNhZR^Z~R~Y;~5G1I@qz2wNDI-wh^f$ zHc)K3WGV8QBjsS)mT z(Zpn&@XFsm*3&}j%bf3Gmn1;P@iVV`NE{(@0_>?=3R;?qvwx~CvNMalz%MRK``CU# zfd7nCtrS-IftX_d4ph}A0afdB?FhRh9S^Bf)%3^!vk6VG@ibRc++vtrT{oNkO0z8c zTF<$MRh6um~_aOOYM%(tC%m&@eBrCNW^>UCtIATnGiu)5iUh@B)uj2$mlS1VC++f-*|4M@!*8v~1)?Gcg z)&;MOmMHe`ucpN37>tF;lKJZKk;xgyJ>q{ejxXYgkqe=>#+6g=lV)Nr?h$};b@`2o zXx6t_(=o-)(>J!T-mK8+HEK98ZflmLstv%pBf%+N98y=Pc77Cgb;F$l$b^u;-HA-B zH1k0_p?2APtg{~#zlD9Dcp)y>8xGCF7&@a%g9qz3<-vmrOtdom-<`h|j*Z)?^T%gu z9n+_|*}acfsiM||{F)OKn@`{br^KfZ5fIBZgWN$alMUE50z`aYod{35{w}?t5oGrj zhXeA_Hbd)RKGlmJpiHAW5~{uG_tOcr!igo?cjtmLu0TW#$WN;=mxsybJTsQEcFf|*wpfxIhm9xs&Q^iYs|cBK8CsEzAl zHnv3M9!X1oVJ?ytR-ah^K7nbdnnqROEfmq<< z9aH+_O~IH?N_SvJLBq&WWNfjtP9m?)jh)0D=N18<}D`V51pFaXXSig?m$*)W#{a6+-yE>+kI^}*r&|e z5l#9@PhR(L#z?Ep&rT%L)e^VrQtoztL+>cxm*UA2XFvJB8W(=i%r9rd=h5)rdnUd^ zF4D2{QUw}S{gkL{KDFNgT2?;>s#f-MuPwv;rC` z6#$gSH+Z)I02B(=Tk2a6L@^jtUFCdIo~SGFZ;z<6@!Op&YRVxx#%)m-nA~kuQ7MfQ z<9KSGU@+UsU&fsUa?X0iO#7V?&nks`k{Ln| zxE#XA7?0{=n*Wi1k82tH8k;m=c*6&bSZV#ikZwK2>;Ak{d~Rq$d??5anY;}JZ_Uti zN9^1srz*}?0bSGV9w$Hstz{lXL2sBRZ51FE|< znENQJ$1koiJT9xMZz8%a2CaOhs`~zjcX%2z;IJ~fz=Fz4d+6eh?CCW|mq?nj72t?M z#Qg|S?9>Ko20t=E2GdfTu?LxnJ6Y!vOFsY1E6~|!g?&ql8B=t)K`iTBT5tq0wSin_%oft&TDhq+% z5;>j=?9Q~ow*Om0QoveeU6YrbAF&feCJu~rO@XpJsk&Q&KjjTn&H{XeDF|srYM*@_ z%5Zm+nWJlHX1QLb)ooC>XV}sxPEqZLaYKYv zXi(Q9Go9iym6(+M=aw6_t)d_SeYj8(4Xxdm;bl3LPAad9shr1_{&qhwIpt#8|D?!G zNu0L2@GDHP3x9UW<9!@gQlBDRP}t!kNd*m|J6SX}A2El7v~Nv|G$9_lw0PDl_`yAZ zt<%ddIP7`YecgBJ+izjkSadv_6^5U^@A{vURkU&!l#+6{-H+5=5(WZc*;=a%=4+-F zEH~y$$r7c^5K<}JtTgW%s8U6VgcR6(4ajYze-bWa5O`bFpSymYhz5_-!YfSPWj_I~ z<6gV|3GPuj`7@vp`L0gUxtX_;THL}aeeDCR{dV#Wo9m?5{#O;|u?W~%vlkAbiG%<) zxzQ*Qnlkjr|3PU-}np%d`L9A2#iGN$m825E##{!d0>lC9f;0 zATKf!eFjf`{%aG|>>-<1@riPiW#8xFz8%8!6|~#)Zs^BBb*p(Zo;(@j1|D3&^v4mk z?T{%xzJBSSBS?t1UX_yslE0!1H6rXmWa6Dt}9R*o_k z%1C;jI))&B)MroG4l>}iZY4}W_QQVabD9VpoQ9XZfijR{?+ zb$6XTxVC5Qyw3P}cVWh;!F?@Fw7$cUV~miUFf+{Uv#Xua=UoenxQ|NnWk{CE7z${c zTjb3zS_lcM*jV(SQGy^4N2H+PQP4w`AuQmuW8n?;9+x#}{$|gP%KO>^f2iT-T@wp>*7l)V!z;qQuh3$q$Brx6oLFH) zHz*SJo+E8Y0?T>kvh5aRiQ~@^QfE`t)k_&2*W+N9GSX{;!TSQk42Xh3!6OC812>n! z3^4|u`Eqoh1=8xf|4MVS(;wByWL@8ca#db{l$z=LNsmOSSCTfC_^o3-~h@R$Dxwpvs$v z$S*Fq0)D7gcH|bf5>Qt*cJ}|^FS4wYYsBu=iwgdIPl6M)ew5}e%gZrI*hNOkmiM1j zd>rXT%_4yhd&cV>?30z_>zmuX1->AZJ-Lz(<=O~V4-M#0(@B*E>n{aRcc38QcjW6EA9X#B_J(gXoVLh!wQMH?u^UjC#3R?T9%B!lwl}?)uWW zPbTYlgJ~iik)qbm{n%jlA{Wg0q#8ZxM*&HM#NIVL=6Jou`AQx<(a^XQVg=|Tb7+LG zQy^5RqB;0$N!Gz(dEuoAD1&E1rGXA>&LO<|2L3bQ@Z%_M=0jVO=d(7YApEwS#D4!u#%ifj!#ZQT#Pu0+rW(9{q3T)S}jegA~Ssiu{H0DK-Rgq z+)4fgC4aUuD?d{finSqi7$cha<0>cNU`O{QPM65hY-skgOBf^5k-2zUFeRb-#+by2 zn>BX5KdGDpf0;@3%3HE1^mBI@^?38$&-oFi@03MnRhO9)D!LeW;fBg0e*P)hE@_PhqDO&aVpY=hb2EzYi4cN;($*B*jEJGZlFd&i=Q@YxLEW9NEu47vk4qkzBH$XJIUp+@i zAiw?=iyXSyF67JT(i*t847$(TJ%Hrlv0?7LIo;t-M z&l-dNIxACO0qvi}Z&^ts3W77E)Mqvw7njMh9)oYW4&OR~^7IXUYd&yI5)|X^Fj_QO z@|)o35JsV%c;NnLKca2POj7w zgLAbq#V4Dazv~v9X#&3!=jyP!|ElxV3Qk|tdfApYxlU{b1c`R0U9Nf9S8$PMkWKYl zAuT)SjmAT@!Lw{t8JQFK!3`zn42{?+{fx1;%e)6d+F>Q8s$Z3BkDmH z?Zw3^4n^5;RrGg?RLn|D6s$RfklhVe!GgpVg6Yyc|} z1_xoJr}o>q9auXvRNFbac^1PhAupbW)I+=vOG5G_d+L+g-EcQ{YGD8>L~JKqAjbMMJ$idX<2hF66OgO0 zc7qe88j|Fty)uM}KvjKYa*z_qHj^u46|XZAF!4n4%kcB3p=_nxa-tGumeFl9mW*`j z+G9nFt&1=5dJ z7tatA)>QtjguQ;?)h-`brQ&v_%~%Hsy;Np~@K@sbT3g-ZsCq&DMUjg*?!_W;+hov0 z=%8bW`s_6YHWD97V@DF?>^NDqw;YH<)r*PcIwUmB62U^!-#!OxQbsb(1ur*o z?=Au8a>N#LzP6O3;G4Bi*gG&+gl>#kf-=lh#=V)KOE5NYMM?H(wzPvvMUN|rROnY2 zxr*6a+th6?+i0k31^7%c3B%Anjw@l}5)w!1pxNRWCE{9`KCOV*#`5OD>Vb}kQ2JDb zH#D>peswQgOJ#Yt9wDaZ?UaMxN$eFTz3c{hcpx@BkILc&HLq%Bh{!`gG8bd0d$#rx z^5T!kwI=KrL@0Ai2hxsv-v3qoGZcev5EsvLOk|!ThJymyy`0phj%Ha1U1{OnhcGkb z0hjWO+bYorEjp(hoLH;Ex4_@NW>8~AVstm?yhhP$$YSN{o)M}Z|IR;8hpvZ3^FfYJ z07#A`yuF6uUxecd}Rpglajx;0_jlRDx1ekvk3Q_qc*?_OC5(39U<=6vxQfBRdc z9X^j%Lf9y=|27QABDEIvxy!Q`Ije=5`CY%naGDN zxaa%0rFNyf+0uvrVCDapff9HpS#JP2(y}qA8wzYe7sz<*ryu)U) z%fmTZ&J3OYqcD?74Y)iFxOM8kf5=ky2g8@R{}_NU*XIhwW$lq^|C{!1VTUD6|Cy`1>Lwa%>)It?i|gZtfhO=+dnTZL=EhaC3~5 zF+ru-7i3VXiZ4wu-Z=K%-DfKKjl&hY+4sw8aCAmo|KvXvA<2>#PK-q;6+{>&!*cKe zQ*bUplCaMu*`@}eB3v$=s0g}1Ok?+?`x+R!A?4zyRV8X1g?E3&CY+q*O+%Ci2b5Np zVQX4wD}Q}EuW4v$XLzhctA}E5K!8nkf1S1xb^LxqfnAdG+z(6`9I_@;&X{+R5ltkd zhK<(kGez#eII|%_H!)mvLtRX{_${uOc@0-mX13jh2c45Ntt-_daeElU{F**=-bB60 zpy`3#;q6NKT>1LJJs1@&xdwZUj1;WJs%P!IYvn*&VQug1cJRw;%&zmozQ0FfTLnX)y zj)StL7Ij{|U~$Qt)u?hWR7a(dfg3mb`eUbH9mhLK8Qdnf0)xf6(y!J%e^hc)WPY9=_=XH|$sbFAZbx9(JWth8 z`@0kd*-_uJu!JGXww#{>9UWkI4Rf~-xW9Jw4Uh1^x6(}r*c9BSv-rT|@|mU_JN)1L z|L!c3@h%*U5W0>K>74lMH--F0EgifB+rc^|Nk8O!``f});f*Rem-hsC>k*qhXSg7ViDJCZz-rk#(Tuu|OB z#XtC35d{RdlZLS5PP>|rVl&)fr+HWW*n>@W;)5Uy3g-a|Xl7b11K5@xBxI}FoRO}0 zC{oiM+-=`LaD|STf~J5Bja=|$82imx+7Ajx?{g1mn9N_iFt#?2f&P`+M$;M~oD^++ zBh$G&jV8UaRqcvWA%^Nae*M^Um+^LL60`+Y-`+k;B88M`2MNJgJo3Ncnq6NJT2PLx z@R1GmW}Ogc6HnHKJ!WDliJ zuuf2+VHEH6e|zJD^nrcjKy!6Bjbvl{;8=%tRq!{9(KZ+R@W1&l=A6m2Mrt z2x$Ix$YG7Xwai%8nL&N6`;xC-5)9u^{QO{xS!l}=>b|ni8IdU>_UfTomBzzldA*^% z7Uf4Xl*A4SQS5Z>JI5~n|DAtmqP#tjQ6HBaiAa%s3VjF4Ny- zK`6!ez}#3A=p)~t@mvM90Yd$&t~_k@Ivln&%OMiIbC;T~Iah;l9T(Co&r`>>2k|94 zk8Iv7`8Z7^{T;T-))MzL>-^E`&dVF0wZZ%7(DChsc5Y368WMv&x3spYNIcE9NTs>N zK--Z;ej9C?5{oazJ>HMAs#kt`mZx5HX^K!+mO!AwGLde9v=;NbTjXqui>*{{qtvRm z0r#`*z@ob+Ph;G{+z*R<071gXp|-D3Q`V_HVGngLbPBsMO0stoK2s36MFY?y)=$vb zsQTtQVq+(uuFdYIv8A(z<+TpG8J?#F1u@G9X2Dj{&Hj-Vzp@Z&L?-25|2L|fb}-f7 zwj_BzY0-E%%80Z|ml24If-T~M9Uw-x^Bg5(d*_cBC*sWDzSmI4vmfMm?RpHuH$*$C zs9J#~B1h$g%5)G0&LXy!RyFI3R%)smeqIv{f>2bvF+~g<0-^|QR2%HC2{`5^j}Qaa z(cHOlwE%|?fAuH}uBmCjzJ(WbW7Wl@N}f8^o)Lf!+r|WQT;t~deE%xakiCcnJ<}@T zhloZtuR4-!EC=bMfh-|rr)QzLlxI5HJGRy-K!tWu*|z|ow1QGslxUvR&mrmb6aZSh z>FfN5zoAXV0vxegOEfyVPz}2*mdJf=Xo-~(R9EgqQNoXly!(~V;ZVbRn)v_tBe6pe zE&ZOcaFRb6p7P3&=zxI$!}7&H34*T=1)c!!(8nMY)Z%V&R5w?c=*TAH z?<-)+|`413HP_RL$GvT#5Xjg#S4SFs?{#{l5Xx~v#^Sx^v^d^V9102 z`{^RDBi)(Oq-98G(^2S6Q>N?}tj>3IOt37qmnFgrPj3}%g`Uz~k|{Kk21%4ueCKa> z%H53!V;oc4&F|MY(Z%#PhM*%Shb&puUMVHGFxfAv8UqPZB?{@_FS%LlI4R#?SJ2?2 zJ1WKak_^@XhF=j{kGX6yw^x`Ny0d6+LGS$^(u_ZNDal;KKD1pB=COLf6`3U}{^qGw zozBZ_b+f6n9_>#%oXlYus?_Dye}Pk>@e#A*r(|+2Ru&cYKmHOQM^s!mc z=^GS!Ki~%O0l)dqPMJ!MW^$p5@N}QQ^Y`Ic3{ZRm?+LL*t~f5L;ojAh4owW}V%YM% z3l){S2AHPpr1FPJQ{O-RWe+F|UK=sjPa#JOMQN|mxEnBv{^fmId_^J#36u~%?sFWN z6d6}lJ3|Op>+X`BpM5Q>CoirsJuIuL|3!6O{Gsv>pbF|W!SP|tgx|*Oj2Ja9?XFWO zs=LRWP%dfGUYtJ~hwL>}y#oZ-gmhqmhe}TJ6XxC7!h%J?$23Q-T1&;dlHr^kfsJ;* zait~dHDaB3B0ti`HVChhyr?bL{Fgtd;OXktak%SdWcVd2Y=uV}jZHMIjz>sJ9tXm9 zBrs1Uw6=QNG~u2qhWx+zkIV1;fse7WMX?a#g)+>I{RyEkeZf$EQ15{r{`Dmk8&lxm(s1`IpXT7?^2V5TSMr$m+ljEibR8FB z-ar1QE4R7C@$5PF`c|kFHiug6=QgflATXHlCsX`Znz~3$DkBBGRswyB<-Pu?JSvq4 z7la7muU>Edr~HpeO0r~LaI#iS9t^tj{$oa^j@6Y^A z92i=_-sUFJFT?EHi(bSh|FimkEChCwr$CGcIFW|aV-HOn@eUukjaM+DjuP<%pL)1QgEh=JqKnu(2@?>+w#$$D-Kk5BO{`4fqx%KRU{nw*M? z4^xU+(=%ZM$mKi1T1xqJoY>pq~h-*Cr5`*`zMUzYAzsQmn=^@1j z_rB{diQ5rdAa>8Ghxnjx{^WH8=iNnyBbBr7r57w*b~8Vmz1^SSz-nESS*@>l|9Spo zXcD|?({*)?IR1%2TEaA3=12~OPx z(7kyAs%O99E=+l+kIPq%d9 +CTrade trade; + +// ================== INPUTS ========================================= +#define TrendTF PERIOD_M5 // timeframe dùng cho xu hướng (mặc định M5) +// #define SwingDepth 5 // Độ sâu swing để xác định đỉnh/đáy (mặc định = 5) + +input int EMA_Period = 50; // Chu kỳ EMA +input int LookbackBars = 20; // Số nến để quét tìm đỉnh/đáy +input int SwingDepth = 5; // Độ sâu để xác định swing (mặc định = 3) +input bool VisualizeEMAs = true; // Hiển thị EMA lên chart hay không + +// ================== ENUMS ========================================= +enum TREND_RESULT { TREND_NEUTRAL = 0, TREND_UP, TREND_DOWN, TREND_SIDEWAY }; + +// ================== BIẾN TOÀN CỤC ================================ +int handleEMA = INVALID_HANDLE; + +// ================== HÀM TIỆN ÍCH ================================ +string TrendToStr(TREND_RESULT t) +{ + switch(t) + { + case TREND_UP: return "UPTREND"; + case TREND_DOWN: return "DOWNTREND"; + case TREND_SIDEWAY: return "SIDEWAY"; + default: return "NEUTRAL"; + } +} + +// ================================================================ +// HÀM: VẼ MARKER XU HƯỚNG (vẽ text báo hướng giá trên chart) +// ================================================================ +void DrawTrendMarker(TREND_RESULT trend) +{ + string name = "TrendMarker_" + TimeToString(TimeCurrent(), TIME_SECONDS); + double price = iClose(_Symbol, TrendTF, 1); + datetime barTime = iTime(_Symbol, TrendTF, 1); + + color c = clrWhite; + string label = ""; + + if(trend == TREND_UP) { c = clrLime; label = "↑ UPTREND"; } + else if(trend == TREND_DOWN) { c = clrRed; label = "↓ DOWNTREND"; } + else if(trend == TREND_SIDEWAY){ c = clrYellow; label = "→ SIDEWAY"; } + + ObjectCreate(0, name, OBJ_TEXT, 0, barTime, price); + ObjectSetString(0, name, OBJPROP_TEXT, label); + ObjectSetInteger(0, name, OBJPROP_COLOR, c); + ObjectSetInteger(0, name, OBJPROP_FONTSIZE, 10); + ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_CENTER); + ObjectSetInteger(0, name, OBJPROP_HIDDEN, true); + ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false); +} + +// ================================================================ +// HÀM: VẼ MARKER ĐỈNH / ĐÁY (đánh dấu swing) +// ================================================================ +void DrawSwingMarker(datetime t, double price, bool isHigh) +{ + string name = (isHigh ? "High_" : "Low_") + TimeToString(t, TIME_SECONDS); + string text = isHigh ? "▲ High" : "▼ Low"; + color c = isHigh ? clrRed : clrDodgerBlue; + + ObjectCreate(0, name, OBJ_TEXT, 0, t, price); + ObjectSetString(0, name, OBJPROP_TEXT, text); + ObjectSetInteger(0, name, OBJPROP_COLOR, c); + ObjectSetInteger(0, name, OBJPROP_FONTSIZE, 8); + ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_CENTER); + ObjectSetInteger(0, name, OBJPROP_HIDDEN, true); + ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false); +} + +// ================================================================ +// HÀM: TÌM ĐỈNH / ĐÁY GẦN NHẤT TRONG LookbackBars nến +// - Sử dụng SwingDepth để quy định khoảng kiểm tra (càng lớn càng "mượt") +// ================================================================ +bool FindRecentSwing(double &lastHigh, datetime &timeHigh, double &lastLow, datetime &timeLow) +{ + int bars = MathMin(LookbackBars, Bars(_Symbol, TrendTF)); + if(bars < SwingDepth * 2 + 1) return false; + + double highPrev = 0.0, lowPrev = 0.0; + datetime tHighPrev = 0, tLowPrev = 0; + + // Duyệt qua các nến trong vùng quan sát + for(int i = SwingDepth; i < bars - SwingDepth; i++) + { + double h = iHigh(_Symbol, TrendTF, i); + double l = iLow(_Symbol, TrendTF, i); + + bool isSwingHigh = true; + bool isSwingLow = true; + + // Kiểm tra SwingDepth nến hai bên + for(int j = i - SwingDepth; j <= i + SwingDepth; j++) + { + if(j == i) continue; + if(iHigh(_Symbol, TrendTF, j) > h) isSwingHigh = false; + if(iLow(_Symbol, TrendTF, j) < l) isSwingLow = false; + if(!isSwingHigh && !isSwingLow) break; + } + + // Nếu là đỉnh rõ ràng + if(isSwingHigh) + { + highPrev = h; + tHighPrev = iTime(_Symbol, TrendTF, i); + DrawSwingMarker(tHighPrev, highPrev, true); + // chỉ lấy đỉnh gần nhất → break + break; + } + + // Nếu là đáy rõ ràng + if(isSwingLow) + { + lowPrev = l; + tLowPrev = iTime(_Symbol, TrendTF, i); + DrawSwingMarker(tLowPrev, lowPrev, false); + break; + } + } + + lastHigh = highPrev; + timeHigh = tHighPrev; + lastLow = lowPrev; + timeLow = tLowPrev; + + return (highPrev > 0 && lowPrev > 0); +} + +// ================================================================ +// HÀM: XÁC ĐỊNH XU HƯỚNG (dựa trên EMA và cấu trúc swing) +// ================================================================ +TREND_RESULT GetTrendDirection() +{ + double ema = 0.0; + double emaBuf[]; + + // Lấy giá trị EMA gần nhất + if(handleEMA != INVALID_HANDLE) + if(CopyBuffer(handleEMA, 0, 1, 1, emaBuf) > 0) + ema = emaBuf[0]; + + double price = iClose(_Symbol, TrendTF, 1); + + // Tìm đỉnh/đáy gần nhất + double high1 = 0.0, low1 = 0.0; + datetime timeHigh1 = 0, timeLow1 = 0; + FindRecentSwing(high1, timeHigh1, low1, timeLow1); + + // ================== + // Logic xu hướng cơ bản: + // - Giá > EMA và đỉnh cao hơn đáy → Uptrend + // - Giá < EMA và đáy thấp hơn đỉnh → Downtrend + // - Còn lại → Sideway + // ================== + if(price > ema && high1 > low1) + return TREND_UP; + else if(price < ema && low1 < high1) + return TREND_DOWN; + else + return TREND_SIDEWAY; +} + +// ================================================================ +// HÀM: VÒNG LẶP CHÍNH +// ================================================================ +void OnTick() +{ + static TREND_RESULT lastTrend = TREND_NEUTRAL; + + TREND_RESULT trend = GetTrendDirection(); + + // Chỉ báo thay đổi xu hướng khi có sự chuyển trạng thái + if(trend != lastTrend && trend != TREND_NEUTRAL) + { + PrintFormat("[TREND] %s → %s", TrendToStr(lastTrend), TrendToStr(trend)); + DrawTrendMarker(trend); + Comment("Current Trend: ", TrendToStr(trend)); + } + + lastTrend = trend; +} + +// ================================================================ +// KHỞI TẠO +// ================================================================ +int OnInit() +{ + // Tạo handle EMA + handleEMA = iMA(_Symbol, TrendTF, EMA_Period, 0, MODE_EMA, PRICE_CLOSE); + + if(handleEMA == INVALID_HANDLE) + { + Print("Error creating EMA handle: ", GetLastError()); + return(INIT_FAILED); + } + + if(VisualizeEMAs) + ChartIndicatorAdd(ChartID(), 0, handleEMA); + + Print("EA Initialized."); + return(INIT_SUCCEEDED); +} + +// ================================================================ +// GIẢI PHÓNG +// ================================================================ +void OnDeinit(const int reason) +{ + if(handleEMA != INVALID_HANDLE) + IndicatorRelease(handleEMA); + Comment(""); +}