Synergy_RangeFactor

Download script
Author: Copyright � 2008, Dean Malone
Synergy_RangeFactor

This script serves as a specialized technical indicator for the MetaTrader trading platform. Its primary purpose is to provide visual market data analysis while managing a strict security and licensing framework to ensure only authorized users can access the full functionality of the tool.

Core Functional Logic

1. Market Data Analysis (The Range Factor) The main visible purpose of this script is to calculate and display a "Range Factor" on your trading chart. It performs the following calculations:

  • Moving Average Comparison: It compares two different moving averages (a short-term average and a longer-term average) to determine the current trend strength.
  • Volatility Adjustment: It incorporates an Average True Range (ATR) calculation. This allows the indicator to normalize the data based on how volatile the market is at any given moment.
  • Linear Calculation: It uses these values to produce a linear data point, which is then processed through a mathematical formula (a sigmoid-style function) to generate a smoothed value between -1 and 1.
  • Visual Output: On your chart, this results in three visual components: a central linear value and two boundaries (an Upper Limit and a Lower Limit). These help traders identify where the price is relative to its recent historical range.

2. Security and Authentication System A significant portion of the script is dedicated to an "Advanced Synergy" protection system. This acts as a gatekeeper for the indicator:

  • User Validation: The script requires a login (Email and Password). It communicates with an external web server to verify your credentials.
  • Session Management: To prevent unauthorized sharing, the script includes a "Keep Alive" feature. It periodically checks in with the server to ensure the account is still active. It can also detect if the same account is being accessed from multiple locations and may terminate the session to protect the user's security.
  • Data Persistence: The script saves your login status locally in a binary file so that you do not have to re-enter your credentials every time you restart the software, provided the connection remains valid.

3. Automated Maintenance The script includes background logic designed to keep the environment healthy:

  • Version Verification: It checks if the installed files are up to date. If it detects an outdated version, it is designed to trigger an auto-updater.
  • Debug Logging: It maintains a debug log file. This allows for troubleshooting by recording events like login attempts, connection errors, and specific data points during operation.

Summary of User Experience

For the end-user, the logic ensures that you receive accurate, volatility-adjusted trend information on your charts. Behind the scenes, the script handles the heavy lifting of verifying your subscription, maintaining a secure connection to the provider's servers, and ensuring that the technical components are running at their latest official versions.

2 Views
0 Downloads
0 Favorites
Synergy_RangeFactor
/*
   Generated by EX4-TO-MQ4 decompiler V4.0.220.2c []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/
#property copyright "Copyright © 2008, Dean Malone"
#property link      "www.compassfx.com"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Fuchsia
#property indicator_color2 DodgerBlue
#property indicator_color3 DodgerBlue

//#import "as2_updater.dll"
  // int isExeRunning();
  // int runAutoUpdater();
  // int isInstallerRunning();
  // int runAutoInstaller();
//#import "Synergy.dll"
  // string gGrab(string a0, string a1);
//#import

int gi_76 = -1;
double gda_80[];
double gda_84[10];
string gsa_88[10];
string gsa_92[10];
int gi_96;
extern string Custom_Indicator = "Range_Factor";
extern string Copyright = "© 2008, Dean Malone";
extern string Web_Address = "www.compassfx.com";
extern string label = "--Login Information--";
extern string EMail = "";
extern string Password = "";
extern double MyRange = 0.0;
extern string MyRange_Help = "If MyRange = 0.0 - defaults used (M1=0.01,M5=0.02,M15=0.04,M30=0.06,H1=0.08,H4=0.14,D1=0.4)";
double gd_164;
double gda_172[];
double gda_176[];
double gda_180[];
double gd_184 = 500.0;
string gs_192 = "k}rfwpjy";
string gs_200 = "@@@@@@@@@@@@@@@@@@@@";
int gi_208;
bool gi_212 = FALSE;
string gs_216;
bool gi_224 = FALSE;
int gi_228;
string gs_232;
string gs_240;
string gs_248;
string gs_256;
int gi_264;
bool gi_268;
int gi_272;
int gi_276;
int gi_280 = 80;
string gs_284 = "http://www.synergyforex.com/server/server2/";
string gs_292 = "http://www.compassfx.com/server/";
string gs_300;
int gi_308 = -1;

int doLoginCheck(string as_0) {
   double lda_16[10];
   string lsa_20[10];
   string ls_24;
   bool li_8 = FALSE;
   int li_12 = FileOpen("indicators_debug.txt", FILE_CSV|FILE_READ, ",");
   if (li_12 != -1) {
      if (FileSize(li_12) > 100000) {
         FileClose(li_12);
         FileDelete("indicators_debug.txt");
      } else FileClose(li_12);
   }
   int li_44 = 0;
   bool li_48 = FALSE;
   ArrayInitialize(lda_16, 2.01);
   fillGlobalBuffers(as_0);
   int li_40 = openOutputFile();
   lda_16[0] = iCustom(NULL, 0, "Synergy_TradeSignal", "verInfo_AS", 0, 0);
   lsa_20[0] = "Synergy_TradeSignal";
   lda_16[1] = iCustom(NULL, 0, "Synergy_Continuation", "verInfo_AS", 0, 0);
   lsa_20[1] = "Synergy_Continuation";
   lda_16[2] = iCustom(NULL, 0, "Synergy_Volatility", "verInfo_AS", 0, 0);
   lsa_20[2] = "Synergy_Volatility";
   lda_16[3] = iCustom(NULL, 0, "Synergy_DSR", "verInfo_AS", 0, 0);
   lsa_20[3] = "Synergy_DSR";
   lda_16[4] = iCustom(NULL, 0, "Synergy_TDI", "verInfo_AS", 0, 0);
   lsa_20[4] = "Synergy_TDI";
   lda_16[5] = iCustom(NULL, 0, "Synergy_HeikenAshi", "verInfo_AS", 0, 0);
   lsa_20[5] = "Synergy_HeikenAshi";
   lda_16[6] = iCustom(NULL, 0, "Synergy_RangeFactor", "verInfo_AS", 0, 0);
   lsa_20[6] = "Synergy_RangeFactor";
   lda_16[7] = iCustom(NULL, 0, "Synergy_MTF", "verInfo_AS", 0, 0);
   lsa_20[7] = "Synergy_MTF";
   lda_16[8] = iCustom(NULL, 0, "Synergy_TradeTargets", "verInfo_AS", 0, 0);
   lsa_20[8] = "Synergy_TradeTargets";
   for (int li_32 = 0; li_32 < gi_76; li_32++) {
      for (int li_36 = 0; li_36 < 9; li_36++) {
         if (gsa_88[li_32] == lsa_20[li_36]) {
            li_8 = TRUE;
            Print("Indicator : ", lsa_20[li_36], " Value : ", lda_16[li_36], " Latest Version : ", gda_84[li_32]);
            if (lda_16[li_36] < gda_84[li_32]) {
               gsa_92[li_44] = gsa_88[li_32];
               li_44++;
               if (MathAbs(lda_16[li_36] - gda_84[li_32]) >= 0.05) {
                  li_48 = TRUE;
                  if (!GlobalVariableCheck("rA_synergy")) GlobalVariableSet("rA_synergy", 1);
               }
            }
         }
      }
      if (!li_8) {
         gsa_92[li_44] = gsa_88[li_32];
         li_44++;
      }
      li_8 = FALSE;
   }
   Print("-- Advanced Synergy Version Information --");
   Print("Files that need to be updated: ", li_44);
   if (li_44 > 0) Print("Executing AutoUpdater.exe now...");
   writeOutputFile(li_40, li_44);
   closeOutputFile(li_40, li_44);
   if (li_44 == 0) return (0);
   int li_52 = runAutoUpdater();
   if (li_48 == FALSE) return (0);
   return (1);
}

int openOutputFile() {
   bool li_4;
   FileDelete("as2_update.txt");
   int li_0 = FileOpen("as2_update.txt", FILE_WRITE);
   if (li_0 < 1) {
      Alert("Can not open as2_update.txt for writing!");
      li_4 = TRUE;
   } else li_4 = FALSE;
   if (li_4 == FALSE) return (li_0);
   else return (li_4);
}

void writeOutputFile(int ai_0, int ai_4) {
   FileWrite(ai_0, ai_4);
   for (int li_12 = 0; li_12 < ai_4; li_12++) FileWrite(ai_0, gsa_92[li_12] + ".ex4");
}

void closeOutputFile(int ai_0, int ai_4) {
   FileClose(ai_0);
}

void fillGlobalBuffers(string as_0) {
   string ls_8;
   string ls_16;
   string ls_24;
   int li_32 = -1;
   int li_40 = 0;
   string ls_44 = "";//gGrab(as_0 + "update.php", 0);
   FileDelete("temp.txt");
   int li_36 = FileOpen("temp.txt", FILE_WRITE|FILE_READ);
   if (li_36 < 1) {
      Alert("Can not open temp text file!");
      return;
   }
   Print(ls_44);
   FileWrite(li_36, ls_44);
   FileSeek(li_36, 0, SEEK_SET);
   gi_76 = StrToDouble(FileReadString(li_36));
   while (true) {
      ls_24 = FileReadString(li_36);
      if (StringFind(ls_24, "DONE") != -1) break;
      li_32 = StringFind(ls_24, ",", 0);
      ls_8 = StringSubstr(ls_24, 0, li_32);
      ls_16 = StringSubstr(ls_24, li_32 + 1, StringLen(ls_24) - li_32);
      gda_84[li_40] = StrToDouble(ls_16);
      gsa_88[li_40] = ls_8;
      li_40++;
      if (!(FileIsEnding(li_36))) continue;
      break;
   }
   FileClose(li_36);
}

void logResult(string as_0, int ai_8, string as_12) {
   int li_20 = FileOpen("indicators_debug.txt", FILE_CSV|FILE_WRITE|FILE_READ, ",");
   if (li_20 < 1) {
      Print("Cannot open indicators_debug.txt for appendage!");
      return;
   }
   if (FileSeek(li_20, 0, SEEK_END) == FALSE) {
      Print("Problem seeking to the end of the file! Aborting...");
      return;
   }
   FileWrite(li_20, as_0, TimeCurrent(), ai_8, as_12);
   FileClose(li_20);
}

int init() {
   if (Custom_Indicator == "verInfo_AS") {
      IndicatorBuffers(1);
      SetIndexBuffer(0, gda_80);
      return (0);
   }
   if (Copyright != "98w34988suesdfe") {
      if (!IsDllsAllowed()) {
         Alert("WARNING: Must allow DLL imports. Go to Tools > Options > Expert Advisors and check \"Allow DLL imports\".");
         gi_212 = TRUE;
         return (0);
      }
      switch (Period()) {
      case PERIOD_MN1:
         gd_164 = 0.5;
         break;
      case PERIOD_W1:
         gd_164 = 0.5;
         break;
      case PERIOD_D1:
         gd_164 = 0.4;
         break;
      case PERIOD_H4:
         gd_164 = 0.14;
         break;
      case PERIOD_H1:
         gd_164 = 0.08;
         break;
      case PERIOD_M30:
         gd_164 = 0.05;
         break;
      case PERIOD_M15:
         gd_164 = 0.04;
         break;
      case PERIOD_M5:
         gd_164 = 0.02;
         break;
      case PERIOD_M1:
         gd_164 = 0.01;
      }
      if (MyRange != 0.0) gd_164 = MyRange;
      IndicatorShortName("Range_Factor | www.compassfx.com  ");
      SetIndexStyle(0, DRAW_LINE);
      SetIndexStyle(1, DRAW_LINE);
      SetIndexStyle(2, DRAW_LINE);
      SetIndexBuffer(0, gda_172);
      SetIndexBuffer(1, gda_180);
      SetIndexBuffer(2, gda_176);
      SetIndexLabel(0, "RF Linear Value");
      SetIndexLabel(1, "Upper Limit");
      SetIndexLabel(2, "Lower Limit");
      
      gi_212 = FALSE;
      gi_208 = FileOpen("advsynergy.bin", FILE_CSV|FILE_READ);
      if (gi_208 < 1) {
         gi_268 = FALSE;
         if (installerRunning()!= 1) {
            gi_212 = TRUE;
            return (0);
         }
         runAutoInstaller();
         gi_212 = TRUE;
         return (0);
      }
      gs_248 = FileReadString(gi_208);
      gs_256 = FileReadString(gi_208);
      gi_264 = StrToInteger(FileReadString(gi_208));
      gs_300 = FileReadString(gi_208);
      if (gs_300 == "") gs_300 = "x";
      FileClose(gi_208);
      gi_268 = TRUE;
      gs_232 = gs_248;
      gs_240 = gs_256;
      if (GlobalVariableCheck("aSyn")) {
         gi_272 = GlobalVariableGet("aSyn");
         gi_276 = TimeLocal();
         if (gi_272 > gi_276) {
            gi_212 = mylogin(gs_248, gs_256);
            if (gi_308 == 1) {
               gi_212 = mylogin(gs_248, gs_256);
               gi_308 = -1;
            }
            if (gi_212) return (0);
         }
         if (gi_276 - gi_272 >= 1800) {
            gi_212 = mylogin(gs_248, gs_256);
            if (gi_308 == 1) {
               gi_212 = mylogin(gs_248, gs_256);
               gi_308 = -1;
            }
            if (gi_212) return (0);
         }
         if (gi_276 - gi_272 <= gi_280) return (0);
         gi_212 = mykeepalive();
         if (gi_308 == 1) {
            gi_212 = mykeepalive();
            gi_308 = -1;
         }
         if (!(gi_212)) return (0);
         return (0);
      }
      gi_212 = mylogin(gs_248, gs_256);
      if (gi_308 == 1) {
         gi_212 = mylogin(gs_248, gs_256);
         gi_308 = -1;
      }
      return (0);
   }
   SetIndexBuffer(0, gda_180);
   return (0);
}

int start() {
 
  // if (gi_212) return (0);
   //  Comment("Running");
   if (Custom_Indicator == "verInfo_AS") {
      gda_80[0] = 2.02;
      return (0);
   }
   if (Copyright == "98w34988suesdfe") {
      gda_180[0] = 14325.112;
      return (0);
   }
   if (Copyright != "98w34988suesdfe" && !gi_224) {
      gi_224 = TRUE;
      gs_216 = "Synergy_RangeFactor";
      if (checkFilename() == -1) {
         gi_212 = TRUE;
         Alert("Filename has been changed -- Indicator haulting");
         return (-1);
      }
   }
   
   if (!gi_212) {
      if (GlobalVariableCheck("aSyn")) {
         gi_272 = GlobalVariableGet("aSyn");
         gi_276 = TimeLocal();
         if (gi_272 > gi_276) {
            gi_212 = mylogin(gs_248, gs_256);
            if (gi_308 == 1) {
               gi_212 = mylogin(gs_248, gs_256);
               gi_308 = -1;
            }
            if (gi_212) return (0);
         }
         if (gi_276 - gi_272 >= 900) {
            gi_212 = mylogin(gs_248, gs_256);
            if (gi_308 == 1) {
               gi_212 = mylogin(gs_248, gs_256);
               gi_308 = -1;
            }
            if (gi_212) return (0);
         }
         if (gi_276 - gi_272 > gi_280) {
            gi_212 = mykeepalive();
            if (gi_308 == 1) {
               gi_212 = mykeepalive();
               gi_308 = -1;
            }
            if (gi_212) return (0);
         }
      } else {
         resetIndy();
         gi_212 = TRUE;
         return (0);
      }
   }
   int li_4 = IndicatorCounted();
   double ld_8 = 0;
   double ld_16 = 0;
   double ld_24 = 0;
   if (li_4 < 0) return (-1);
   int li_32 = Bars - li_4;
   if (li_32 > Bars - 34 - 1) li_32 = Bars - 34 - 1;
   for (int li_36 = 0; li_36 <= li_32; li_36++) {
      ld_8 = 100.0 * (iMA(NULL, 0, 3, 0, MODE_LWMA, PRICE_CLOSE, li_36) - iMA(NULL, 0, 34, 0, MODE_LWMA, PRICE_CLOSE, li_36)) * iATR(NULL, 0, 3, li_36) + 0.00001;
      ld_16 = ld_8 / iMA(NULL, 0, 34, 0, MODE_LWMA, PRICE_CLOSE, li_36) / iATR(NULL, 0, 34, li_36);
      ld_24 = (MathExp(2.0 * ld_16) - 1.0) / (MathExp(2.0 * ld_16) + 1.0);
      gda_172[li_36] = ld_24;
      gda_176[li_36] = -gd_164;
      gda_180[li_36] = gd_164;
   }
   
   return (0);
}

int checkFilename() {
   double ld_0 = iCustom(NULL, 0, gs_216, "", "98w34988suesdfe", "", "", "", "", 0, "", 0, 0);
   if (ld_0 != 14325.112) return (-1);
   else return (1);
}

int mylogin(string as_0, string as_8) {
   string ls_16;
   int li_24;
   int li_28;
   int li_40;
   if (GlobalVariableCheck("rA_synergy")) {
      if (isExeRunning() != 1) {
         gi_212 = TRUE;
         return (1);
      }
      GlobalVariableDel("rA_synergy");
   }
   int li_32 = -1;
   string ls_44 = StringConcatenate(gs_284, "login_test.php");
   string ls_52 = StringConcatenate("user=", as_0, "&pass=", as_8, "&ver=2%2E1");
   string ls_60 = "";//gGrab(ls_44, ls_52);
   if (StringSubstr(ls_60, 0, 1) == "0") li_32 = 0;
   if (StringSubstr(ls_60, 0, 1) == "2") li_32 = 2;
   if (StringSubstr(ls_60, 0, 1) == "3") li_32 = 3;
   if (StringSubstr(ls_60, 0, 1) == "4") li_32 = 4;
   if (StringSubstr(ls_60, 0, 1) == "6") li_32 = 6;
   if (StringSubstr(ls_60, 0, 1) == "7") li_32 = 7;
   GlobalVariableDel("advSynSW");
   logResult("RangeFactor", li_32, " LOGIN");
   switch (li_32) {
   case 0:
      gi_212 = doLoginCheck(gs_284);
      if (gi_212) return (1);
      li_24 = StringFind(ls_60, "SVR=");
      li_28 = StringFind(ls_60, "DONE");
      li_40 = StringFind(ls_60, "zZD1");
      if (li_24 == -1) gs_300 = "x";
      else {
         if (li_28 == -1) gs_300 = "x";
         gs_300 = StringSubstr(ls_60, li_24 + 4, li_28 - li_24 - 4);
      }
      gi_280 = StrToInteger(StringSubstr(ls_60, 4, li_40 - 4));
      if (gi_280 <= 0) gi_280 = 180;
      if (gi_280 >= 600) gi_280 = 600;
      gi_228 = TimeLocal();
      gs_232 = as_0;
      gs_240 = as_8;
      GlobalVariableSet("aSyn", TimeLocal());
      gi_208 = FileOpen("advsynergy.bin", FILE_WRITE, 8);
      if (gi_208 < 1) {
         Print("Cannot open password cache!");
         return (0);
      }
      FileWrite(gi_208, gs_248);
      FileWrite(gi_208, gs_256);
      FileWrite(gi_208, TimeLocal());
      FileWrite(gi_208, gs_300);
      FileClose(gi_208);
      return (0);
   case 7:
      Alert(StringSubstr(ls_60, 4, StringLen(ls_60)));
      gi_228 = TimeLocal();
      gs_232 = gs_248;
      GlobalVariableSet("aSyn", TimeLocal());
      gi_208 = FileOpen("advsynergy.bin", FILE_WRITE, 8);
      if (gi_208 < 1) {
         Print("Cannot open password cache!");
         return (0);
      }
      FileWrite(gi_208, gs_248);
      FileWrite(gi_208, gs_256);
      FileWrite(gi_208, TimeLocal());
      FileClose(gi_208);
      return (0);
   case 6:
      Alert(StringSubstr(ls_60, 4, StringLen(ls_60)));
      if (gi_268) FileDelete("advsynergy.bin");
      return (1);
   case 2:
      Alert("Incorrect EMail -- Please check your EMail address spelling.");
      if (gi_268) FileDelete("advsynergy.bin");
      return (1);
   case 3:
      Alert("Email OK -- Incorrect Password!\n Please check your password spelling\n and make sure Caps Lock is NOT on.");
      if (gi_268) FileDelete("advsynergy.bin");
      return (1);
   case 4:
      Alert("Your account has been disabled!\n Please contact support@compassfx.com");
      if (gi_268) FileDelete("advsynergy.bin");
      return (1);
   case -1:
      if (gs_300 != "x" && gs_300 != "" && gs_292 != gs_300) gs_292 = gs_300;
      if (gs_284 == gs_292) {
         if (IsConnected()) {
            Alert("Connection Error!\n An error connecting to the Internet has occurred.\n Please close MetaTrader and re-open.");
            resetIndy();
            return (1);
         }
         gi_96 = FileOpen("advsynergy.bin", FILE_CSV|FILE_READ);
         if (gi_96 < 1) return (1);
         FileClose(gi_96);
         gs_232 = as_0;
         gs_240 = as_8;
         GlobalVariableSet("aSyn", TimeLocal());
         return (0);
      }
      gs_284 = gs_292;
      gi_308 = 1;
      return (1);
   }
   return (0);
}

int mykeepalive() {
   int li_0 = -1;
   string ls_4 = StringConcatenate(gs_284, "keepalive_new.php");
   string ls_12 = StringConcatenate("user=", gs_232, "&pass=", gs_240);
   string ls_20 = "";//gGrab(ls_4, ls_12);
   if (StringSubstr(ls_20, 0, 1) == "0") li_0 = 0;
   if (StringSubstr(ls_20, 0, 1) == "1") li_0 = 1;
   if (StringSubstr(ls_20, 0, 1) == "2") li_0 = 2;
   if (StringSubstr(ls_20, 0, 1) == "3") li_0 = 3;
   if (StringSubstr(ls_20, 0, 1) == "4") li_0 = 4;
   if (StringSubstr(ls_20, 0, 1) == "5") li_0 = 5;
   if (li_0 != -1)
      if (GlobalVariableCheck("advSynSW")) GlobalVariableDel("advSynSW");
   logResult("RangeFactor", li_0, DoubleToStr(GlobalVariableCheck("advSynSW"), 0) + " -- KEEPALIVE");
   switch (li_0) {
   case 1:
      gi_212 = mylogin(gs_232, gs_240);
      if (gi_308 == 1) {
         gi_212 = mylogin(gs_232, gs_240);
         gi_308 = -1;
      }
      return (0);
   case 2:
      Alert("Your account has been logged into from a different computer.\n  This connection has been terminated.");
      resetIndy();
      return (1);
   case 3:
      Alert("Your username was not found in our database of logged in users.\n Please close indicators and re-open\n them to re-login.");
      resetIndy();
      return (1);
   case 4:
      Alert(StringSubstr(ls_20, 4, StringLen(ls_20)));
      GlobalVariableSet("aSyn", TimeLocal());
      break;
   case 5:
      Alert(StringSubstr(ls_20, 4, StringLen(ls_20)));
      resetIndy();
      return (1);
   case -1:
      if (gs_300 != "x" && gs_300 != "" && gs_300 != gs_292) gs_292 = gs_300;
      if (gs_284 == gs_292) {
         if (GlobalVariableCheck("advSynSW")) {
            if (TimeLocal() - GlobalVariableGet("advSynSW") <= 1200.0) break;
            if (IsConnected()) {
               Alert("Connection Error!\n An error connecting to the Internet has occurred.\n Please close MetaTrader and re-open.");
               resetIndy();
               return (1);
            }
            gi_96 = FileOpen("advsynergy.bin", FILE_CSV|FILE_READ);
            if (gi_96 < 1) return (1);
            FileClose(gi_96);
            return (0);
         }
         GlobalVariableSet("advSynSW", TimeLocal());
      } else {
         gs_284 = gs_292;
         gi_308 = 1;
         return (1);
      }
      break;
   }
   GlobalVariableSet("aSyn", TimeLocal());
   return (0);
}

void resetIndy() {
   ArrayInitialize(gda_172, EMPTY_VALUE);
   ArrayInitialize(gda_180, EMPTY_VALUE);
   ArrayInitialize(gda_176, EMPTY_VALUE);
   GlobalVariableDel("aSyn");
   GlobalVariableDel("advSynSW");
}

int installerRunning(){
return(0);
}
void runAutoInstaller(){
}
int runAutoUpdater(){return(0);}
int isExeRunning(){return(0);}

Comments