From e80edda7effdc36f0a2da11730730b08150f056e Mon Sep 17 00:00:00 2001 From: Nkondog Anselme Date: Wed, 21 Sep 2022 20:19:47 +0100 Subject: [PATCH] Created the5ers risk calculator --- Experts/Nkanven/StarRiskCalculator.ex5 | Bin 0 -> 14924 bytes Experts/Nkanven/StarRiskCalculator.mq5 | 216 +++++++++++++++++++++++++ 2 files changed, 216 insertions(+) create mode 100644 Experts/Nkanven/StarRiskCalculator.ex5 create mode 100644 Experts/Nkanven/StarRiskCalculator.mq5 diff --git a/Experts/Nkanven/StarRiskCalculator.ex5 b/Experts/Nkanven/StarRiskCalculator.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..769e576a9431b219f1465ccbe3c3ce4c5b8e0df0 GIT binary patch literal 14924 zcmd72V~{Vww=MW<+qP}n?mlhXwr!loY1_7K+qP|;w&(os%#FD*6YtCW^!AS2du3Ku zMXubnA}Xp%OoI*B5#S6b2nzUTK!BtF%KyRtw{cO+(mcd!5FOyp`DS1YTm1LK3xErN5Woyz{MVQPwEwUi!1~_|JAlc* zX#TG+^bb1&OaV3k+kcS|p!P4?0gV4e=YL~{|04bWT+aXT_&fE&Q@&)xsa z>Hl%D{Kw1sA1{;tLiGPQ+W+Is@LxTK|2p>n?#uu2H2;?iWcpVx#()05YXx#i=3`pL zdW+0M^i$?Y+R@-NQ1eXcKo*QB`$%xyNI&?b3D3(*>3FEqrCoH*82C52C%3_>kx-hU z%)#IJ&s>Hl(ge}f2fs&B8)+Elry(7u&zU*Hl}+cxPH{2s27ISwQlqJDFDN11@^d$q zerWOR(dZtww$rB;F&0rYp}AjON$?fOcfQqhn6}dwBpg)*=vmA0@j&>Y)rZ_FGtYRr2+@Q6q1G>#oeoJ2^B(hr1ca`>50xh z+N*o1CO$QZ$B^1B;V#aGH(zgfms|`#{d~h8OT`x>`pn$utUit+5XdcTXiZ{BmF2#u zJ5rKvJ_;*fSKfp8;8gGH3d{2+=n@UEP>1=j75p2%g;F-pr9P~As}TeN`3DNY1rlPT zD)pc;?l&IgS)tp7k4JujMR}QR9E82hA*nx+4>6)LB2KO+p9{8QgeXNi4>a!+7;9)2 z*;o7Pf52nZ=UJC8vv=ni3%nos?Kyne1d5G!qlIWM51Ds}Jr(XijK#; z7okHwq|#H0+;J$D&9hAv;ofWfp4qSXTl|s6{5;J2*z#Xt@nT?pwKfKDi9|EQXtDNJ z3?153)}_%1vwLDnm-JhlgP{cwcf7l>_-RxfZ8vdr1O++)-B3cKy z`ZH;QZwB7rj(9yZy4x18fOM1!bHccU5DKV1i;v_UWs{hwrM9(}cPJi@TJblV_uyCm z%`@rFoT3QU_T1REx>e6Rdu;(KI$#EsM{5>#HJ@)Fa>PU*Z$?6q^-H)1zLP0(0}fLw zJ?fPPbwsOH#bbF`L6Bu%h-8~3SPW}bzQ~rlh|InG6p%|E7-XmnRR8~(A3`ov;$ijdIjJ$5qsApj;PRd$@^IQpu{_` zJa$^DF*>{QwfP*@+>=>FBW&3IsHxmazfsRTgmf*dWN}*=3gk|4UOqV=3a5L_L`p9m}QjNo>>Juov$H8#v z8VL*KBf6Z?yoFOEHA24EQBTfc4o*@{2w{j6Irri0$x;Dmgw_(y>!aql|IHVun=#9_5g(7vsRi_o)I3YGPZ4pkeCd?_!&yNiN3&}Cn@YpZ*F z<*Vfo3!4u)TOtsjG2(E7+_{%O^p!4GR5t7$6@CN;IAq#ZIKtrX@Xc$=A^7?;8q-*@ zW%kqhz>h7YOK{3;|A{-HGDCFDW4U8WD(YmQfl}97=BYpN240c+N#VjSB`h8FM9(H7xU}NCQ z>w=Kz@#3om+gHThAXtjoz0TM5uB0}~n2o((M~>y@NS-Rfp-zqCEA2qAy>H$-oMdhShLu-+#ovro z)G)v<4$rz!Pk=axY+r{?q`;o?=}0Ox95N3dI&OWTGrt2I@Y_7BOYpz;^` zpUQlhQ|z?Tv7HTOgE{gN&stqD9DX23o@I&@?#5fWnzi$B;O1xP1>OqxqQh!)q5JNH zEXBN^r2$7yu0h1m!kK!VN3d$Bw~`SKJZst!bzA3b@8uu)N?^JQ2cfhE`a$a({T_?V z;}o&5nMoJXaF{zuD+c|jICynWvh;xR_KF>v(*hUe9=vBlZ{85?S){^f_!MbuU zgwdQKrY;wiu#b!*&5kH9;6M9XN5O95U~YEzM~=;`O8IY1^5OL=6?)&3=EmJ*rn zv*jXBh6&{V{S>n%&@J9Ko?(3Vj>{CS&fH*Kz@ zw_Q=XyRxlp|3M>NcrJ_Y-tn-Q^!n`U{`L=xIV>+Kqa#>p{#R}Oup>n==E`pD#J_=k zu9g?2+@IFIyF4X8bktn1ISp%$lqeqPwTw3kR9Ud_GEBwUP;FwY#(@3}@7kL}ijHwi zRq<~`WDEuFB*6fBVi~9@o4A8)m%He)guRekS!e_eB|3bE`)Y)?k)XMWy1?OmTU%oI z2nl-_^0&`waM{A_Z=1`{KAM)uyZJ3HwwjZMUd~KZ`Y`U=zFtJgVF)(dtot#b+yxtZ z9TFoDU%@T@n86G26k+3M7wvXthR%#If(o1x3nQue5J0{D6YP{uH{i@gg06(hneui2g$bDhat(>wR$nteG%G_%ESD* z$o6UW=U=X`WqU*>wGSl9#Vas!{{1t)Z`!fUgb4LDQHs_GzSJaAp4MiF2q8>+SaP4CasEJwR0YU`!sgivb$%aP$(e_Ca5S}h)-RM zJCrL!04pF`X>f{$A;%<#$FUp;_C(mF&+axAZ<%{9ufoeGY!fL4E`oCTRBt1zXA1Jp z>R{^nzhxH#V}&odh!%%oD(aza=MATkNABRwmNvNqC;D8jch^+ixB(%zHY{&;?$#0) z0TLF_DqTXMXD|ViXo9JI0k#tUW0zZo#gel+vEIMOA2s9i8jgvNnp)v@(dBMB&!o2b z7AU+UqWJ?UAXQgpT56-y-4McHD=%LbR$^uzKVA2r<+lB4fRvof)lR!=#QS zQl}o|b7gFdxA7zd!u#Gs&O(hE*y`O|4vdycWR!r^6CXz1OgOXYrdcE6;Jf47!&@Lq zzEtg6^2g{b!Xv6%`c-M==8w6=l{3;r51L^bT=&+zFSN8&#fS<2SbW>1A&?I0FL@J0S-; zj2U}7S_BG;$S*>t_>L#Kgc$JpJWPzO7-^u^InK0r)Y9+>at9y*LYWwVJQ5I0cfJ2Di zZROMEyC%wJN)YG!0`-u34Mrk-Lu?Mqip*`E(zRh+34aA@@`s}NzXYXYQ%c?*^@ z=$%~AbPqhp;qIqM^}bY~=WWTIbj zci~FRn0rpDic?rhfT^=3{eER?Bo!mgwOK{gJ2;Bxkk#$1S3DQq&*JGRL4dby5QG(6 zDM!lG&KTy6;{HmlgK0^y5|V6Qn>t;2V!wf%j|OY;hvuQUQ%20Zqt~EGfEMB(C;0{L`sp z&_XIGLCy4@4fN?pPh=~Ir>SYs9Y`QzPvuAvc!ae z4Lp3ByhhwVKA6_-e6;64O=;~=$h>zo{WmbCA}p>;lDSzv33LO5xfBM?avp2Xz-T>H zNflD2r{Tey$z>Vie7p2q`X$1{XqvkDZCy{)HWcZ~-DlW(6&tLFgx<>fS<<1>q2)}Hcy(GHF{KblJ9B7bo|tni(d_z$VjV2Zs&ycAFnh`QwJzdFW^|Bs;qh2xa>ab#8e0ELy6= z$aG2qW*h^Pum;2-6p9_(MA?}+yc+S(d|^pG&|C_-=81kd+-7{U-0P@VPR(cI7fE&G z0=!^o>j;o}FXFUBTGvs~jcLl9+KGUgz`^79A^lBuLep)Ur4x*zq^86k`JorD*w}#b znn+|okZ+Rha5d&5P?PHMXSe@x@T)N_4;!nz@Gvi7HR7ZV%{hSn;wcAR%1`N%ef0uk zW&@-u%3YDMvFy~v=Okt(CjL=yLc80`XJd>B)X|7~+ZqF_YvRr}{&{OYZSp8W9W3I0 zL!xTHCltm0e#wO|pkZY^g{!38ILvyp5ZxqYlichTV3Sep8RQz{b9BV|0KeV-(A6N8F!?1yk|Hk_FE?%S@5Rb}}h~ z!;o##WLq9ZmZSacGBgLIviTgzX<&05&RG!)mqqSpr z8@UAZMfqx5a*bv5R`>`+UbXg?#Cb<_{}D@1VgV0X>pdgc0xN`#DVI} zhvT$&_qfny+l5%V&6dT`fmNz z;2*H3%RFZu<9*F}pyuAB)|knuNL7Uk!3jn8#GR$5h){z_+0~J+&sWdUilui1pAEYH z=rP?Tf}NpN@(N%Dxba~M&flV+Y?y31JGn2WcfbO@%Q44FKYQe&vv5Jc<__TEyef;b z3NjKQMLRQE**=HQkfDQ%-2s2RIJNiVh;I5=AcFlM4;A(!1#KXEl*!vXhl*!>$tlY4 zb73kkTNc^6uTIat=P-NL3llfCCU6zBbvMT;{vy^_65$?N$!(|+gplBAJl!yXj*A^J zTIbv6sR=e*(ZlFU8)`X^DxB@Fo63JupxX~bz%oJ#lmMsdMaL@3A zTY)UT?=Y%8si}+h{7?l8raq$=LbC(Uva?dSWI)}{-}Dd{6}uw6t`{MVc1o-~Q2jSa zp*msb9js{|6mh&%*;WzUP|4RR0Tml94Uky!YERl2SzqCj=7wGPLcpWRt7)-r>8*jSWUY;K` zV59>oaTBWFyRX#t{8gWRY!4YbKYn~Px2U6s%A5}`XVc;OR%ur23x9V;Pezu|5}T@l zM^QYhrSe_o!K9EpcsN89A>A~pT+^pJf#QRfXO=7oL zzb^nA5U~%{Yd;7BAkM5HG{sZ(dfBHs1~^82U@r^`+TnN}5>*Kuw^? z?NK;$r;{(G(C}}B)78srV;mfVTXqi|RbF313Z0h$)>@_8 zY$Jc@S5KpeTI9C-FV_4yC=pN>1X#$XeHhUL8V$0b?iQnH%YMs(#BlMNkiE zKx;Qlw#R9GeXZ|V@*w{nY4Y)Th?sR7Gg-6(R!gD4NBny#osh7y}ZS&(9H9p z^T9{xePFTXPw$&c$SSKZ{)VCyKA-rN2Gv(|s1e*gN*A=l>|ubBnplV`Vxl0hLv0`5 z;(*-Xnn?Txen1PkwmL2^9}uEO)mn40kOzY;x$nyYxHdUHQJo$!-y*OpC#*XsV*HaG z0tVoVa?7OAjCHpp!E_(6+qAHJ$|>Ph+s&p~8vX2^c{e`4Lu^c6B%dgI!f>Z3I#qgH z?-Le5S#*PC$?DU|@F%<*H_VR4BZ{k*iz5bZ1~sIfB)D#rLKi8vI1=(AHuNFkn}AYB zv(amr3(!z;I~C*{yll%Y3LvOk&oXR#PT*W^$)~L6w=RaEKrS_?eTiZIV;R11N2g++ zetOxgcjZj_`Z|CxV;62oZ~#Shb2!sQmDpPhtY7y8_Y!msM38y>Rc}4hz`$e)Y2HnM z${~38YbOHmD>ztL2@z+VTOUE-7%mBBLXiYfl&p9&2e1 zvw(I$$kH^x9lYIvDgN1AcD7hRHga7X{;Tns zyGNe%QDpRHUtt$PKB4|04xIvKaVpmnq}))4|J0wNhG+{LS9yn|h)N0SQfJLtICL(S z_?k#RWBTgP`5jRR5|b4vyg3SXeB=!MfsTVx?+RggM*|#SPsURR+kHM>cpfG`ToOAM zxg+%&dTJQz%%`8<)QK-}$;%kqzLF(@Kp)equ97;Py4 zECN-{8>T-I4fdZoN=jlox$?A6RbyISk2{oM-Py#^-X-l_MHE1e);l3RU>KUvqe3h7 z`lvS=tx}7rDQwg4FEt8CfqYD)eyvsLp0mTh+ZNH$O5mHEki-J2)^AE|T38!{r)!gO z$7P}{h8Y5$npatQRxyz?xgn!3*_k2(L14 zpIRO7jTD4QCM>a6M0G3cNYarsGlQQ?yvvh`2vvWah00qLo{k_zru{?H5x!|FdSzOE zHbtZ;O(Ei#>L;upy*j^+CA+?>j@-rm?BzY4O=n02%p_+S2hH;BjK&5J?-HC#TD8F+;% zm61W3am15+%X^-yq&!707lX-?(^)>XljqAIn=pz^zn%8GAQ*OnEYymh*I_Q9{rLRh zcO&$&oBLc_$xW~F8&DWoh%nT$27!dA*e*H9r0W3t_|W366oWyUgeZebb>3~~m%0wx z%mcPZJdFK)iXvll=3F=zD?_oFt8t(;4XXNjvlER*Alb@)S3}>Yi;(jz_N|1d6k7LV z26(f~$-GU_-E9r|3yfJ#O-Sr5<{nlX((L)m!X>2NBnJLKJmBNLf!0O3_q_#RKp{h| z3(2!MSZW?1Hwcy1L;(b&!WtKnGd1h>ko7iyfIqffFYFVUg@up}2y zROWJ|v*c7aPox2|P6SLRpBNnRvsxPlB-(@_43sg{SzGi&2YDck+WuhrDbzjI2Lo!_ z&{ia^4P;<3BaT=efE@_R3I`6U_1Qt66AXps76VjQnXb?=Zv@SMa41St#e+=F4y}7h zIpv3i-5bz{fO?+Ua^2Ai{w-LGOQlw0OOfyH2qrY6UD3(%xxw02^Uu>9`e_{=QNzG4-(w|>v~=C0)ci6(>{ zc{I|O^GfyPbTbKggtu3V%L8y|jAxImT~4)HE01*mM@7!!M&_hBru%02!Ns~DPfYRROnw}nA_TX;oDFq1>NK|dQ1N{KC zt#ZcA&8_G1_I+&jQh7n7S?Ua-1-8elhP2G)HFNYh%+jk~7tj!{)JY%x5Zg|BpoIih zlopJUJki07@VYExav7?yoKmx#hBRw9F6dPONsV0LY0`BC)O?w=T<43-}z?GrgM&U1Uy(w*Mdwhc~EWL+t@wl7i&z=e^s2741Lz@`EYdIyN9Mjcg zsKq?Y?tsg}@u)IK3^d!6fM71_LN-bW2m}M_-w>eH5bALLgPGV0WHVGCbyPJhUIFwfb$g>`A>X|l+s+m_ly9Q3rC0v1H*NcS0cY4N1 zw8!7gFk_mF^Uy228h$IFOY5ZCbH5-{8TrNzwRDO;!nPjs(#fo?gxYEjczNWVTwA)1A))ovlq?Kb&%N)MtB*f4*rE3(M%trh(c!Q zz)A0Ly5Jf8%O9x&LuwASYyprRMVEHTiJzX7pUQ~H@h!cUIN<%Msnd#+r(nV2W0r?}Y&{Z^1;5gvnQfTDq2K;q_ zS%BlWot8QJqv(YnwcD#~I@3F5ZsdD2%_%XuF!FW;QFJwpTf-Fn!PG#feujZ(dLp13 zp!t)na#OSw)CGb;FW^Jd+oS_5Z(caa?n_?Z%wn5}qBeC!+(sr@qT_d2{m%Ri4`=Vn z6L|C#v$lZaxRiV_s``&$4W|qrozPj9kHRKXoc)9jrRca!O2JvBkrF5w-s_?PlfBGY zb~)!*g6KO(YXsm_RTN~RjKFxr+nOpM{$e@&V!SDp+L&LE%zs1OH~+tN{D3ivHr3t-yjp>}m893n)J6xLJXh?Dmh3=JDY$ax>Cj_su$R`xCA zN#Q-SP1n272bvo@?@F^V<}%5;$3NleLRD1NuiG8jl=bvaXj+c5a}D7wJIpQm$_2*Q zhd}7GG36mVebN946=>0A-e1oq8yZ2WvBw##TJMP{ zSztI}MjdJVD!C3Um{;wTzA?U3GOZpEFhi_xpUstzt%}0Zb{wySLh3dh5S*$*g@03X z>K*ep=Cz)Cc&kXZh;@hyC&qB{xxXezAf^ZxN&;J8Ds+ zM8WJK2%`c=lf&Gkm#=F;Xa$#+JCQV?NS_?NZu_0bXA_NLO{46>nqBPZjHB)UEHeF| z_vRw#1VKnpJPrBY7In8fY!zyrb`t_fgI^SfZF$LL<)R=a%#P7(rD9rPuPb<-qoH}g5LoA z9C3wmJ^pRl8CgCV5H#Ujj>R!H3`v8FtQ*quB8V>T!im?DHvT#Sseb-b>1ber**Eo+ zE+UkB`xz4e~k@j>3mSmDme3W$LHZZe(?-1GJ9iP6* zobhjQ;Zj;#WqY0oNaFRsefvhVmWNt(F%@F5@tBl#4TwLEZl_KxQKiKSoWAZaBAW zO;ZkpXX1SV2LyEFD)Kv#AlU>~#$>|*^nD-w*GKg+Y_!}dL;b<#$(2VW`H z_(kfhe!2NsyCB7YM*Wb}sGAKDpHQUf91C29Q0Sh4Np=#%(D0GC3yzn)0043+f%E5$ zbbN1}E8gftKZG}v--1bm7V4cN(eW`-h1pOA;YFW%ZrV8xZ;d4L*XeIg-au60Y*pw| zNB6#{B0bHN8NtC;TA8+lDazO0%s%p{4)r#bJ=hhs5d#A0sZdy~uBl^6=!zrtx(bG} z?l2LQ#3I7Re;v;kfLQkyWf;4aAxf#>Ks?#gUXkm7scKR1Fky~a-<}=#Cql9qgly#) z_xMx~ZkVXsdbd2li&^KE-x^T>yamkbwsn=Wd)oV++K1maGCqTYekHLgS;JJJ)JcX{ z(v^vlyRQ*YUe*9E8jbF@-xSZP>1`9xb~Z?_xPjvSoZcol7Qm7xwACal*=7OJl@>V8 zP1OEPf;J;iAgf?ry2T1kFV2OA1?Tqr1gpsAeL1yFsvOvI-g)WQ8OWYL9xI%^+t^%h zw@ZLV!OTj(VJbTu>LWj-Wp8`7$cxjVm_ygLwFh&`2b5(DubQ178iu5DYV z7oRzULDE&%JjhrVQ?~Z(?!5PBw@A#d*(?<~CFwKA{lE=e^&g!2j6?p(&r7)))6u*ze z8w2zBV~hFpJwe*{korMFP?`Jtl^JfRr1VY~WV6m~kVeO+dZDaDrHw&;CI$4>B^otlWMMc;&7;;42}xGg zQ4Z~QwADS-9--+UYxLUuDFp&guKwAd$1kRys`Of;Ujdt4yu+1Td~!t(OBm6IefpCB z!&D|yunWA+C;27p)ifqSPw=QdT{GbQCW2@dJ1)hQVn%3ZvzSD*zglhvxcZxLKAX|v z{*|QgNCJG>^zXY>PC@vtR5D{5G|!T^$uf&#=Ozn;YXc}p`EWBLv5LKKWb3bYlq#va z;*er!1IS;h%V12pXV8%}+Ud-!^%>Iy3`@kr7R4x+qznrf_T}-2IkC9@agN1$@tdP~ z#5(Qe;45)ETOzNaVmxq@rixLt!ImR?`4plcr7Hxm%LF~(ZeFMSr4I?%)EYOM$E6`qLrM(q2AJv1ub@a`@Hl^FPM z8N}T>${3NkzR>Cy3}D{vkW-0Ip1$oYLHo91yEgS)1eAbP!9O&OAgt3ax-+!WO-r-@ zyUH)df}R>E99avuiI;=8btl=!vC<+a{u5EznjQO0a>;GKn|C*auHuSMt{v4^`9F?O zmM%czer@v#9F#vsYwgovpmI2l8A~dn`HnQ6?mLNudn;xC>Q6p8Bdrk)5-}R46nL?^ zPg8ym436tu{`4MHva0aXKyn5SLV|eYR7M;1HEwvS@+MFlGwdpVv?BLu%o8 zPbBLJN?sz-I`|UDM@}EmZM5#QhkFD~=t7eOnjH8A&{tEk6c>Tz`cf_9@y$+Muc!b%zAv1Btq28bD-UQCo zy*^HAl2YG0_LTF>^gC1dW#vVuK`W<}LOr;aTW8Dn`i*YHS;wU1Aq}AcN*w1wS?`k3 zqM(zT2${)>;71pIpCJF3)SM9I=pbZsf6n1c7@~h+_X^R@I4V8B~@VMD~ic zs0__!nW#@PZQKazuW|pblx2T1h+x7nhq6dc-N6^k8AkhiGQ*TJB?M*kVbtuJMtIYn zbu?TJK4!}z_|3CqD0RMQ=2~@VvdluHsDB!U94kI9>Z8y*x`A$E+yn^<`pGbgQaex# z50foTefFxyS`QAJ!!z={W8URj{$=EXuy`Z1bFbbByE&jV4oKhk6hfaRe}~a{`F@{Q zE+DhK<~G{cM~gVpdyT>dXF=puO(c3ZwkDWKKCbNP|}oi>_w37S#X!)H+G0P zl?zJdC2q5hSPLq1Ru}4-TH-Ngg-gag1;f;6SE3?c*eSzoJa?4~0KpMj~bzV_ut&GN#Aq75@0Btn% z7bnk_rTjU_khD4Z#G5d~tMES6_@*uusv#hpvRfwy$a(%Yy%FDDJN*(r;Bc-*E-+78$F@_p?^`dMjQm$+y&Og@^m^q&)-S?YM^*6%I~|K7azEVhKu~Y&Ob|7w7fG~bVE~W8&?mAr z`wBdrWzL<~L7wt8|M;fond2LQu}-mn8Yn}8ku$Qjkx-AtQ5@ed0$n?C`o#1ztv=jC z!-j0}X)Ku9^mv&WxC$v4EP- zPVVVH_x~!6=Um&PxF?UY8g1JpI4Y6Ul`D`7@XKY{e9n#P~`?B$#x!gL^E1nZiaXID~!<}I_zmsc_sL_Yt^Sd z!v9DA^8hLK7Qj5#`Zj@E)T-K!O}0C}%CK3;4ZIn5*)fOJ*6W#w>hFTO?hAi9@m(L1 zwbnJhL>~WeNKTVDoPYJ7*?=!q;S)T$*V1#9FFn~5_e zr->X`smvKc9scs^>n8s4Yu1A~jWeUb>Dw3b!-zD8F1~Ce=dJGf5MO0)Eon2${$M5D z_V?GY2q@2*xJsE3WTg@=gLWae;e-lV;L}JL-~0xz#tr2!mIqLu#VRQENbtq7vnBN| zI2Px^>F`<{uvS$;i$S~ggvh;WDL>KPzZEai)G1#&O?{MADJ~uOWpJa~%X&p2U9-v8 zyFRmAxnxbr`|`xgVb>u=kpw8-Hr@2C>wUiu%{@+)5zLQPG4jN9BZHmbybFJLB#=vt zztPM92nT%j`CSw12QUqjCO~C@27xEMN0dzU`*2)CCuR`#uh!zER1*lh{wzqhg}?14 UaWtuc9dh~`d3I$+2}&ORFUkqQRsaA1 literal 0 HcmV?d00001 diff --git a/Experts/Nkanven/StarRiskCalculator.mq5 b/Experts/Nkanven/StarRiskCalculator.mq5 new file mode 100644 index 0000000..b353e6b --- /dev/null +++ b/Experts/Nkanven/StarRiskCalculator.mq5 @@ -0,0 +1,216 @@ +//+------------------------------------------------------------------+ +//| StarRiskCalculator.mq5 | +//| Copyright 2022, Nkondog Anselme Venceslas. | +//| https://www.linkedin.com/in/nkondog | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2022, Nkondog Anselme Venceslas." +#property link "https://www.linkedin.com/in/nkondog" +#property version "1.00" + + +//Parameters +MqlTick last_tick; +//Enumerative for the base used for risk calculation +enum ENUM_RISK_BASE + { + RISK_BASE_EQUITY=1, //EQUITY + RISK_BASE_BALANCE=2, //BALANCE + RISK_BASE_FREEMARGIN=3, //FREE MARGIN + RISK_BASE_INPUT=4, //INPUT BASE + }; + +//Enumerative for the default risk size +enum ENUM_RISK_DEFAULT_SIZE + { + RISK_DEFAULT_FIXED=1, //FIXED SIZE + RISK_DEFAULT_AUTO=2, //AUTOMATIC SIZE BASED ON RISK + }; + +input ENUM_RISK_DEFAULT_SIZE InpRiskDefaultSize=RISK_DEFAULT_AUTO; //Position Size Mode +input double InpBalance=10000.0; //Balance +input double InpMaxLossPercent=4.0; //Max Account Risk % +input int InpLifeCount=20; //Number of losses +double InpDefaultLotSize=0.01; //Position Size (if fixed or if no stop loss defined) +input ENUM_RISK_BASE InpRiskBase=RISK_BASE_BALANCE; //Risk Base +//input double InpMaxRiskPerTrade=0.5; //Percentage To Risk Each Trade +double InpMinLotSize=0.01; //Minimum Position Size Allowed +double InpMaxLotSize=100; //Maximum Position Size Allowed +double RiskBaseAmount=0; + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +string Symb = Symbol(); +string AccountCurr = AccountInfoString(ACCOUNT_CURRENCY); +double MaxRiskPerTrade=0.0; //Percentage To Risk Each Trade +double LotSize=InpDefaultLotSize; +double price=0.0; +double risk=0.0; +double StoplossPips=0.0; +double riskDiff=0.0; +double initialLoss=0.0; +double totalLoss=0.0; +double maxRiskPerLife=0.0; + +//TickValue is the value of the individual price increment for 1 lot of the instrument, expressed in the account currenty +double TickValue=SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE); + +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { +//--- + Print("The Expert Advisor with name ",MQLInfoString(MQL_PROGRAM_NAME)," is running"); +//--- enable object create events + ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_CREATE,true); +//--- enable object delete events + ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELETE,true); +//--- + return(INIT_SUCCEEDED); + } + + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void OnTick() + { + + LotSizeCalculate(price); + riskDiff = NormalizeDouble(RiskBaseAmount - InpBalance, 2); + initialLoss = (InpBalance * InpMaxLossPercent) / 100; + totalLoss = NormalizeDouble(riskDiff + initialLoss, 2); + maxRiskPerLife = NormalizeDouble(totalLoss /InpLifeCount, 2); + MaxRiskPerTrade = NormalizeDouble((maxRiskPerLife * 100) / RiskBaseAmount, 2); + + Comment("Star Risk Calculator \nRiskDiff: " + riskDiff + " " + AccountCurr +"\nInitialLoss: " + initialLoss + " " + AccountCurr +"\nTotalLoss: " + totalLoss + " " + AccountCurr +"\nMaxRiskPerLife: " + maxRiskPerLife + " " + AccountCurr + "\nMaxRiskPerTrade: " + MaxRiskPerTrade +"%"); + + +double StopAmount = StoplossPips * LotSize * TickValue; + + string text ="Lot size for "+ MaxRiskPerTrade +"% = " + DoubleToString(LotSize,2) + " lot (" + NormalizeDouble(StopAmount, 2) + " " + AccountCurr + ")"; + string name = "Lot"; + string name2 = "risk"; + ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0); + //ObjectSetText(name,text, 36, "Corbel Bold", YellowGreen); + ObjectSetInteger(0,name, OBJPROP_CORNER, CORNER_RIGHT_UPPER); + ObjectSetInteger(0,name, OBJPROP_XDISTANCE, 550); + ObjectSetInteger(0,name, OBJPROP_YDISTANCE, 10); + ObjectSetString(0,name,OBJPROP_TEXT,text); + ObjectSetString(0,name,OBJPROP_FONT,"Arial"); + ObjectSetInteger(0,name,OBJPROP_FONTSIZE,14); + ObjectSetInteger(0,name,OBJPROP_COLOR,clrYellowGreen); + //LabelDelete(0, name); + } +//+------------------------------------------------------------------+ +//| ChartEvent function | +//+------------------------------------------------------------------+ +void OnChartEvent(const int id, // Event identifier + const long& lparam, // Event parameter of long type + const double& dparam, // Event parameter of double type + const string& sparam) // Event parameter of string type + { +//--- the object has been deleted + if(id==CHARTEVENT_OBJECT_DELETE) + { + Print("The object with name ",sparam," has been deleted"); + } +//--- the object has been created + if(id==CHARTEVENT_OBJECT_CREATE) + { + Print("The object with name ",sparam," has been created"); + } + +//--- the object has been moved or its anchor point coordinates has been changed + if(id==CHARTEVENT_OBJECT_DRAG) + { + price = ObjectGetDouble(0, sparam, OBJPROP_PRICE, 0); + Print("The anchor point coordinates of the object with name ",sparam," has been changed. Price ", price); + } + } + + +//Lot Size Calculator +void LotSizeCalculate(double stopLoss) + { + SymbolInfoTick(_Symbol,last_tick); + double SL=0; + double PriceAsk=last_tick.ask; + double PriceBid=last_tick.bid; + + if(stopLoss < PriceAsk) + { + SL = (PriceAsk-stopLoss)/_Point; + } + if(stopLoss > PriceAsk) + { + SL = (stopLoss-PriceBid)/_Point; + } + Print("Stop loss distance ", SL); + +//If the position size is dynamic + if(InpRiskDefaultSize==RISK_DEFAULT_AUTO) + { + //If the stop loss is not zero then calculate the lot size + if(SL!=0) + { + //Define the base for the risk calculation depending on the parameter chosen + if(InpRiskBase==RISK_BASE_BALANCE) + RiskBaseAmount=AccountInfoDouble(ACCOUNT_BALANCE); + if(InpRiskBase==RISK_BASE_EQUITY) + RiskBaseAmount=AccountInfoDouble(ACCOUNT_EQUITY); + if(InpRiskBase==RISK_BASE_FREEMARGIN) + RiskBaseAmount=AccountInfoDouble(ACCOUNT_FREEMARGIN); + if(InpRiskBase==RISK_BASE_INPUT) + RiskBaseAmount=InpBalance; + + //Calculate the Position Size + //Print("RiskBaseAmount ", RiskBaseAmount, " MaxRiskPerTrade ", InpMaxRiskPerTrade, "Stop loss ", SL, " TickValue ", TickValue); + + LotSize=((RiskBaseAmount*MaxRiskPerTrade/100)/(SL*TickValue)); + StoplossPips = SL; + + } + //If the stop loss is zero then the lot size is the default one + if(SL==0) + { + LotSize=InpDefaultLotSize; + } + } +//Normalize the Lot Size to satisfy the allowed lot increment and minimum and maximum position size + LotSize=MathFloor(LotSize/SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP); + +//Limit the lot size in case it is greater than the maximum allowed by the user + if(LotSize>InpMaxLotSize) + LotSize=InpMaxLotSize; +//Limit the lot size in case it is greater than the maximum allowed by the broker + if(LotSize>SymbolInfoDouble(Symb,SYMBOL_VOLUME_MAX)) + LotSize=SymbolInfoDouble(Symb,SYMBOL_VOLUME_MAX); + Print("Lot ", LotSize, " Max lot ", SymbolInfoDouble(Symb,SYMBOL_VOLUME_MAX)); +//If the lot size is too small then set it to 0 and don't trade + if(LotSize < SymbolInfoDouble(Symb,SYMBOL_VOLUME_MIN)) + { + LotSize=0; + Print("Lot size too small"); + } + } +//+------------------------------------------------------------------+ +//+------------------------------------------------------------------+ +//| Delete a text label | +//+------------------------------------------------------------------+ +bool LabelDelete(const long chart_ID=0, // chart's ID + const string name="Label") // label name + { +//--- reset the error value + ResetLastError(); +//--- delete the label + if(!ObjectDelete(chart_ID,name)) + { + Print(__FUNCTION__, + ": failed to delete a text label! Error code = ",GetLastError()); + return(false); + } +//--- successful execution + return(true); + } \ No newline at end of file