#property copyright "Copyright © 2009, Stratman - Forex Factory" #property link "http://www.forexfactory.com/member.php?u=108824" #property indicator_chart_window extern string Heading_SingleMode = "## Single Mode Parameters ##"; extern string Comment_TimeFrame = " - MN1,W1,D1,H4,H1,M30,M15,etc -"; extern string TimeFrame = "H4"; extern string Comment_Corner = " - TopLeft=0,TR=1,BL=2,BR=3 -"; extern int Corner = 1; extern string Heading_ChartParam = "## Chart Parameters ##"; extern bool SimulationMode = FALSE; extern bool MultiMode = TRUE; extern bool CandleMode = TRUE; extern color BullColor = Green; extern color BearColor = FireBrick; extern color WickColor = DimGray; extern color HeadingColor = DimGray; extern color ScaleColor = DimGray; extern string Comment_Positioning = " - Positioning (in Pixels) -"; extern int WindowNumber = 0; extern int CornerX = 10; extern int CornerY = 105; extern int Width = 150; extern int Height = 120; extern int HeadingX = 120; extern int HeadingY = 4; extern int ScaleStartY = 20; extern int BarSpacingX = 7; extern string Heading_MA = " - Moving Average -"; extern string Comment_MA = " - MAMethod = SMA, EMA, or LWMA"; extern bool MAMode = TRUE; extern int MAPeriod = 60; extern string MAMethod = "LWMA"; extern color MAColor = Yellow; extern bool MAMode1 = TRUE; extern int MAPeriod1 = 5; extern string MAMethod1 = "EMA"; extern color MAColor1 = clrRed; extern bool MAMode2 = TRUE; extern int MAPeriod2 = 21; extern string MAMethod2 = "EMA"; extern color MAColor2 = clrDodgerBlue; extern string Comment_Fonts = " - Font Parameters -"; extern string HeadingFontName = "Verdana"; extern int HeadingFontSize = 10; extern string Heading_MultiMode = "## MultiMode Parameters ##"; extern int Columns = 1; extern int Rows = 4; extern int SpacingColumns = 20; extern int SpacingRows = 4; extern string Comment_Symbols = " - to use chart Symbol() -"; extern string Comment_Symbols1 = " - leave Symbol## blank. -"; extern string Comment_TimeFrames = " - Valid TimeFrame Values: -"; extern string Comment_TimeFrames1 = " - MN1,W1,D1,H4,H1,M30,M15,etc -"; extern string Comment_TimeFrames2 = " - Leave Blank for no chart -"; extern string Symbol01 = ""; extern string TimeFrame01 = "M15"; extern string Symbol02 = ""; extern string TimeFrame02 = "H1"; extern string Symbol03 = ""; extern string TimeFrame03 = "H4"; extern string Symbol04 = ""; extern string TimeFrame04 = ""; extern string Symbol05 = ""; extern string TimeFrame05 = ""; extern string Symbol06 = ""; extern string TimeFrame06 = ""; extern string Symbol07 = ""; extern string TimeFrame07 = ""; extern string Symbol08 = ""; extern string TimeFrame08 = ""; extern string Symbol09 = ""; extern string TimeFrame09 = ""; extern string Symbol10 = ""; extern string TimeFrame10 = ""; extern string Symbol11 = ""; extern string TimeFrame11 = ""; extern string Symbol12 = ""; extern string TimeFrame12 = ""; extern string Symbol13 = ""; extern string TimeFrame13 = ""; extern string Symbol14 = ""; extern string TimeFrame14 = ""; extern string Symbol15 = ""; extern string TimeFrame15 = ""; extern string Symbol16 = ""; extern string TimeFrame16 = ""; extern string Symbol17 = ""; extern string TimeFrame17 = ""; extern string Symbol18 = ""; extern string TimeFrame18 = ""; extern string Symbol19 = ""; extern string TimeFrame19 = ""; extern string Symbol20 = ""; extern string TimeFrame20 = ""; extern string Symbol21 = ""; extern string TimeFrame21 = ""; extern string Symbol22 = ""; extern string TimeFrame22 = ""; extern string Symbol23 = ""; extern string TimeFrame23 = ""; extern string Symbol24 = ""; extern string TimeFrame24 = ""; extern string Symbol25 = ""; extern string TimeFrame25 = ""; extern string Symbol26 = ""; extern string TimeFrame26 = ""; extern string Symbol27 = ""; extern string TimeFrame27 = ""; extern string Symbol28 = ""; extern string TimeFrame28 = ""; extern string Symbol29 = ""; extern string TimeFrame29 = ""; extern string Symbol30 = ""; extern string TimeFrame30 = ""; int Gi_796 = 0; string Gs_800 = "SMMC_"; string Gs_808 = "."; string Gs_verdana_816 = "Verdana"; int Gi_824 = 10; int Gia_828[4] = {-2, 3, -2, 3}; int Gia_832[4] = {-11, -11, 5, 5}; string Gs_836 = "-"; int Gi_844 = 10; int Gia_848[4] = {-2, 5, -2, 5}; int Gia_852[4] = {-8, -8, 8, 8}; string Gs_stratman_856 = "Stratman"; int Gi_864 = 12; string Gsa_868[3][16] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v"}; int Gia_872[3][16][4] = {-3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 3, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -2, 4, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5, -1, 5}; int Gia_876[3][16][4] = {-15, -15, 1, 1, -14, -14, 2, 2, -13, -13, 3, 3, -12, -12, 4, 4, -11, -11, 5, 5, -10, -10, 6, 6, -9, -9, 7, 7, -8, -8, 8, 8, -7, -7, 9, 9, -6, -6, 10, 10, -5, -5, 11, 11, -4, -4, 12, 12, -3, -3, 13, 13, -2, -2, 14, 14, -1, -1, 15, 15, 0, 0, 16, 16, -15, -15, 1, 1, -14, -14, 2, 2, -13, -13, 3, 3, -12, -12, 4, 4, -11, -11, 5, 5, -10, -10, 6, 6, -9, -9, 7, 7, -8, -8, 8, 8, -7, -7, 9, 9, -6, -6, 10, 10, -5, -5, 11, 11, -4, -4, 12, 12, -3, -3, 13, 13, -2, -2, 14, 14, -1, -1, 15, 15, 0, 0, 16, 16, -15, -15, 1, 1, -14, -14, 2, 2, -13, -13, 3, 3, -12, -12, 4, 4, -11, -11, 5, 5, -10, -10, 6, 6, -9, -9, 7, 7, -8, -8, 8, 8, -7, -7, 9, 9, -6, -6, 10, 10, -5, -5, 11, 11, -4, -4, 12, 12, -3, -3, 13, 13, -2, -2, 14, 14, -1, -1, 15, 15, 0, 0, 16, 16}; int Gia_880[31]; int Gia_884[31]; double Gda_888[31]; int Gia_892[31]; int Gia_896[31]; double Gda_900[31]; double Gda_904[31]; string Gsa_908[31]; string Gsa_912[31]; string Gsa_916[31]; int Gia_920[31]; int Gia_924[31]; bool Gi_928; int Gia_932[]; double Gda_936[]; double Gda_940[]; double Gda_944[]; double Gda_948[]; int Gi_952; int ma2m; int ma3m; int init() { Gi_952 = MAMethodFromString(MAMethod); ma2m = MAMethodFromString(MAMethod1); ma3m = MAMethodFromString(MAMethod2); Gi_796 = Width / BarSpacingX - 2; ObjectDeleteByPrefix(Gs_800, WindowNumber); if (!MultiMode) { Gsa_908[0] = Symbol(); Gsa_912[0] = TimeFrame; Gia_920[0] = ChartX(0); Gia_924[0] = ChartY(0); Gda_904[0] = MarketInfo(Gsa_908[0], MODE_POINT); Gsa_916[0] = Gs_800 + Gsa_908[0] + Gsa_912[0] + "_"; Gia_884[0] = TimePeriodFromString(Gsa_912[0]); MakeHeading(0); if (IsChartCreatable(0)) Reset(0); } else { for (int Li_0 = 1; Li_0 <= 30; Li_0++) Gsa_908[Li_0] = Symbol(); if (Symbol01 != "") Gsa_908[1] = Symbol01; if (Symbol02 != "") Gsa_908[2] = Symbol02; if (Symbol03 != "") Gsa_908[3] = Symbol03; if (Symbol04 != "") Gsa_908[4] = Symbol04; if (Symbol05 != "") Gsa_908[5] = Symbol05; if (Symbol06 != "") Gsa_908[6] = Symbol06; if (Symbol07 != "") Gsa_908[7] = Symbol07; if (Symbol08 != "") Gsa_908[8] = Symbol08; if (Symbol09 != "") Gsa_908[9] = Symbol09; if (Symbol10 != "") Gsa_908[10] = Symbol10; if (Symbol11 != "") Gsa_908[11] = Symbol11; if (Symbol12 != "") Gsa_908[12] = Symbol12; if (Symbol13 != "") Gsa_908[13] = Symbol13; if (Symbol14 != "") Gsa_908[14] = Symbol14; if (Symbol15 != "") Gsa_908[15] = Symbol15; if (Symbol16 != "") Gsa_908[16] = Symbol16; if (Symbol17 != "") Gsa_908[17] = Symbol17; if (Symbol18 != "") Gsa_908[18] = Symbol18; if (Symbol19 != "") Gsa_908[19] = Symbol19; if (Symbol20 != "") Gsa_908[20] = Symbol20; if (Symbol21 != "") Gsa_908[21] = Symbol21; if (Symbol22 != "") Gsa_908[22] = Symbol22; if (Symbol23 != "") Gsa_908[23] = Symbol23; if (Symbol24 != "") Gsa_908[24] = Symbol24; if (Symbol25 != "") Gsa_908[25] = Symbol25; if (Symbol26 != "") Gsa_908[26] = Symbol26; if (Symbol27 != "") Gsa_908[27] = Symbol27; if (Symbol28 != "") Gsa_908[28] = Symbol28; if (Symbol29 != "") Gsa_908[29] = Symbol29; if (Symbol30 != "") Gsa_908[30] = Symbol30; Gsa_912[1] = TimeFrame01; Gsa_912[2] = TimeFrame02; Gsa_912[3] = TimeFrame03; Gsa_912[4] = TimeFrame04; Gsa_912[5] = TimeFrame05; Gsa_912[6] = TimeFrame06; Gsa_912[7] = TimeFrame07; Gsa_912[8] = TimeFrame08; Gsa_912[9] = TimeFrame09; Gsa_912[10] = TimeFrame10; Gsa_912[11] = TimeFrame11; Gsa_912[12] = TimeFrame12; Gsa_912[13] = TimeFrame13; Gsa_912[14] = TimeFrame14; Gsa_912[15] = TimeFrame15; Gsa_912[16] = TimeFrame16; Gsa_912[17] = TimeFrame17; Gsa_912[18] = TimeFrame18; Gsa_912[19] = TimeFrame19; Gsa_912[20] = TimeFrame20; Gsa_912[21] = TimeFrame21; Gsa_912[22] = TimeFrame22; Gsa_912[23] = TimeFrame23; Gsa_912[24] = TimeFrame24; Gsa_912[25] = TimeFrame25; Gsa_912[26] = TimeFrame26; Gsa_912[27] = TimeFrame27; Gsa_912[28] = TimeFrame28; Gsa_912[29] = TimeFrame29; Gsa_912[30] = TimeFrame30; for (Li_0 = 1; Li_0 <= 30; Li_0++) { if (Gsa_912[Li_0] != "") { Gia_920[Li_0] = ChartX(Li_0); Gia_924[Li_0] = ChartY(Li_0); Gda_904[Li_0] = MarketInfo(Gsa_908[Li_0], MODE_POINT); Gsa_916[Li_0] = Gs_800 + Gsa_908[Li_0] + Gsa_912[Li_0] + "_"; Gia_884[Li_0] = TimePeriodFromString(Gsa_912[Li_0]); MakeHeading(Li_0); if (IsChartCreatable(Li_0)) Reset(Li_0); } } } return (0); } int deinit() { ObjectDeleteByPrefix(Gs_800, WindowNumber); return (0); } int start() { if (!MultiMode) { if (Gia_880[0] != smTime(0, 0)) Reset(0); Update(0); } else { for (int Li_0 = 1; Li_0 <= 30; Li_0++) { if (Gsa_912[Li_0] != "") { if ((!SimulationMode) || (SimulationMode && Gsa_908[Li_0] == Symbol() && Gia_884[Li_0] >= Period() && Gia_884[Li_0] <= 1440)) { if (IsNewBar(Li_0)) Reset(Li_0); Update(Li_0); } } } } return (0); } int BarColor(double Ad_0, double Ad_8) { if (Ad_0 == Ad_8) return (WickColor); if (Ad_0 < Ad_8) return (BullColor); return (BearColor); } int ChartX(int Ai_0) { int Li_ret_4; if (Ai_0 == 0) Li_ret_4 = CornerX; else Li_ret_4 = CornerX + (Ai_0 - 1) % Columns * (SpacingColumns + Width); return (Li_ret_4); } int ChartY(int Ai_0) { int Li_ret_4; if (Ai_0 == 0) Li_ret_4 = CornerY; else Li_ret_4 = CornerY + (Ai_0 - 1) / Columns * (SpacingRows + Height); return (Li_ret_4); } int IsChartCreatable(int Ai_0) { if ((!SimulationMode) || (SimulationMode && Gsa_908[Ai_0] == Symbol() && Gia_884[Ai_0] >= Period() && Gia_884[Ai_0] <= 1440)) return (1); return (0); } void MakeBar(int Ai_0, string As_4, int Ai_12, int Ai_16, int Ai_20, int Ai_24, int Ai_28, int Ai_32) { MakeVerticalLine(Ai_0, As_4 + "Bar_", Ai_12, Ai_20, Ai_24, Ai_32, 0); MakeVerticalLine(Ai_0, As_4 + "Open_", Ai_12 - 1, Ai_16, Ai_16, Ai_32, 1); MakeVerticalLine(Ai_0, As_4 + "Close_", Ai_12 + 1, Ai_28, Ai_28, Ai_32, 1); } void MakeCandle(int Ai_0, string As_4, int Ai_12, int Ai_16, int Ai_20, int Ai_24, int Ai_28, int Ai_32, int Ai_36) { int Li_40; int Li_44; int Li_48; int Li_52; OHLCSortedY(Ai_16, Ai_20, Ai_24, Ai_28, Li_40, Li_44, Li_48, Li_52); if (Li_44 - Li_40 >= 1) MakeVerticalLine(Ai_0, As_4 + "TopWick_", Ai_12, Li_40 - 1, Li_44, Ai_36, 0); if (Li_52 - Li_48 >= 1) MakeVerticalLine(Ai_0, As_4 + "BottomWick_", Ai_12, Li_48 + 1, Li_52, Ai_36, 0); MakeVerticalLine(Ai_0, As_4 + "Body_", Ai_12, Li_44, Li_48, Ai_32, 2); } void MakeHeading(int Ai_0) { string Ls_4 = Gs_800 + "_Chart_" + DoubleToStr(Ai_0, 0); string Ls_12 = Gsa_908[Ai_0] + " " + Gsa_912[Ai_0]; if (SimulationMode) { if (!iFunctionUseable(Ai_0)) { if (IsChartCreatable(Ai_0)) Ls_12 = Ls_12 + " (Sim)"; else Ls_12 = Ls_12 + " (Cant Sim)"; } } ObjectMakeLabel(Ai_0, Ls_4, Ls_12, HeadingX, HeadingY, HeadingFontName, HeadingFontSize, HeadingColor); } void MakeMAMark(int Ai_0, string As_4, int Ai_12, int Ai_16, int Ai_20) { MakeVerticalLine(Ai_0, As_4 + "MA_", Ai_12 - 1, Ai_16, Ai_16, Ai_20, 1); } void MakeMAMark1(int Ai_0, string As_4, int Ai_12, int Ai_16, int Ai_20) { MakeVerticalLine(Ai_0, As_4 + "MA1_", Ai_12 - 1, Ai_16, Ai_16, Ai_20, 1); } void MakeMAMark2(int Ai_0, string As_4, int Ai_12, int Ai_16, int Ai_20) { MakeVerticalLine(Ai_0, As_4 + "MA2_", Ai_12 - 1, Ai_16, Ai_16, Ai_20, 1); } void MakeScale(int Ai_0, double Ad_4) { string Ls_12 = ""; int count_20 = 0; if (Ad_4 > 3.0) { for (int Li_24 = ScaleStartY; Li_24 < Height; Li_24 += MathRound(Ad_4)) { Ls_12 = Gsa_916[Ai_0] + "ScalePip" + DoubleToStr(count_20, 0); if (count_20 % 10 == 0) ObjectMakeLabel(Ai_0, Ls_12, Gs_836, Gia_848[Corner], Li_24 + Gia_852[Corner], Gs_verdana_816, Gi_844, ScaleColor); else ObjectMakeLabel(Ai_0, Ls_12, Gs_808, Gia_828[Corner], Li_24 + Gia_832[Corner], Gs_verdana_816, Gi_824, ScaleColor); count_20++; } } else { if (10.0 * Ad_4 > 1.0) { for (Li_24 = ScaleStartY; Li_24 < Height; Li_24 += MathRound(10.0 * Ad_4)) { Ls_12 = Gsa_916[Ai_0] + "ScalePip" + DoubleToStr(count_20, 0); ObjectMakeLabel(Ai_0, Ls_12, Gs_836, Gia_848[Corner], Li_24 + Gia_852[Corner], Gs_verdana_816, Gi_844, ScaleColor); count_20++; } } } } void MakeVerticalLine(int Ai_0, string As_4, int Ai_12, int Ai_16, int Ai_20, int Ai_24, int Ai_28) { int Li_32 = Ai_16; int Li_36 = Ai_20 - Ai_16 + 1; int Li_40 = Li_36; int count_44 = 0; if (Li_36 >= 16) { Li_40 = 16; for (Li_32 = Ai_16; Li_32 <= Ai_20 - Li_40 + 1; Li_32 += Li_40) { ObjectMakeLabel(Ai_0, As_4 + DoubleToStr(count_44, 0), Gsa_868[Ai_28][Li_40 - 1], Ai_12 + Gia_872[Ai_28][Li_40 - 1][Corner] - Ai_28, Li_32 + Gia_876[Ai_28][Li_40 - 1][Corner], Gs_stratman_856, Gi_864, Ai_24); count_44++; } Li_40 = Li_36 % 16; } if (Li_40 > 0) { ObjectMakeLabel(Ai_0, As_4 + DoubleToStr(count_44, 0), Gsa_868[Ai_28][Li_40 - 1], Ai_12 + Gia_872[Ai_28][Li_40 - 1][Corner] - Ai_28, Li_32 + Gia_876[Ai_28][Li_40 - 1][Corner], Gs_stratman_856, Gi_864, Ai_24); } } int MAMethodFromString(string As_0) { int Li_ret_8 = 0; if (As_0 == "SMA") Li_ret_8 = 0; if (As_0 == "EMA") Li_ret_8 = 1; if (As_0 == "LWMA") Li_ret_8 = 3; return (Li_ret_8); } void ObjectDeleteByPrefix(string As_0, int Ai_8) { string Lsa_12[]; string name_20; int Li_28; ArrayResize(Lsa_12, ObjectsTotal()); int str_len_32 = StringLen(As_0); for (int Li_16 = 0; Li_16 < ObjectsTotal(); Li_16++) { name_20 = ObjectName(Li_16); if (StringLen(name_20) > str_len_32 && StringSubstr(name_20, 0, str_len_32) == As_0 && ObjectFind(name_20) == Ai_8) { Lsa_12[Li_28] = name_20; Li_28++; } } for (Li_16 = 0; Li_16 < Li_28; Li_16++) ObjectDelete(Lsa_12[Li_16]); } void ObjectMakeLabel(int Ai_0, string A_name_4, string A_text_12, int Ai_20, int Ai_24, string A_fontname_28, int A_fontsize_36, color A_color_40) { ObjectCreate(A_name_4, OBJ_LABEL, WindowNumber, 0, 0); ObjectSetText(A_name_4, A_text_12, A_fontsize_36, A_fontname_28, A_color_40); ObjectSet(A_name_4, OBJPROP_CORNER, Corner); ObjectSet(A_name_4, OBJPROP_XDISTANCE, PixelX(Ai_0, Ai_20)); ObjectSet(A_name_4, OBJPROP_YDISTANCE, PixelY(Ai_0, Ai_24)); } void OHLCSortedY(int Ai_0, int Ai_4, int Ai_8, int Ai_12, int &Ai_16, int &Ai_20, int &Ai_24, int &Ai_28) { Ai_16 = Ai_4; if (Ai_0 < Ai_12) { Ai_20 = Ai_0; Ai_24 = Ai_12; } else { Ai_20 = Ai_12; Ai_24 = Ai_0; } Ai_28 = Ai_8; } int PixelX(int Ai_0, int Ai_4) { int Li_ret_8 = 0; switch (Corner) { case 0: Li_ret_8 = Gia_920[Ai_0] + Ai_4; break; case 1: Li_ret_8 = Gia_920[Ai_0] + Width - Ai_4; break; case 2: Li_ret_8 = Gia_920[Ai_0] + Ai_4; break; case 3: Li_ret_8 = Gia_920[Ai_0] + Width - Ai_4; } return (Li_ret_8); } int PixelY(int Ai_0, int Ai_4) { int Li_ret_8 = 0; switch (Corner) { case 0: Li_ret_8 = Gia_924[Ai_0] + Ai_4; break; case 1: Li_ret_8 = Gia_924[Ai_0] + Ai_4; break; case 2: Li_ret_8 = Gia_924[Ai_0] + Height - Ai_4; break; case 3: Li_ret_8 = Gia_924[Ai_0] + Height - Ai_4; } return (Li_ret_8); } void Reset(int Ai_0) { int Li_4; int Li_12; double Ld_20; double Ld_28; double Ld_36; double Ld_44; double Ld_52; double Ld_60; double Ld_68; int Li_76; int Li_80; int Li_84; int Li_88; int color_92; int color_96; bool Li_100; int Li_104; double Ld_108; string Ls_116; double Ld_128; int Li_136; if (BuildArrays(Ai_0)) { Gi_928 = TRUE; Gia_880[Ai_0] = smTime(Ai_0, 0); color_96 = WickColor; Li_12 = Width / 2; Gia_896[Ai_0] = ScaleStartY + (Height - ScaleStartY) / 2; Ld_20 = smHigh(Ai_0, smHighest(Ai_0, Gi_796, 0)); Ld_28 = smLow(Ai_0, smLowest(Ai_0, Gi_796, 0)); Ld_36 = Ld_20 - Ld_28; Gda_888[Ai_0] = Ld_28 + Ld_36 / 2.0; Li_100 = Gi_796 % 2; if (Li_100) Li_104 = MathFloor(Gi_796 / 2.0) + 1.0; else { Li_104 = Gi_796 / 2 - 1; Li_12 += BarSpacingX + BarSpacingX / 2; } Gia_892[Ai_0] = Li_12 + Li_104 * BarSpacingX; Ld_108 = (Height - ScaleStartY) / (Ld_36 / Gda_904[Ai_0] / 10.0); Gda_900[Ai_0] = Ld_108 / 10.0; ObjectDeleteByPrefix(Gsa_916[Ai_0], WindowNumber); MakeScale(Ai_0, Ld_108); for (int Li_124 = Gi_796 - 1; Li_124 >= 1; Li_124--) { Li_4 = Li_12 + (Li_104 - Li_124) * BarSpacingX; Ld_44 = smOpen(Ai_0, Li_124); Ld_52 = smHigh(Ai_0, Li_124); Ld_68 = smLow(Ai_0, Li_124); Ld_60 = smClose(Ai_0, Li_124); Li_76 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_44 - Gda_888[Ai_0]) / Gda_904[Ai_0]); Li_80 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_52 - Gda_888[Ai_0]) / Gda_904[Ai_0]); Li_88 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_68 - Gda_888[Ai_0]) / Gda_904[Ai_0]); Li_84 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_60 - Gda_888[Ai_0]) / Gda_904[Ai_0]); color_92 = BarColor(Ld_44, Ld_60); if (WickColor == CLR_NONE) color_96 = color_92; Ls_116 = Gsa_916[Ai_0] + "Bar_" + DoubleToStr(Li_124, 0) + "_"; if (CandleMode) MakeCandle(Ai_0, Ls_116, Li_4, Li_76, Li_80, Li_88, Li_84, color_92, color_96); else MakeBar(Ai_0, Ls_116, Li_4, Li_76, Li_80, Li_88, Li_84, color_92); if (MAMode) { if (Gia_884[Ai_0] <= 15) Ld_128 = smMA(Ai_0, Li_124, Gi_952, MAPeriod); else Ld_128 = smMA(Ai_0, Li_124, MODE_EMA, MAPeriod); Li_136 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_128 - Gda_888[Ai_0]) / Gda_904[Ai_0]); if (Li_136 >= 0 && Li_136 <= Height) MakeMAMark(Ai_0, Ls_116, Li_4, Li_136, MAColor); } if (MAMode1) { if (Gia_884[Ai_0] <= 15) Ld_128 = smMA(Ai_0, Li_124, ma2m, MAPeriod1); else Ld_128 = smMA(Ai_0, Li_124, MODE_EMA, MAPeriod1); Li_136 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_128 - Gda_888[Ai_0]) / Gda_904[Ai_0]); if (Li_136 >= 0 && Li_136 <= Height) MakeMAMark1(Ai_0, Ls_116, Li_4, Li_136, MAColor1); } if (MAMode2) { if (Gia_884[Ai_0] <= 15) Ld_128 = smMA(Ai_0, Li_124, ma3m, MAPeriod2); else Ld_128 = smMA(Ai_0, Li_124, MODE_EMA, MAPeriod2); Li_136 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_128 - Gda_888[Ai_0]) / Gda_904[Ai_0]); if (Li_136 >= 0 && Li_136 <= Height) MakeMAMark2(Ai_0, Ls_116, Li_4, Li_136, MAColor2); } } } } int TimePeriodFromString(string As_0) { int Li_ret_8 = 0; if (As_0 == "M1") Li_ret_8 = 1; if (As_0 == "M5") Li_ret_8 = 5; if (As_0 == "M15") Li_ret_8 = 15; if (As_0 == "M30") Li_ret_8 = 30; if (As_0 == "H1") Li_ret_8 = 60; if (As_0 == "H4") Li_ret_8 = 240; if (As_0 == "D1") Li_ret_8 = 1440; if (As_0 == "W1") Li_ret_8 = 10080; if (As_0 == "MN1") Li_ret_8 = 43200; return (Li_ret_8); } void Update(int Ai_0) { double Ld_68; int Li_76; if (Gi_928) Gi_928 = FALSE; else if (!(BuildArrays(Ai_0))) return; string Ls_4 = Gsa_916[Ai_0] + "Bar_0_"; int color_64 = WickColor; ObjectDeleteByPrefix(Ls_4, WindowNumber); double Ld_12 = smOpen(Ai_0, 0); double Ld_20 = smHigh(Ai_0, 0); double Ld_36 = smLow(Ai_0, 0); double Ld_28 = smClose(Ai_0, 0); int Li_44 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_12 - Gda_888[Ai_0]) / Gda_904[Ai_0]); int Li_48 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_20 - Gda_888[Ai_0]) / Gda_904[Ai_0]); int Li_56 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_36 - Gda_888[Ai_0]) / Gda_904[Ai_0]); int Li_52 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_28 - Gda_888[Ai_0]) / Gda_904[Ai_0]); int color_60 = BarColor(Ld_12, Ld_28); if (WickColor == CLR_NONE) color_64 = color_60; if (CandleMode) MakeCandle(Ai_0, Ls_4, Gia_892[Ai_0], Li_44, Li_48, Li_56, Li_52, color_60, color_64); else MakeBar(Ai_0, Ls_4, Gia_892[Ai_0], Li_44, Li_48, Li_56, Li_52, color_60); if (MAMode) { if (Gia_884[Ai_0] <= 15) Ld_68 = smMA(Ai_0, 0, Gi_952, MAPeriod); else Ld_68 = smMA(Ai_0, 0, MODE_EMA, MAPeriod); Li_76 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_68 - Gda_888[Ai_0]) / Gda_904[Ai_0]); if (Li_76 >= 0 && Li_76 <= Height) MakeMAMark(Ai_0, Ls_4, Gia_892[Ai_0], Li_76, MAColor); } if (MAMode1) { if (Gia_884[Ai_0] <= 15) Ld_68 = smMA(Ai_0, 0, ma2m, MAPeriod1); else Ld_68 = smMA(Ai_0, 0, MODE_EMA, MAPeriod1); Li_76 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_68 - Gda_888[Ai_0]) / Gda_904[Ai_0]); if (Li_76 >= 0 && Li_76 <= Height) MakeMAMark1(Ai_0, Ls_4, Gia_892[Ai_0], Li_76, MAColor1); } if (MAMode2) { if (Gia_884[Ai_0] <= 15) Ld_68 = smMA(Ai_0, 0, ma3m, MAPeriod2); else Ld_68 = smMA(Ai_0, 0, MODE_EMA, MAPeriod2); Li_76 = Gia_896[Ai_0] - MathRound(Gda_900[Ai_0] * (Ld_68 - Gda_888[Ai_0]) / Gda_904[Ai_0]); if (Li_76 >= 0 && Li_76 <= Height) MakeMAMark2(Ai_0, Ls_4, Gia_892[Ai_0], Li_76, MAColor2); } } bool BuildArrays(int Ai_0) { int Li_20; int Li_24; if (!SimulationMode) return (true); int Li_4 = Gia_884[Ai_0] / Period(); int Li_8 = Gi_796 * Li_4; if (Li_8 > Bars) Li_8 = Bars; int Li_12 = Li_8 / Li_4; if (Li_12 < Gi_796) return (false); if (iFunctionUseable(Ai_0)) return (true); ArrayResize(Gia_932, Li_12); ArrayResize(Gda_936, Li_12); ArrayResize(Gda_940, Li_12); ArrayResize(Gda_944, Li_12); ArrayResize(Gda_948, Li_12); int index_28 = 0; for (int index_16 = 0; index_16 < Li_8; index_16++) { if (Time[index_16] % 60 == 0 && Time[index_16] / 60 % Gia_884[Ai_0] == 0) { Li_24 = index_16; Li_20 = index_16; break; } } Gia_932[index_28] = Time[Li_24]; Gda_936[index_28] = Open[Li_24]; Gda_940[index_28] = iHigh(NULL, 0, iHighest(NULL, 0, MODE_HIGH, Li_24 + 1, 0)); Gda_944[index_28] = iLow(NULL, 0, iLowest(NULL, 0, MODE_LOW, Li_24 + 1, 0)); Gda_948[index_28] = Close[0]; for (index_16 = Li_24 + Li_4; index_16 < Li_8; index_16 += Li_4) { index_28++; if (!Time[index_16] % 60 == 0 && Time[index_16] / 60 % Gia_884[Ai_0] == 0) { for (int Li_32 = Li_20 + 1; Li_32 < Li_8; Li_32++) { if (Time[Li_32] % 60 == 0 && Time[Li_32] / 60 % Gia_884[Ai_0] == 0) { index_16 = Li_32; break; } } } Gia_932[index_28] = Time[index_16]; Gda_936[index_28] = Open[index_16]; Gda_940[index_28] = iHigh(NULL, 0, iHighest(NULL, 0, MODE_HIGH, index_16 - Li_20, Li_20 + 1)); Gda_944[index_28] = iLow(NULL, 0, iLowest(NULL, 0, MODE_LOW, index_16 - Li_20, Li_20 + 1)); Gda_948[index_28] = Close[Li_20 + 1]; Li_20 = index_16; } return (true); } bool iFunctionUseable(int Ai_0) { if ((!SimulationMode) || (SimulationMode && Gsa_908[Ai_0] == Symbol() && Gia_884[Ai_0] == Period())) return (true); return (false); } int IsNewBar(int Ai_0) { if (Gia_880[Ai_0] == 0) return (1); if (iFunctionUseable(Ai_0)) if (Gia_880[Ai_0] != smTime(Ai_0, 0)) return (1); if (Time[0] >= Gia_880[Ai_0] + 60 * Gia_884[Ai_0]) return (1); return (0); } int smTime(int Ai_0, int Ai_4) { if (iFunctionUseable(Ai_0)) return (iTime(Gsa_908[Ai_0], Gia_884[Ai_0], Ai_4)); if (ArrayRange(Gia_932, 0) > Ai_4) return (Gia_932[Ai_4]); return (0); } double smOpen(int Ai_0, int Ai_4) { if (iFunctionUseable(Ai_0)) return (iOpen(Gsa_908[Ai_0], Gia_884[Ai_0], Ai_4)); if (ArrayRange(Gda_936, 0) > Ai_4) return (Gda_936[Ai_4]); return (0); } double smHigh(int Ai_0, int Ai_4) { if (iFunctionUseable(Ai_0)) return (iHigh(Gsa_908[Ai_0], Gia_884[Ai_0], Ai_4)); if (ArrayRange(Gda_940, 0) > Ai_4) return (Gda_940[Ai_4]); return (0); } double smLow(int Ai_0, int Ai_4) { if (iFunctionUseable(Ai_0)) return (iLow(Gsa_908[Ai_0], Gia_884[Ai_0], Ai_4)); if (ArrayRange(Gda_944, 0) > Ai_4) return (Gda_944[Ai_4]); return (0); } double smClose(int Ai_0, int Ai_4) { if (iFunctionUseable(Ai_0)) return (iClose(Gsa_908[Ai_0], Gia_884[Ai_0], Ai_4)); if (ArrayRange(Gda_948, 0) > Ai_4) return (Gda_948[Ai_4]); return (0); } double smLowest(int Ai_0, int Ai_4, int Ai_8) { if (iFunctionUseable(Ai_0)) return (iLowest(Gsa_908[Ai_0], Gia_884[Ai_0], MODE_LOW, Ai_4, Ai_8)); if (ArrayRange(Gda_944, 0) >= Ai_8 + Ai_4) return (ArrayMinimum(Gda_944, Ai_4, Ai_8)); return (0); } double smHighest(int Ai_0, int Ai_4, int Ai_8) { if (iFunctionUseable(Ai_0)) return (iHighest(Gsa_908[Ai_0], Gia_884[Ai_0], MODE_HIGH, Ai_4, Ai_8)); if (ArrayRange(Gda_940, 0) >= Ai_8 + Ai_4) return (ArrayMaximum(Gda_940, Ai_4, Ai_8)); return (0); } double smMA(int Ai_0, int Ai_4, int A_ma_method_8, int MAPeriod0) { if (iFunctionUseable(Ai_0)) return (iMA(Gsa_908[Ai_0], Gia_884[Ai_0], MAPeriod0, 0, A_ma_method_8, PRICE_CLOSE, Ai_4)); return (0); }