/* G e n e r a t e d by ex4-to-mq4 decompiler FREEWARE 4.0.509.5 Website: H t t P:// w W w.M Etaq UotE S .N ET E-mail : s upP o rT@ ME taQ UoT E s. NEt */ #property copyright "Extreme TMA System" #property link "http://www.forexfactory.com/showthread.php?t=343533m" #property indicator_chart_window #property indicator_buffers 6 #property indicator_color1 Magenta #property indicator_color2 DarkBlue #property indicator_color3 Green #property indicator_color4 Yellow #property indicator_color5 Aqua #property indicator_color6 White #property indicator_width1 1 #property indicator_width2 1 #property indicator_width3 2 #property indicator_width4 8 #property indicator_width5 8 #property indicator_width6 8 extern string TimeFrame = "Current"; extern int TMAPeriod = 300; extern int Price = 0; extern double ATRMultiplier = 9.0; extern int ATRPeriod = 500; extern double TrendThreshold = 0.1; extern bool ShowCenterLine = TRUE; extern bool alertsOn = FALSE; extern bool alertsMessage = FALSE; extern bool alertsSound = FALSE; extern bool alertsEmail = FALSE; extern bool MoveEndpointEveryTick = TRUE; extern int MaxBarsBack = 2000; extern int Symbol_1_Kod=217; extern int Symbol_2_Kod=218; extern int Symbol_3_Kod=217; extern color color1 = clrNONE; extern color color2 = Red; extern color color3 = clrNONE; extern color color4 = clrNONE; double ExtMapBuffer1[]; double ExtMapBuffer2[]; double MACD_Map[]; double SignalLine[]; double SignalLine2[]; double SignalMap2[]; double SignalMap[]; double G_ibuf_140[]; double G_ibuf_144[]; double G_ibuf_148[]; double G_ibuf_152[]; double G_ibuf_156[]; double G_ibuf_160[]; int G_timeframe_164; int Gi_168; bool Gi_172; datetime G_time_176; double Gd_180; bool G_bool_188; double Gd_192; double Gd_200; double Gd_208; double Gd_216; double Gd_224; double G_close_232 = 0.0; double Gd_240 = 0.0; double Gd_248 = 0.0; string Gsa_256[] = {"M1", "M5", "M15", "M30", "H1", "H4", "D1", "W1", "MN"}; int Gia_260[] = {1, 5, 15, 30, 60, 240, 1440, 10080, 43200}; int init() { G_bool_188 = MarketInfo(Symbol(), MODE_MARGINCALCMODE) == 0.0 && MarketInfo(Symbol(), MODE_PROFITCALCMODE) == 0.0 && Digits % 2 == 1; Gd_180 = MarketInfo(Symbol(), MODE_TICKSIZE); if (G_bool_188) Gd_180 = 10.0 * Gd_180; G_timeframe_164 = f0_7(TimeFrame); IndicatorBuffers(6); SetIndexBuffer(0, G_ibuf_140); SetIndexBuffer(2, G_ibuf_144); SetIndexBuffer(1, G_ibuf_148); SetIndexBuffer(3, G_ibuf_152); SetIndexBuffer(4, G_ibuf_156); SetIndexBuffer(5, G_ibuf_160); SetIndexStyle(2,DRAW_HISTOGRAM, 0, 2, color2); SetIndexBuffer(1, ExtMapBuffer1); SetIndexLabel(1, "FastTMA " + TimeFrame + " Upper line"); SetIndexLabel(2, "FastTMA " + TimeFrame + " Lower line"); SetIndexLabel(3, "FastTMA(" + TimeFrame + ")"); SetIndexLabel(4, "FastTMA(" + TimeFrame + ")"); SetIndexLabel(5, "FastTMA(" + TimeFrame + ")"); IndicatorShortName(f0_3(G_timeframe_164) + " TMA bands (" + TMAPeriod + ")"); Gd_192 = 0; for (int Li_0 = 1; Li_0 <= TMAPeriod; Li_0++) Gd_192 += Li_0; Gd_224 = TMAPeriod + 1 + 2.0 * Gd_192; Gd_200 = (TMAPeriod + 1) / (TMAPeriod + 1 + Gd_192); Gd_216 = Close[0]; if (Digits < 4) Gd_208 = 0.1; else Gd_208 = 0.001; Gi_168 = iBars(NULL, G_timeframe_164) - TMAPeriod - 1; return (0); } int deinit() { return (0); } int start() { int Li_16; double Ld_20; int Li_28; int Li_32; double Ld_36; double Ld_44; int Li_0 = IndicatorCounted(); if (Li_0 < 0) return (-1); if (Period() > G_timeframe_164) return (0); if (Bars - Li_0 == 1 && MathAbs(Close[0] - G_close_232) < Gd_208) { if (MoveEndpointEveryTick) { G_ibuf_140[0] = f0_0(G_ibuf_140[0]); G_ibuf_144[0] = G_ibuf_140[0] + Gd_240; G_ibuf_148[0] = G_ibuf_140[0] - Gd_240; f0_6(0, Gd_248); } else return (0); } else { G_close_232 = Close[0]; if (Li_0 > 0) Li_0--; Ld_20 = G_timeframe_164 / Period(); Li_16 = MathMin(Bars - 1, MaxBarsBack); Li_16 = MathMin(Li_16, Bars - Li_0 + TMAPeriod * Ld_20); Li_28 = 0; Li_32 = 999; Ld_36 = G_ibuf_140[Li_16 + 1]; Ld_44 = G_ibuf_140[Li_16 + 1]; for (int Li_4 = Li_16; Li_4 >= 0; Li_4--) { if (G_timeframe_164 == Period()) Li_28 = Li_4; else Li_28 = iBarShift(Symbol(), G_timeframe_164, Time[Li_4]); if (Li_28 <= Gi_168) { if (Li_28 == Li_32) { G_ibuf_140[Li_4] = G_ibuf_140[Li_4 + 1] + (Ld_44 - Ld_36) * (1 / Ld_20); G_ibuf_144[Li_4] = G_ibuf_140[Li_4] + Gd_240; G_ibuf_148[Li_4] = G_ibuf_140[Li_4] - Gd_240; f0_6(Li_4, Gd_248); continue; } Li_32 = Li_28; Ld_36 = Ld_44; Ld_44 = f0_4(Li_28); Gd_240 = iATR(NULL, G_timeframe_164, ATRPeriod, Li_28 + 10) * ATRMultiplier; if (Gd_240 == 0.0) Gd_240 = 1; if (Ld_20 > 1.0) G_ibuf_140[Li_4] = Ld_36 + (Ld_44 - Ld_36) * (1 / Ld_20); else G_ibuf_140[Li_4] = Ld_44; G_ibuf_144[Li_4] = G_ibuf_140[Li_4] + Gd_240; G_ibuf_148[Li_4] = G_ibuf_140[Li_4] - Gd_240; Gd_248 = (Ld_44 - Ld_36) / (Gd_240 / ATRMultiplier / 10.0); f0_6(Li_4, Gd_248); } } } f0_2(); return (0); } void f0_6(int Ai_0, double Ad_4) { G_ibuf_152[Ai_0] = EMPTY_VALUE; G_ibuf_156[Ai_0] = EMPTY_VALUE; G_ibuf_160[Ai_0] = EMPTY_VALUE; if (ShowCenterLine) { if (Ad_4 > TrendThreshold) { G_ibuf_152[Ai_0] = G_ibuf_140[Ai_0]; return; } if (Ad_4 < -1.0 * TrendThreshold) { G_ibuf_156[Ai_0] = G_ibuf_140[Ai_0]; return; } G_ibuf_160[Ai_0] = G_ibuf_140[Ai_0]; } } double f0_4(int Ai_0) { double Ld_ret_4; if (Ai_0 >= TMAPeriod) Ld_ret_4 = f0_8(Ai_0); else Ld_ret_4 = f0_1(Ai_0); return (Ld_ret_4); } double f0_8(int Ai_0) { int Li_4 = TMAPeriod + 1; double Ld_12 = 0; switch (Price) { case 0: Ld_12 = Li_4 * iClose(NULL, G_timeframe_164, Ai_0); break; case 1: Ld_12 = Li_4 * iOpen(NULL, G_timeframe_164, Ai_0); break; case 2: Ld_12 = Li_4 * iHigh(NULL, G_timeframe_164, Ai_0); break; case 3: Ld_12 = Li_4 * iLow(NULL, G_timeframe_164, Ai_0); break; case 4: Ld_12 = Li_4 * (iHigh(NULL, G_timeframe_164, Ai_0) + iLow(NULL, G_timeframe_164, Ai_0)) / 2.0; break; case 5: Ld_12 = Li_4 * (iHigh(NULL, G_timeframe_164, Ai_0) + iLow(NULL, G_timeframe_164, Ai_0) + iClose(NULL, G_timeframe_164, Ai_0)) / 3.0; break; case 6: Ld_12 = Li_4 * (iHigh(NULL, G_timeframe_164, Ai_0) + iLow(NULL, G_timeframe_164, Ai_0) + iClose(NULL, G_timeframe_164, Ai_0) + iClose(NULL, G_timeframe_164, Ai_0)) / 4.0; break; default: Ld_12 = Li_4 * iClose(NULL, G_timeframe_164, Ai_0); } for (int Li_8 = 1; Li_8 <= TMAPeriod; Li_8++) { switch (Price) { case 0: Ld_12 += (Li_4 - Li_8) * (iClose(NULL, G_timeframe_164, Ai_0 + Li_8) + iClose(NULL, G_timeframe_164, Ai_0 - Li_8)); break; case 1: Ld_12 += (Li_4 - Li_8) * (iOpen(NULL, G_timeframe_164, Ai_0 + Li_8) + iOpen(NULL, G_timeframe_164, Ai_0 - Li_8)); break; case 2: Ld_12 += (Li_4 - Li_8) * (iHigh(NULL, G_timeframe_164, Ai_0 + Li_8) + iHigh(NULL, G_timeframe_164, Ai_0 - Li_8)); break; case 3: Ld_12 += (Li_4 - Li_8) * (iLow(NULL, G_timeframe_164, Ai_0 + Li_8) + iLow(NULL, G_timeframe_164, Ai_0 - Li_8)); break; case 4: Ld_12 += (Li_4 - Li_8) * ((iHigh(NULL, G_timeframe_164, Ai_0 + Li_8) + iLow(NULL, G_timeframe_164, Ai_0 + Li_8)) / 2.0 + (iHigh(NULL, G_timeframe_164, Ai_0 - Li_8) + iLow(NULL, G_timeframe_164, Ai_0 - Li_8)) / 2.0); break; case 5: Ld_12 += (Li_4 - Li_8) * ((iHigh(NULL, G_timeframe_164, Ai_0 + Li_8) + iLow(NULL, G_timeframe_164, Ai_0 + Li_8) + iClose(NULL, G_timeframe_164, Ai_0 + Li_8)) / 3.0 + (iHigh(NULL, G_timeframe_164, Ai_0 - Li_8) + iLow(NULL, G_timeframe_164, Ai_0 - Li_8) + iClose(NULL, G_timeframe_164, Ai_0 - Li_8)) / 3.0); break; case 6: Ld_12 += (Li_4 - Li_8) * ((iHigh(NULL, G_timeframe_164, Ai_0 + Li_8) + iLow(NULL, G_timeframe_164, Ai_0 + Li_8) + iClose(NULL, G_timeframe_164, Ai_0 + Li_8) + iClose(NULL, G_timeframe_164, Ai_0 + Li_8)) / 4.0 + (iHigh(NULL, G_timeframe_164, Ai_0 - Li_8) + iLow(NULL, G_timeframe_164, Ai_0 - Li_8) + iClose(NULL, G_timeframe_164, Ai_0 - Li_8) + iClose(NULL, G_timeframe_164, Ai_0 - Li_8)) / 4.0); break; default: Ld_12 += (Li_4 - Li_8) * (iClose(NULL, G_timeframe_164, Ai_0 + Li_8) + iClose(NULL, G_timeframe_164, Ai_0 - Li_8)); } } return (Ld_12 / Gd_224); } double f0_1(int Ai_0) { double Ld_4 = 0; int Li_24 = TMAPeriod + 1; double Ld_12 = 0; for (int Li_20 = 0; Li_20 <= TMAPeriod; Li_20++) { switch (Price) { case 0: Ld_4 += (Li_24 - Li_20) * iClose(NULL, G_timeframe_164, Ai_0 + Li_20); Ld_12 += Li_24 - Li_20; break; case 1: Ld_4 += (Li_24 - Li_20) * iOpen(NULL, G_timeframe_164, Ai_0 + Li_20); Ld_12 += Li_24 - Li_20; break; case 2: Ld_4 += (Li_24 - Li_20) * iHigh(NULL, G_timeframe_164, Ai_0 + Li_20); Ld_12 += Li_24 - Li_20; break; case 3: Ld_4 += (Li_24 - Li_20) * iLow(NULL, G_timeframe_164, Ai_0 + Li_20); Ld_12 += Li_24 - Li_20; break; case 4: Ld_4 += (Li_24 - Li_20) * ((iHigh(NULL, G_timeframe_164, Ai_0 + Li_20) + iLow(NULL, G_timeframe_164, Ai_0 + Li_20)) / 2.0); Ld_12 += Li_24 - Li_20; break; case 5: Ld_4 += (Li_24 - Li_20) * ((iHigh(NULL, G_timeframe_164, Ai_0 + Li_20) + iLow(NULL, G_timeframe_164, Ai_0 + Li_20) + iClose(NULL, G_timeframe_164, Ai_0 + Li_20)) / 3.0); Ld_12 += Li_24 - Li_20; break; case 6: Ld_4 += (Li_24 - Li_20) * ((iHigh(NULL, G_timeframe_164, Ai_0 + Li_20) + iLow(NULL, G_timeframe_164, Ai_0 + Li_20) + iClose(NULL, G_timeframe_164, Ai_0 + Li_20) + iClose(NULL, G_timeframe_164, Ai_0 + Li_20)) / 4.0); Ld_12 += Li_24 - Li_20; break; default: Ld_4 += (Li_24 - Li_20) * iClose(NULL, G_timeframe_164, Ai_0 + Li_20); Ld_12 += Li_24 - Li_20; } } Li_24 = TMAPeriod; for (Li_20 = Ai_0 - 1; Li_20 >= 0; Li_20--) { switch (Price) { case 0: Ld_4 += Li_24 * iClose(NULL, G_timeframe_164, Li_20); Ld_12 += Li_24; break; case 1: Ld_4 += Li_24 * iOpen(NULL, G_timeframe_164, Li_20); Ld_12 += Li_24; break; case 2: Ld_4 += Li_24 * iHigh(NULL, G_timeframe_164, Li_20); Ld_12 += Li_24; break; case 3: Ld_4 += Li_24 * iLow(NULL, G_timeframe_164, Li_20); Ld_12 += Li_24; break; case 4: Ld_4 += Li_24 * ((iHigh(NULL, G_timeframe_164, Li_20) + iLow(NULL, G_timeframe_164, Li_20)) / 2.0); Ld_12 += Li_24; break; case 5: Ld_4 += Li_24 * ((iHigh(NULL, G_timeframe_164, Li_20) + iLow(NULL, G_timeframe_164, Li_20) + iClose(NULL, G_timeframe_164, Li_20)) / 3.0); Ld_12 += Li_24; break; case 6: Ld_4 += Li_24 * ((iHigh(NULL, G_timeframe_164, Li_20) + iLow(NULL, G_timeframe_164, Li_20) + iClose(NULL, G_timeframe_164, Li_20) + iClose(NULL, G_timeframe_164, Li_20)) / 4.0); Ld_12 += Li_24; break; default: Ld_4 += Li_24 * iClose(NULL, G_timeframe_164, Li_20); Ld_12 += Li_24; } Li_24--; } switch (Price) { case 0: Gd_216 = Close[0]; break; case 1: Gd_216 = Open[0]; break; case 2: Gd_216 = High[0]; break; case 3: Gd_216 = Low[0]; break; case 4: Gd_216 = (High[0] + Low[0]) / 2.0; break; case 5: Gd_216 = (High[0] + Low[0] + Close[0]) / 3.0; break; case 6: Gd_216 = (High[0] + Low[0] + Close[0] + Close[0]) / 4.0; break; default: Gd_216 = Close[0]; } return (Ld_4 / Ld_12); } double f0_0(double Ad_0) { double Ld_ret_8; switch (Price) { case 0: Ld_ret_8 = Ad_0 + (Close[0] - Gd_216) * Gd_200; Gd_216 = Close[0]; break; case 1: Ld_ret_8 = Ad_0 + (Open[0] - Gd_216) * Gd_200; Gd_216 = Open[0]; break; case 2: Ld_ret_8 = Ad_0 + (High[0] - Gd_216) * Gd_200; Gd_216 = High[0]; break; case 3: Ld_ret_8 = Ad_0 + (Low[0] - Gd_216) * Gd_200; Gd_216 = Low[0]; break; case 4: Ld_ret_8 = Ad_0 + ((High[0] + Low[0]) / 2.0 - Gd_216) * Gd_200; Gd_216 = (High[0] + Low[0]) / 2.0; break; case 5: Ld_ret_8 = Ad_0 + ((High[0] + Low[0] + Close[0]) / 3.0 - Gd_216) * Gd_200; Gd_216 = (High[0] + Low[0] + Close[0]) / 3.0; break; case 6: Ld_ret_8 = Ad_0 + ((High[0] + Low[0] + Close[0] + Close[0]) / 4.0 - Gd_216) * Gd_200; Gd_216 = (High[0] + Low[0] + Close[0] + Close[0]) / 4.0; break; default: Ld_ret_8 = Ad_0 + (Close[0] - Gd_216) * Gd_200; Gd_216 = Close[0]; } return (Ld_ret_8); } void f0_2() { int Li_0; if (alertsOn) { if (Close[0] > G_ibuf_144[0]) Li_0 = 1; else { if (Close[0] < G_ibuf_148[0]) Li_0 = -1; else Gi_172 = FALSE; } if ((!Gi_172) && G_time_176 != Time[0]) { if (Li_0 == 1) f0_9("up"); if (Li_0 == -1) f0_9("down"); } } } void f0_9(string As_0) { string str_concat_8; if (Gi_172 == FALSE) { Gi_172 = TRUE; G_time_176 = Time[0]; str_concat_8 = StringConcatenate(Symbol(), " at ", TimeToStr(TimeLocal(), TIME_SECONDS), " " + f0_3(G_timeframe_164) + " TMA bands price penetrated ", As_0, " band"); if (alertsMessage) Alert(str_concat_8); if (alertsEmail) SendMail(StringConcatenate(Symbol(), "TMA bands "), str_concat_8); if (alertsSound) PlaySound("alert2.wav"); } } int f0_7(string As_0) { As_0 = f0_5(As_0); for (int Li_8 = ArraySize(Gia_260) - 1; Li_8 >= 0; Li_8--) if (As_0 == Gsa_256[Li_8] || As_0 == "" + Gia_260[Li_8]) return (Gia_260[Li_8]); return (Period()); } string f0_3(int Ai_0) { for (int Li_4 = ArraySize(Gia_260) - 1; Li_4 >= 0; Li_4--) if (Ai_0 == Gia_260[Li_4]) return (Gsa_256[Li_4]); return (""); } string f0_5(string As_0) { int Li_20; string Ls_ret_8 = As_0; for (int Li_16 = StringLen(As_0) - 1; Li_16 >= 0; Li_16--) { Li_20 = StringGetChar(Ls_ret_8, Li_16); if ((Li_20 > '`' && Li_20 < '{') || (Li_20 > 'Я' && Li_20 < 256)) Ls_ret_8 = StringSetChar(Ls_ret_8, Li_16, Li_20 - 32); else if (Li_20 > -33 && Li_20 < 0) Ls_ret_8 = StringSetChar(Ls_ret_8, Li_16, Li_20 + 224); } return (Ls_ret_8); }