#property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_separate_window #property indicator_minimum 0.0 #property indicator_maximum 1.5 #property indicator_buffers 2 #property indicator_color1 Green #property indicator_color2 Red #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_80 = FALSE; extern string Copyright = "Copyright Sharptrade Partners, LLC - 2009"; extern string First = " Price Action Channel Histogram"; extern string Last = "http://www.triadformula.com"; double g_ibuf_108[]; double gd_112 = 1.01; int gi_120 = 40; double g_ibuf_124[]; double g_ibuf_128[]; double gd_132 = 100.0; double gd_140 = 0.0; double gd_148 = 100.0; double gd_156 = 0.0; int gi_164 = 5; int gi_168 = 5; double g_pips_172 = 100.0; double gda_180[50]; double gda_184[50]; double g_ibuf_188[]; double g_icustom_192; double g_icustom_200; double g_ibuf_208[]; double g_ibuf_212[]; double g_ibuf_216[]; double g_ibuf_220[]; int gi_224; double g_ibuf_228[]; double g_ibuf_232[]; double g_ibuf_236[]; 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_80 = TRUE; break; case 4: Alert("Your account has been disabled! Please contact support@fximpact.com"); gi_80 = TRUE; break; case 5: Alert("Server error!! Please make sure you are connected to the Internet and try again."); gi_80 = TRUE; break; case 6: Alert("No key found in your registry (bad install)! Please re-install the product."); gi_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_208); SetIndexLabel(0, "HA_0"); SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1, RoyalBlue); SetIndexBuffer(1, g_ibuf_212); SetIndexLabel(1, "HA_1"); SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 3, Crimson); SetIndexBuffer(2, g_ibuf_216); SetIndexLabel(2, "HA_Open"); SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 3, RoyalBlue); SetIndexBuffer(3, g_ibuf_220); SetIndexLabel(3, "HA_Close"); SetIndexDrawBegin(0, 10); SetIndexDrawBegin(1, 10); SetIndexDrawBegin(2, 10); SetIndexDrawBegin(3, 10); SetIndexBuffer(0, g_ibuf_208); SetIndexBuffer(1, g_ibuf_212); SetIndexBuffer(2, g_ibuf_216); SetIndexBuffer(3, g_ibuf_220); return (0); } if (Copyright == "koaijdsoDUDFIUONUIN") { IndicatorBuffers(4); SetIndexBuffer(0, g_ibuf_228); SetIndexStyle(0, DRAW_LINE); SetIndexLabel(0, "Long"); SetIndexBuffer(1, g_ibuf_232); SetIndexStyle(1, DRAW_LINE); SetIndexLabel(1, "Short"); SetIndexBuffer(2, g_ibuf_236); SetIndexStyle(2, DRAW_LINE, STYLE_DASH); SetIndexBuffer(3, g_ibuf_188); ls_0 = Symbol(); if (StringFind(ls_0, "EURUSD") != -1) { gd_132 = 100; gd_140 = 0; gd_148 = 100; gd_156 = 0; gi_164 = 8; gi_168 = 8; } if (StringFind(ls_0, "USDCHF") != -1) { gd_132 = 100; gd_140 = 0; gd_148 = 100; gd_156 = 0; gi_164 = 7; gi_168 = 7; } if (StringFind(ls_0, "GBPUSD") != -1) { gd_132 = 100; gd_140 = 0; gd_148 = 100; gd_156 = 0; gi_164 = 5; gi_168 = 5; } if (StringFind(ls_0, "USDJPY") != -1) { gd_132 = 100; gd_140 = 0; gd_148 = 100; gd_156 = 0; gi_164 = 6; gi_168 = 6; } return (0); } IndicatorBuffers(5); SetIndexBuffer(0, g_ibuf_124); SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 2); SetIndexLabel(0, "Long"); SetIndexBuffer(1, g_ibuf_128); SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 2); SetIndexLabel(1, "Short"); SetIndexBuffer(2, g_ibuf_208); SetIndexStyle(2, DRAW_NONE); SetIndexBuffer(3, g_ibuf_212); SetIndexStyle(3, DRAW_NONE); SetIndexBuffer(4, g_ibuf_216); SetIndexStyle(4, DRAW_NONE); SetIndexDrawBegin(0, gi_120); SetIndexDrawBegin(1, gi_120); SetIndexDrawBegin(2, gi_120); SetIndexDrawBegin(3, gi_120); SetIndexDrawBegin(4, gi_120); loginStart(); return (0); } int deinit() { return (0); } int start() { double l_high_8; double l_low_16; double ld_24; double l_icustom_32; if (Copyright == "verCheckInfo") { g_ibuf_108[0] = gd_112; return (0); } if (Copyright == "o999jjdjfjjfjfjfjfjfjf") { HeikenAshi(); return (0); } if (Copyright == "koaijdsoDUDFIUONUIN") { SquishSquash(); return (0); } if (gi_80) 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_40 = li_4; li_40 >= 0; li_40--) { l_high_8 = High[iHighest(NULL, 0, MODE_HIGH, gi_120, li_40 + 1)]; l_low_16 = Low[iLowest(NULL, 0, MODE_LOW, gi_120, li_40 + 1)]; ld_24 = MathAbs(l_high_8 - l_low_16) / 2.0 + l_low_16; g_icustom_192 = iCustom(Symbol(), 0, "FXI_PAC-Hist", "koaijdsoDUDFIUONUIN", 0, li_40); g_icustom_200 = iCustom(Symbol(), 0, "FXI_PAC-Hist", "koaijdsoDUDFIUONUIN", 1, li_40); l_icustom_32 = iCustom(Symbol(), 0, "FXI_PAC-Hist", "o999jjdjfjjfjfjfjfjfjf", 3, li_40); if (g_icustom_192 > ld_24) { g_ibuf_124[li_40] = 1.0; g_ibuf_128[li_40] = 0.0; } if (g_icustom_200 < ld_24) { g_ibuf_124[li_40] = 0.0; g_ibuf_128[li_40] = 1.0; } if (g_icustom_200 <= ld_24 && g_icustom_192 >= ld_24) { if (l_icustom_32 > ld_24) { g_ibuf_124[li_40] = 1.0; g_ibuf_128[li_40] = 0.0; } else { g_ibuf_124[li_40] = 0.0; g_ibuf_128[li_40] = 1.0; } } } return (0); } bool checkVerInfo() { if (Copyright == "verCheckInfo") { IndicatorBuffers(1); SetIndexBuffer(0, g_ibuf_108); SetIndexStyle(0, DRAW_NONE); return (TRUE); } return (FALSE); } 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_180[li_16 + 1] = gda_180[li_16]; else gda_184[li_16 + 1] = gda_184[li_16]; } if (ai_0 == 1) gda_180[0] = ad_4; if (ai_0 == 2) gda_184[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_180, gi_164 + 2) == -1) { Print("Cannot resize array!"); return (0); } if (ArrayResize(gda_184, gi_168 + 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_132; li_72++) ld_52 += gd_140 * ((High[li_72] - Open[li_72]) / 2.0); ld_60 = ld_52 / gd_132; ld_52 = 0; slideArray(1, ld_60, gi_164); for (li_72 = li_80; li_72 < li_80 + gd_148; li_72++) ld_52 += gd_156 * ((Open[li_72] - Low[li_72]) / 2.0); ld_60 = ld_52 / gd_148; ld_52 = 0; slideArray(2, ld_60, gi_168); if (gda_184[gi_168] == EMPTY_VALUE || gda_180[gi_164] == EMPTY_VALUE) continue; l_index_68 = 0; for (li_72 = li_80; li_72 < li_80 + gi_164; li_72++) { ld_52 += High[li_72] + gda_180[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_172 * Point < g_ibuf_188[li_80]) ld_60 = ld_52 / gi_164 + g_ibuf_188[li_80]; else ld_60 = ld_52 / gi_164; ld_52 = 0; g_ibuf_228[li_80] = ld_60; l_index_68 = 0; for (li_72 = li_80; li_72 < li_80 + gi_168; li_72++) { ld_52 += Low[li_72] - gda_184[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_172 * Point < g_ibuf_188[li_80]) ld_60 = ld_52 / gi_168 - g_ibuf_188[li_80]; else ld_60 = ld_52 / gi_168; ld_52 = 0; g_ibuf_232[li_80] = ld_60; g_ibuf_236[li_80] = (g_ibuf_228[li_80] + g_ibuf_232[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_188[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_224 = IndicatorCounted(); if (gi_224 < 0) return (-1); if (gi_224 > 0) gi_224--; for (int li_32 = Bars - gi_224 - 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_216[li_32 + 1] + (g_ibuf_220[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_208[li_32] = ld_16; g_ibuf_212[li_32] = ld_8; } else { g_ibuf_208[li_32] = ld_8; g_ibuf_212[li_32] = ld_16; } g_ibuf_216[li_32] = ld_0; g_ibuf_220[li_32] = ld_24; } return (0); }