#property copyright "Copyright © 2008, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_separate_window #property indicator_maximum 1.25 #property indicator_buffers 4 #property indicator_color1 Green #property indicator_color2 Gray #property indicator_color3 Red #property indicator_color4 Yellow #import "FXI.dll" string gGrab(string a0, string a1); #import "fxi_upd.dll" string returnReg(string a0, string a1); void runUpdater(); #import int g_file_76; bool gi_unused_80 = FALSE; extern string Copyright = "Copyright Sharptrade Partners, LLC - 2009"; double g_ibuf_92[]; double gd_96 = 1.01; double gd_104 = 100.0; double gd_112 = 0.0; double gd_120 = 100.0; double gd_128 = 0.0; int gi_136 = 5; int gi_140 = 5; double g_pips_144 = 100.0; double g_ibuf_152[]; double g_ibuf_156[]; double g_ibuf_160[]; double gda_unused_164[]; double gda_unused_168[]; double gda_unused_172[]; double g_icustom_176; double g_icustom_184; double gda_192[50]; double gda_196[50]; double g_ibuf_200[]; double g_ibuf_204[]; double g_ibuf_208[]; double g_ibuf_212[]; double g_ibuf_216[]; double g_ibuf_220[]; double g_ibuf_224[]; double g_ibuf_228[]; int gi_232 = 0; double g_icustom_236; double g_icustom_244; int gi_252 = -1; double g_icustom_256; double g_ibuf_264[]; double gda_268[]; double gda_272[]; double gda_276[]; double gda_280[]; int loginStart() { int l_str2int_0; bool li_4; int li_8; g_file_76 = FileOpen("fxi_t.bin", FILE_CSV|FILE_READ); if (g_file_76 < 1) li_4 = FALSE; else { l_str2int_0 = StrToInteger(FileReadString(g_file_76)); FileClose(g_file_76); li_4 = TRUE; } if (TimeLocal() - l_str2int_0 >= 604800 || li_4 == FALSE) { li_8 = doLogin(); switch (li_8) { case 0: Alert("Logged in"); g_file_76 = FileOpen("fxi_t.bin", FILE_WRITE, 8); if (g_file_76 < 1) { Print("Cannot open password cache!"); return (0); } FileWrite(g_file_76, TimeLocal()); FileClose(g_file_76); checkVersions(); break; case 1: Alert("Invalid key provided!! Please re-install the software with the correct key."); gi_unused_80 = TRUE; break; case 4: Alert("Your account has been disabled! Please contact support@fximpact.com"); gi_unused_80 = TRUE; break; case 5: Alert("Server error!! Please make sure you are connected to the Internet and try again."); gi_unused_80 = TRUE; break; case 6: Alert("No key found in your registry (bad install)! Please re-install the product."); gi_unused_80 = TRUE; } } return (0); } int doLogin() { string ls_0 = returnReg("Software\\FXI\\Triad", "fname"); string ls_8 = returnReg("Software\\FXI\\Triad", "lname"); string ls_16 = returnReg("Software\\FXI\\Triad", "email"); string ls_24 = returnReg("Software\\FXI\\Triad", "key"); if (ls_24 == "") return (6); string ls_32 = "fname=" + ls_0; ls_32 = ls_32 + "&lname=" + ls_8; ls_32 = ls_32 + "&email=" + ls_16; ls_32 = ls_32 + "&key=" + ls_24; string ls_40 = gGrab("http://www.foreximpact.com/triad/t_login.php", ls_32); if (StringSubstr(ls_40, 0, 1) == "0") return (0); if (StringSubstr(ls_40, 0, 1) == "1") return (1); if (StringSubstr(ls_40, 0, 1) == "4") return (4); return (5); } void checkVersions() { string lsa_28[50]; int li_36; int li_40; string ls_48; string ls_56; string ls_64; string ls_0 = "http://www.foreximpact.com/triad/versions.txt"; string ls_8 = gGrab(ls_0, ""); int l_str2dbl_24 = -1; int l_file_32 = FileOpen("fxi_versions.txt", FILE_CSV|FILE_WRITE, ","); if (l_file_32 < 1) Print("Can NOT load the versions.txt file! Not updating indicators..."); FileWrite(l_file_32, ls_8); FileClose(l_file_32); l_file_32 = FileOpen("fxi_versions.txt", FILE_CSV|FILE_READ, ","); if (l_file_32 < 1) Print("Can NOT load the versions.txt file! Not updating indicators..."); string ls_16 = FileReadString(l_file_32); l_str2dbl_24 = StrToDouble(ls_16); int l_index_44 = 0; if (l_str2dbl_24 > 0) { for (int l_count_72 = 0; l_count_72 < l_str2dbl_24; l_count_72++) { ls_16 = FileReadString(l_file_32); li_40 = StringFind(ls_16, ".", 0); ls_48 = StringSubstr(ls_16, 0, li_40); li_36 = StringFind(ls_16, " ", 0); ls_56 = StringSubstr(ls_16, li_36 + 1, StringLen(ls_16) - (li_36 + 1)); if (!checkIndyVersion(ls_48, ls_56)) { ls_64 = StringSubstr(ls_16, 0, li_36); lsa_28[l_index_44] = ls_64; l_index_44++; } } FileClose(l_file_32); Print("Number of indicators to update -- ", l_index_44); if (l_index_44 > 0) { l_file_32 = FileOpen("fxi_update.txt", FILE_CSV|FILE_WRITE, ","); if (l_file_32 < 1) Print("Can not open fxi_update.txt for writing! Exiting..."); else { FileWrite(l_file_32, l_index_44); for (int l_index_76 = 0; l_index_76 < l_index_44; l_index_76++) { Print("Updating Indicator -- ", lsa_28[l_index_76]); FileWrite(l_file_32, lsa_28[l_index_76]); } FileClose(l_file_32); runUpdater(); } } } else FileClose(l_file_32); } bool checkIndyVersion(string as_0, string as_8) { Print("Checking indy " + as_0 + " with version " + as_8); double l_str2dbl_16 = StrToDouble(as_8); double l_icustom_24 = iCustom(Symbol(), 0, as_0, "verCheckInfo", 0, 0); Print("Returned version : ", l_icustom_24); if (l_icustom_24 > 0.0 && l_icustom_24 < l_str2dbl_16) return (FALSE); if (l_icustom_24 == 0.0) return (FALSE); return (TRUE); } int init() { string ls_0; if (checkVerInfo()) return (0); if (Copyright == "o999jjdjfjjfjfjfjfjfjf") { IndicatorBuffers(4); SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 1, Crimson); SetIndexBuffer(0, g_ibuf_216); SetIndexLabel(0, "HA_0"); SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1, RoyalBlue); SetIndexBuffer(1, g_ibuf_220); SetIndexLabel(1, "HA_1"); SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 3, Crimson); SetIndexBuffer(2, g_ibuf_224); SetIndexLabel(2, "HA_Open"); SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 3, RoyalBlue); SetIndexBuffer(3, g_ibuf_228); SetIndexLabel(3, "HA_Close"); SetIndexDrawBegin(0, 10); SetIndexDrawBegin(1, 10); SetIndexDrawBegin(2, 10); SetIndexDrawBegin(3, 10); SetIndexBuffer(0, g_ibuf_216); SetIndexBuffer(1, g_ibuf_220); SetIndexBuffer(2, g_ibuf_224); SetIndexBuffer(3, g_ibuf_228); return (0); } if (Copyright == "koaijdsoDUDFIUONUIN") { IndicatorBuffers(4); SetIndexBuffer(0, g_ibuf_200); SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(1, g_ibuf_204); SetIndexStyle(1, DRAW_LINE); SetIndexBuffer(2, g_ibuf_208); SetIndexStyle(2, DRAW_LINE, STYLE_DASH); SetIndexBuffer(3, g_ibuf_212); ls_0 = Symbol(); if (StringFind(ls_0, "EURUSD") != -1) { gd_104 = 100; gd_112 = 0; gd_120 = 100; gd_128 = 0; gi_136 = 5; gi_140 = 5; } if (StringFind(ls_0, "USDCHF") != -1) { gd_104 = 100; gd_112 = 0; gd_120 = 100; gd_128 = 0; gi_136 = 5; gi_140 = 5; } if (StringFind(ls_0, "GBPUSD") != -1) { gd_104 = 100; gd_112 = 0; gd_120 = 100; gd_128 = 0; gi_136 = 5; gi_140 = 5; } if (StringFind(ls_0, "USDJPY") != -1) { gd_104 = 100; gd_112 = 0; gd_120 = 100; gd_128 = 0; gi_136 = 6; gi_140 = 6; } return (0); } SetIndexBuffer(0, g_ibuf_152); SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 2); SetIndexLabel(0, "Up"); SetIndexBuffer(1, g_ibuf_160); SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 2); SetIndexLabel(1, "Neutral"); SetIndexBuffer(2, g_ibuf_156); SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 2); SetIndexLabel(2, "Down"); SetIndexBuffer(3, g_ibuf_264); SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 2); SetIndexLabel(3, "Exit"); loginStart(); return (0); } int deinit() { return (0); } int start() { double l_icustom_16; if (Copyright == "verCheckInfo") { g_ibuf_92[0] = gd_96; return (0); } if (Copyright == "o999jjdjfjjfjfjfjfjfjf") { HeikenAshi(); return (0); } if (Copyright == "koaijdsoDUDFIUONUIN") { SquishSquash(); return (0); } int l_ind_counted_0 = IndicatorCounted(); int li_4 = Bars - l_ind_counted_0; if (li_4 > 0) li_4--; if (li_4 < 0) return (-1); for (int li_32 = li_4; li_32 >= 0; li_32--) { g_icustom_236 = iCustom(NULL, 0, "FXI_TrendFinder", 0, li_32); g_icustom_244 = iCustom(NULL, 0, "FXI_TrendFinder", 1, li_32); if (g_icustom_236 != 0.0) gi_252 = 1; else { if (g_icustom_244 != 0.0) gi_252 = 2; else gi_252 = -1; } g_icustom_176 = iCustom(NULL, 0, "FXI_SS-Hist", "koaijdsoDUDFIUONUIN", 0, li_32); g_icustom_184 = iCustom(NULL, 0, "FXI_SS-Hist", "koaijdsoDUDFIUONUIN", 1, li_32); l_icustom_16 = iCustom(NULL, 0, "FXI_SS-Hist", "o999jjdjfjjfjfjfjfjfjf", 3, li_32); g_icustom_256 = iCustom(NULL, 0, "FXI_SS-Hist", "o999jjdjfjjfjfjfjfjfjf", 2, li_32); gda_268[li_32] = g_icustom_256; gda_272[li_32] = l_icustom_16; gda_276[li_32] = g_icustom_176; gda_280[li_32] = g_icustom_184; if (l_icustom_16 > g_icustom_176) { g_ibuf_152[li_32] = 1.0; g_ibuf_156[li_32] = 0.0; g_ibuf_264[li_32] = 0.0; g_ibuf_160[li_32] = 0.0; } else { if (l_icustom_16 < g_icustom_184) { g_ibuf_264[li_32] = 0.0; g_ibuf_152[li_32] = 0.0; g_ibuf_156[li_32] = 1.0; g_ibuf_160[li_32] = 0.0; } else { if (l_icustom_16 == g_icustom_184) { g_ibuf_264[li_32] = 0.0; g_ibuf_152[li_32] = 0.0; g_ibuf_156[li_32] = 0.0; g_ibuf_160[li_32] = 1.0; } else { if (l_icustom_16 == g_icustom_176) { g_ibuf_264[li_32] = 0.0; g_ibuf_152[li_32] = 0.0; g_ibuf_156[li_32] = 0.0; g_ibuf_160[li_32] = 1.0; } else { if (l_icustom_16 < g_icustom_176 && l_icustom_16 > g_icustom_184) { g_ibuf_264[li_32] = 0.0; g_ibuf_152[li_32] = 0.0; g_ibuf_156[li_32] = 0.0; g_ibuf_160[li_32] = 1.0; } } } } } if (gi_252 == 1) { if (l_icustom_16 < g_icustom_256) { g_ibuf_264[li_32] = 1.0; g_ibuf_152[li_32] = 0.0; g_ibuf_156[li_32] = 0.0; } } else { if (gi_252 == 2) { if (l_icustom_16 > g_icustom_256) { g_ibuf_264[li_32] = 1.0; g_ibuf_152[li_32] = 0.0; g_ibuf_156[li_32] = 0.0; } } } } return (0); } void slideArray(int ai_0, double ad_4, int ai_12) { for (int li_16 = ai_12 - 1; li_16 >= 0; li_16--) { if (ai_0 == 1) gda_192[li_16 + 1] = gda_192[li_16]; else gda_196[li_16 + 1] = gda_196[li_16]; } if (ai_0 == 1) gda_192[0] = ad_4; if (ai_0 == 2) gda_196[0] = ad_4; } int SquishSquash() { int l_index_68; int l_ind_counted_0 = IndicatorCounted(); double ld_52 = 0; double ld_60 = 0; if (ArrayResize(gda_192, gi_136 + 2) == -1) { Print("Cannot resize array!"); return (0); } if (ArrayResize(gda_196, gi_140 + 2) == -1) { Print("Cannot resize array!"); return (0); } if (l_ind_counted_0 < 0) return (-1); int li_76 = Bars - l_ind_counted_0; momentum(li_76); for (int li_80 = li_76; li_80 >= 0; li_80--) { for (int li_72 = li_80; li_72 < li_80 + gd_104; li_72++) ld_52 += gd_112 * ((High[li_72] - Open[li_72]) / 2.0); ld_60 = ld_52 / gd_104; ld_52 = 0; slideArray(1, ld_60, gi_136); for (li_72 = li_80; li_72 < li_80 + gd_120; li_72++) ld_52 += gd_128 * ((Open[li_72] - Low[li_72]) / 2.0); ld_60 = ld_52 / gd_120; ld_52 = 0; slideArray(2, ld_60, gi_140); if (gda_196[gi_140] == EMPTY_VALUE || gda_192[gi_136] == EMPTY_VALUE) continue; l_index_68 = 0; for (li_72 = li_80; li_72 < li_80 + gi_136; li_72++) { ld_52 += High[li_72] + gda_192[l_index_68]; l_index_68++; } if ((High[li_80 + 1] + (Low[li_80 + 1])) / 2.0 < (High[li_80] + Low[li_80]) / 2.0 && g_pips_144 * Point < g_ibuf_212[li_80]) ld_60 = ld_52 / gi_136 + g_ibuf_212[li_80]; else ld_60 = ld_52 / gi_136; ld_52 = 0; g_ibuf_200[li_80] = ld_60; l_index_68 = 0; for (li_72 = li_80; li_72 < li_80 + gi_140; li_72++) { ld_52 += Low[li_72] - gda_196[l_index_68]; l_index_68++; } if ((High[li_80 + 1] + (Low[li_80 + 1])) / 2.0 > (High[li_80] + Low[li_80]) / 2.0 && g_pips_144 * Point < g_ibuf_212[li_80]) ld_60 = ld_52 / gi_140 - g_ibuf_212[li_80]; else ld_60 = ld_52 / gi_140; ld_52 = 0; g_ibuf_204[li_80] = ld_60; g_ibuf_208[li_80] = (g_ibuf_200[li_80] + g_ibuf_204[li_80]) / 2.0; } return (0); } void momentum(int ai_0) { for (int l_index_4 = 0; l_index_4 <= ai_0; l_index_4++) g_ibuf_212[l_index_4] = MathAbs((High[l_index_4 + 1] + (Low[l_index_4 + 1])) / 2.0 - (High[l_index_4] + Low[l_index_4]) / 2.0) / 2.0; } int HeikenAshi() { double ld_0; double ld_8; double ld_16; double ld_24; if (Bars <= 10) return (0); gi_232 = IndicatorCounted(); if (gi_232 < 0) return (-1); if (gi_232 > 0) gi_232--; for (int li_32 = Bars - gi_232 - 1; li_32 >= 0; li_32--) { ld_24 = NormalizeDouble((Open[li_32] + High[li_32] + Low[li_32] + Close[li_32]) / 4.0, Digits); ld_0 = NormalizeDouble((g_ibuf_224[li_32 + 1] + (g_ibuf_228[li_32 + 1])) / 2.0, Digits); ld_8 = MathMax(High[li_32], MathMax(ld_0, ld_24)); ld_16 = MathMin(Low[li_32], MathMin(ld_0, ld_24)); if (ld_0 < ld_24) { g_ibuf_216[li_32] = ld_16; g_ibuf_220[li_32] = ld_8; } else { g_ibuf_216[li_32] = ld_8; g_ibuf_220[li_32] = ld_16; } g_ibuf_224[li_32] = ld_0; g_ibuf_228[li_32] = ld_24; } return (0); } bool checkVerInfo() { if (Copyright == "verCheckInfo") { IndicatorBuffers(1); SetIndexBuffer(0, g_ibuf_92); SetIndexStyle(0, DRAW_NONE); return (TRUE); } return (FALSE); }