//+-----------------------------------------------------------------------+
//|                                                       Krauss-V2.mq4   |
//|                                                          10.01.2014   |
//|                               Copyright © 2014, Dr. Steffen Siegert   |
//|                                                                       |
//|   The author assume no liability for claims incurred cash losses      |
//|   during use of this EA's. The use of this EA's subject to the full   |
//|   responsibility of the user. The user expressly accepts this total   |
//|   exclusion of liability of the author.                               |
//+-----------------------------------------------------------------------+
#property copyright "Copyright © 2014, Dr. Steffen Siegert"
#property link      ""
#include <stdlib.mqh>
#include <WinUser32.mqh>

extern string Caution0 = "------------------------Caution!---------------------------------";
extern string Caution1 = "The author assume no liability for claims";
extern string Caution2 = "incurred cash losses during use of this EAs.";
extern string Caution3 = "The use of this EAs subject to the full";
extern string Caution4 = "responsibility of the user. The user expressly";
extern string Caution5 = "accepts this total exclusion of liability";
extern string Caution6 = "of the author!";
extern string Caution7 = "----------------------------------------------------------------------";

extern string Währungspaare  = ""; 
extern string Triggerwerte = "";
extern string SG1 = "possible TFs: 1,5,15,30,60,240,1440,10080,43200";
extern string TimeFrames  = "";
extern string SF_Value = "";
extern string RSI_Value = "";
extern string Darfactor_Value = "";
extern string SG2 = "possible parts of alert: Symbol,TF,Trigger,OrderType";
extern string AlertText = "";

bool EAWorkingAllowed;
int iDigit;
int SF[];
int RSI[];
double Darfactor[]; 
int TF[];
int TimeOld[][9];
int WPAnz, TriggerAnz, TFAnz, AlertAnz, SFAnz, RSIAnz, DarfactorAnz;
string WP[];
double Trigger[];
string AL[];
string ALString;
string AlertTextChart;

int init() {
   //double QQEA_1   = iCustom(Symbol(), 5, "QQEA", 5, 14, 4.236, 0, 1); //Wert der durchgehenden Linie
   //Alert(QQEA_1);

   bool result = false;
   int i, j,length;
   int cnt;
   string char, str;
   
   AlertTextChart = " "; SetAlert(" ");
   EAWorkingAllowed = true;
   
   //--------------------------------------------
   cnt = 0;
   length = StringLen(Währungspaare);
   for (i = 0; i < length; i++) {
      char = StringSubstr(Währungspaare, i, 1); 
      if (char == ",") cnt++;
   }
   
   WPAnz = cnt + 1;
   ArrayResize(WP, WPAnz);
   cnt = 0;
   str = "";
   j = 0;
   
   for (i = 0; i < length; i++) {
      char = StringSubstr(Währungspaare, i, 1); 
      if (char == ",") {
         j++;
         str = "";
         continue;
      }
      else {
         str = str + char;
         WP[j] = str;
      }
   }
   
   //--------------------------------------------
   length = StringLen(Triggerwerte);
   for (i = 0; i < length; i++) {
      char = StringSubstr(Triggerwerte, i, 1); 
      if (char == ",") cnt++;
   }
   
   TriggerAnz = cnt + 1;
   ArrayResize(Trigger, TriggerAnz);
   cnt = 0;
   str = "";
   j = 0;
   
   for (i = 0; i < length; i++) {
      char = StringSubstr(Triggerwerte, i, 1); 
      if (char == ",") {
         j++;
         str = "";
         continue;
      }
      else {
         str = str + char;
         Trigger[j] = StrToDouble(str);
      }
   }
   
   if (WPAnz != TriggerAnz) {
      SetAlert("WP != Triggerwerte!");
      EAWorkingAllowed = false;
      return(0);
   }
   
   //------------------------------------------
   length = StringLen(TimeFrames);
   for (i = 0; i < length; i++) {
      char = StringSubstr(TimeFrames, i, 1); 
      if (char == ",") cnt++;
   }
   
   TFAnz = cnt + 1;
   ArrayResize(TF, TFAnz);
   ArrayResize(TimeOld, WPAnz);
   ArrayInitialize(TimeOld, 0);
   cnt = 0;
   str = "";
   j = 0;
   
   for (i = 0; i < length; i++) {
      char = StringSubstr(TimeFrames, i, 1); 
      if (char == ",") {
         j++;
         str = "";
         continue;
      }
      else {
         str = str + char;
         TF[j] = StrToInteger(str);
      }
   }
   
   //------------------------------------------
   length = StringLen(AlertText);
   for (i = 0; i < length; i++) {
      char = StringSubstr(AlertText, i, 1); 
      if (char == ",") cnt++;
   }
   
   AlertAnz = cnt + 1;
   ArrayResize(AL, AlertAnz);
   cnt = 0;
   str = "";
   j = 0;
   
   for (i = 0; i < length; i++) {
      char = StringSubstr(AlertText, i, 1); 
      if (char == ",") {
         j++;
         str = "";
         continue;
      }
      else {
         str = str + char;
         AL[j] = str;
      }
   }
   
   //---------------------------------------
   length = StringLen(SF_Value);
   for (i = 0; i < length; i++) {
      char = StringSubstr(SF_Value, i, 1); 
      if (char == ",") cnt++;
   }
   
   SFAnz = cnt + 1;
   ArrayResize(SF, SFAnz);
   cnt = 0;
   str = "";
   j = 0;
   
   for (i = 0; i < length; i++) {
      char = StringSubstr(SF_Value, i, 1); 
      if (char == ",") {
         j++;
         str = "";
         continue;
      }
      else {
         str = str + char;
         SF[j] = StrToDouble(str);
      }
   }
   
   if (TFAnz != SFAnz) {
      SetAlert("TimeFrames != SF_Value!");
      EAWorkingAllowed = false;
      return(0);
   }
   
   //--------------------------------------------
   length = StringLen(RSI_Value);
   for (i = 0; i < length; i++) {
      char = StringSubstr(RSI_Value, i, 1); 
      if (char == ",") cnt++;
   }
   
   RSIAnz = cnt + 1;
   ArrayResize(RSI, RSIAnz);
   cnt = 0;
   str = "";
   j = 0;
   
   for (i = 0; i < length; i++) {
      char = StringSubstr(RSI_Value, i, 1); 
      if (char == ",") {
         j++;
         str = "";
         continue;
      }
      else {
         str = str + char;
         RSI[j] = StrToDouble(str);
      }
   }
   
   if (TFAnz != RSIAnz) {
      SetAlert("TimeFrames != RSI_Value!");
      EAWorkingAllowed = false;
      return(0);
   }
   
   
   //--------------------------------------------
   length = StringLen(Darfactor_Value);
   for (i = 0; i < length; i++) {
      char = StringSubstr(Darfactor_Value, i, 1); 
      if (char == ",") cnt++;
   }
   
   DarfactorAnz = cnt + 1;
   ArrayResize(Darfactor, DarfactorAnz);
   cnt = 0;
   str = "";
   j = 0;
   
   for (i = 0; i < length; i++) {
      char = StringSubstr(Darfactor_Value, i, 1); 
      if (char == ",") {
         j++;
         str = "";
         continue;
      }
      else {
         str = str + char;
         Darfactor[j] = StrToDouble(str);
      }
   }
   
   if (TFAnz != DarfactorAnz) {
      SetAlert("TimeFrames != Darfactor_Value!");
      EAWorkingAllowed = false;
      return(0);
   }
   
   return(0);
}

int deinit() {
   return(0);
}

int start() {
   if (!EAWorkingAllowed) return(0);
   int i, j, buff;
   double QQEA_1, QQEA1;
   double TTPacman;
   string OT; 
   
   for (i = 0; i < WPAnz; i++) {                //über die Anzahl der Währungspaare
      for (j = 0; j < TFAnz; j++) {             //über die Anzahl der TimeFrames
         if (TimeOld[i][j] != iTime(WP[i], TF[j], 0)) {
            for (buff = 0; buff < 4; buff++) {     //über alle 4Indikatorbuffer
               if (MathAbs(iCustom(WP[i], TF[j], "#TT PACMAN TActivator", buff, 1)) != EMPTY_VALUE) {         
                  TTPacman = iCustom(WP[i], TF[j], "#TT PACMAN TActivator", buff, 1);
                  QQEA_1   = iCustom(WP[i], TF[j], "QQEA", SF[j], RSI[j], Darfactor[j], 0, 1); //Wert der durchgehenden Linie
                  QQEA1    = iCustom(WP[i], TF[j], "QQEA", SF[j], RSI[j], Darfactor[j], 1, 1); //Wert der gestrichelten Linie
               
                  OT = "";
                  if (QQEA1 > QQEA_1 && TTPacman > Trigger[i])  OT = "Sell"; //QQEA - Abwärtstrend und TTPacman über +Trriggerwert
                  if (QQEA1 < QQEA_1 && TTPacman < -Trigger[i]) OT = "Buy";  //QQEA - Aufwärtstrend und TTPacman unter -Triggerwert
               
                  if (OT != "") {  
                     DoAlert(WP[i], TF[j], TTPacman, OT);
                     break;
                  }
               }
            }
            TimeOld[i][j] = iTime(WP[i], TF[j], 0);             
         }
      }
   }
   
   return(0);
}

void DoAlert(string wp, int tf, double idvalue, string ot) {
   ALString = "";
   for (int i = 0; i < AlertAnz; i++) {
      if (AL[i] == "Symbol")    ALString = ALString + wp + "  ";
      if (AL[i] == "TF")        ALString = ALString + "TF = " + tf + "  ";
      if (AL[i] == "Trigger")   ALString = ALString + "Indikator = " + DoubleToStr(idvalue, 2) + "  ";
      if (AL[i] == "OrderType") ALString = ALString + ot + "  ";
   }
   Alert(ALString);

}
 
void SetAlert(string alert) {
   ObjectDelete("AlertText");
   ObjectCreate("AlertText", 23, 0, 0, 0);
   ObjectSetText("AlertText", alert, 20, "Arial", Red);
   ObjectSet("AlertText", OBJPROP_CORNER, 0);
   ObjectSet("AlertText", OBJPROP_XDISTANCE, 250);
   ObjectSet("AlertText", OBJPROP_YDISTANCE, 30);
}