//+------------------------------------------------------------------+
//|                                    Ahmad samir Virtual Trade.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property copyright ""
#property link      "" 

#property indicator_chart_window

extern double Lot = 0.1;
extern bool Show_Jump_Alert = FALSE;
extern string ProfitPerLotAre = "Profit 1 pips per Lot";
extern string SetForSell = "==Pairs for SELL==";
extern string Pair.1st = "NZDJPY";
extern string Pair.2nd = "EURCHF";
extern string Pair.3rd = "CHFJPY";
extern string Pair.4th = "GBPCHF";
extern string Pair.5th = "EURUSD";
extern string Pair.6th = "AUDUSD";
extern string Pair.7th = "USDJPY";
extern string SetForBuy = "==Pairs for BUY==";
extern string Pair.8th = "GBPJPY";
extern string Pair.9th = "GBPUSD";
extern string Pair.10th = "AUDJPY";
extern string Pair.11th = "NZDUSD";
extern string Pair.12th = "EURGBP";
extern string Pair.13th = "USDCHF";
extern string Pair.14th = "EURJPY";
extern string Comm1 = "Coordinates";
extern int Side = 1;
extern int MP_Y = 20;
extern int MP_X = 10;
double gd_244;
double gda_252[];
extern string Colors_Setting = "Colors";
extern color Title = Goldenrod;
extern color Head = Blue;
extern color SlotsSELL = Red;
extern color SlotsBUY = LimeGreen;
extern color Total = Goldenrod;
string gs_284 = "T101_vrtual_";
string gs_292;
int g_color_300;
int g_timeframe_304;

int init() {
   return (0);
}

int deinit() {
   string l_name_4;
   Comment("");
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.1st, 1));
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.2nd, 2));
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.3rd, 3));
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.4th, 4));
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.5th, 5));
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.6th, 6));
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.7th, 7));
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.8th, 8));
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.9th, 9));
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.10th, 10));
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.11th, 11));
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.12th, 12));
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.13th, 13));
   GlobalVariablesDeleteAll(StringConcatenate("Pj - Slot BTS", Pair.14th, 14));
   for(int i = ObjectsTotal() - 1; i >= 0; i--)
     {
       string label = ObjectName(i);
       ObjectDelete(label);   
   }
   return (0);
}

int start() {
   gs_292 = "H1";
   g_timeframe_304 = 60;
   MP_X = 10;
   gs_284 = "T101_vrtual_" + g_timeframe_304;
   main();
   gs_292 = "H4";
   g_timeframe_304 = 240;
   MP_X = 210;
   gs_284 = "T101_vrtual_" + g_timeframe_304;
   main();
   gs_292 = "D1";
   g_timeframe_304 = 1440;
   MP_X = 410;
   gs_284 = "T101_vrtual_" + g_timeframe_304;
   main();
   return (0);
}

int main() {
   int l_ind_counted_0 = IndicatorCounted();
   double ld_4 = 0;
   double ld_12 = 0;
   for (int l_pos_20 = 0; l_pos_20 <= OrdersTotal(); l_pos_20++) {
      if (OrderSelect(l_pos_20, SELECT_BY_POS) == TRUE) {
         if (OrderType() == OP_BUY) ld_12 += OrderProfit();
         if (OrderType() == OP_SELL) ld_4 += OrderProfit();
      }
   }
   Write("Title", Side, MP_X + 20, MP_Y + 20, "T101 virtual trades " + gs_292, 10, "Verdana", Title);
   Write("NONE", Side, MP_X + 10, MP_Y + 40, "NONE", 18, "Verdana", Total);
   tempDel("LONG WEAK");
   tempDel("SHORT WEAK");
   tempDel("SHORT STRONG");
   tempDel("LONG STRONG");
   if (sumSELL() < 0.0 && sumBUY() > 0.0) {
      Write("LONG STRONG", Side, MP_X + 10, MP_Y + 40, "LONG STRONG", 18, "Verdana", Lime);
      tempDel("LONG WEAK");
      tempDel("NONE");
      tempDel("SHORT WEAK");
      tempDel("SHORT STRONG");
   }
   if (sumSELL() > 0.0 && sumBUY() > 0.0 && sumBUY() > sumSELL()) {
      Write("LONG WEAK", Side, MP_X + 10, MP_Y + 40, "LONG WEAK", 18, "Verdana", Lime);
      tempDel("LONG STRONG");
      tempDel("NONE");
      tempDel("SHORT WEAK");
      tempDel("SHORT STRONG");
   }
   if (sumSELL() > 0.0 && sumBUY() < 0.0) {
      Write("SHORT STRONG", Side, MP_X + 10, MP_Y + 40, "SHORT STRONG", 18, "Verdana", Red);
      tempDel("SHORT WEAK");
      tempDel("NONE");
      tempDel("LONG WEAK");
      tempDel("LONG STRONG");
   }
   if (sumSELL() > 0.0 && sumBUY() > 0.0 && sumBUY() < sumSELL()) {
      Write("SHORT WEAK", Side, MP_X + 10, MP_Y + 40, "SHORT WEAK", 18, "Verdana", Red);
      tempDel("NONE");
      tempDel("SHORT STRONG");
      tempDel("LONG WEAK");
      tempDel("LONG STRONG");
   }
   for (l_pos_20 = 0; l_pos_20 < 14; l_pos_20++) {
      if (TradeType(CheckPairRank(l_pos_20 + 1)) == "Sell") g_color_300 = SlotsSELL;
      else g_color_300 = SlotsBUY;
      Write(l_pos_20 + "_", Side, MP_X + 150, MP_Y + 90 + 15 * l_pos_20, (l_pos_20 + 1) + ":  ", 11, "Verdana", g_color_300);
      Write(l_pos_20 + "T", Side, MP_X + 125, MP_Y + 90 + 15 * l_pos_20, TradeType(CheckPairRank(l_pos_20 + 1)), 11, "Verdana", g_color_300);
      Write(l_pos_20 + "O", Side, MP_X + 55, MP_Y + 90 + 15 * l_pos_20, CheckPairRank(l_pos_20 + 1), 11, "Verdana", g_color_300);
      Write(l_pos_20 + "P", Side, MP_X + 1, MP_Y + 90 + 15 * l_pos_20, DoubleToStr(CheckPairProfit(CheckPairRank(l_pos_20 + 1)), 2), 11, "Verdana", g_color_300);
   }
   Write("===", Side, MP_X + 1, MP_Y + 300, "_____________________", 12, "Verdana", Total);
   Write("Sum", Side, MP_X + 1, MP_Y + 335, DoubleToStr(sum(), 2), 20, "Impact", clr_sum(sum()));
   if (Show_Jump_Alert) {
      RankChangeAlert(Pair.1st, 1);
      RankChangeAlert(Pair.2nd, 2);
      RankChangeAlert(Pair.3rd, 3);
      RankChangeAlert(Pair.4th, 4);
      RankChangeAlert(Pair.5th, 5);
      RankChangeAlert(Pair.6th, 6);
      RankChangeAlert(Pair.7th, 7);
      RankChangeAlert(Pair.8th, 8);
      RankChangeAlert(Pair.9th, 9);
      RankChangeAlert(Pair.10th, 10);
      RankChangeAlert(Pair.11th, 11);
      RankChangeAlert(Pair.12th, 12);
      RankChangeAlert(Pair.13th, 13);
      RankChangeAlert(Pair.14th, 14);
   }
   gda_252[0] = sum();
   return (0);
}

double OpenWeek(string a_symbol_0, int ai_8) {
   double l_iopen_12;
   if (ai_8 < 8) l_iopen_12 = iOpen(a_symbol_0, g_timeframe_304, 0);
   else l_iopen_12 = iOpen(a_symbol_0, g_timeframe_304, 0);
   return (l_iopen_12);
}

double ProfitPair(int ai_0) {
   string l_symbol_4;
   double ld_12;
   if (ai_0 == 1) l_symbol_4 = Pair.1st;
   if (ai_0 == 2) l_symbol_4 = Pair.2nd;
   if (ai_0 == 3) l_symbol_4 = Pair.3rd;
   if (ai_0 == 4) l_symbol_4 = Pair.4th;
   if (ai_0 == 5) l_symbol_4 = Pair.5th;
   if (ai_0 == 6) l_symbol_4 = Pair.6th;
   if (ai_0 == 7) l_symbol_4 = Pair.7th;
   if (ai_0 == 8) l_symbol_4 = Pair.8th;
   if (ai_0 == 9) l_symbol_4 = Pair.9th;
   if (ai_0 == 10) l_symbol_4 = Pair.10th;
   if (ai_0 == 11) l_symbol_4 = Pair.11th;
   if (ai_0 == 12) l_symbol_4 = Pair.12th;
   if (ai_0 == 13) l_symbol_4 = Pair.13th;
   if (ai_0 == 14) l_symbol_4 = Pair.14th;
   double ld_20 = MarketInfo(l_symbol_4, MODE_TICKVALUE) / MarketInfo(l_symbol_4, MODE_TICKSIZE) * MarketInfo(l_symbol_4, MODE_POINT);
   RefreshRates();
   if (ai_0 < 8) ld_12 = (OpenWeek(l_symbol_4, ai_0) - MarketInfo(l_symbol_4, MODE_ASK)) / MarketInfo(l_symbol_4, MODE_POINT) * ld_20;
   else ld_12 = (MarketInfo(l_symbol_4, MODE_BID) - OpenWeek(l_symbol_4, ai_0)) / MarketInfo(l_symbol_4, MODE_POINT) * ld_20;
   return (NormalizeDouble(ld_12 * Lot, 2));
}

string CheckPairRank(int ai_0) {
   if (ai_0 == Rank(1)) return (Pair.1st);
   if (ai_0 == Rank(2)) return (Pair.2nd);
   if (ai_0 == Rank(3)) return (Pair.3rd);
   if (ai_0 == Rank(4)) return (Pair.4th);
   if (ai_0 == Rank(5)) return (Pair.5th);
   if (ai_0 == Rank(6)) return (Pair.6th);
   if (ai_0 == Rank(7)) return (Pair.7th);
   if (ai_0 == Rank(8)) return (Pair.8th);
   if (ai_0 == Rank(9)) return (Pair.9th);
   if (ai_0 == Rank(10)) return (Pair.10th);
   if (ai_0 == Rank(11)) return (Pair.11th);
   if (ai_0 == Rank(12)) return (Pair.12th);
   if (ai_0 == Rank(13)) return (Pair.13th);
   if (ai_0 == Rank(14)) return (Pair.14th);
   return ("");
}

double CheckPairProfit(string as_0) {
   if (as_0 == Pair.1st) return (ProfitPair(1));
   if (as_0 == Pair.2nd) return (ProfitPair(2));
   if (as_0 == Pair.3rd) return (ProfitPair(3));
   if (as_0 == Pair.4th) return (ProfitPair(4));
   if (as_0 == Pair.5th) return (ProfitPair(5));
   if (as_0 == Pair.6th) return (ProfitPair(6));
   if (as_0 == Pair.7th) return (ProfitPair(7));
   if (as_0 == Pair.8th) return (ProfitPair(8));
   if (as_0 == Pair.9th) return (ProfitPair(9));
   if (as_0 == Pair.10th) return (ProfitPair(10));
   if (as_0 == Pair.11th) return (ProfitPair(11));
   if (as_0 == Pair.12th) return (ProfitPair(12));
   if (as_0 == Pair.13th) return (ProfitPair(13));
   if (as_0 == Pair.14th) return (ProfitPair(14));
   return (0.0);
}

double sum() {
   double ld_0 = 0;
   for (int li_8 = 1; li_8 < 15; li_8++) ld_0 += ProfitPair(li_8);
   gd_244 = ld_0;
   return (gd_244);
}

int Rank(int ai_0) {
   double lda_4[15];
   for (int li_8 = 14; li_8 > 0; li_8--) lda_4[li_8] = ProfitPair(li_8);
   ArraySort(lda_4, WHOLE_ARRAY, 0, MODE_ASCEND);
   int li_12 = ArrayBsearch(lda_4, ProfitPair(ai_0), WHOLE_ARRAY, 1);
   return (15 - li_12);
}

string TradeType(string as_0) {
   if (as_0 == Pair.1st) return ("Sell");
   if (as_0 == Pair.2nd) return ("Sell");
   if (as_0 == Pair.3rd) return ("Sell");
   if (as_0 == Pair.4th) return ("Sell");
   if (as_0 == Pair.5th) return ("Sell");
   if (as_0 == Pair.6th) return ("Sell");
   if (as_0 == Pair.7th) return ("Sell");
   if (as_0 == Pair.8th) return ("Buy");
   if (as_0 == Pair.9th) return ("Buy");
   if (as_0 == Pair.10th) return ("Buy");
   if (as_0 == Pair.11th) return ("Buy");
   if (as_0 == Pair.12th) return ("Buy");
   if (as_0 == Pair.13th) return ("Buy");
   if (as_0 == Pair.14th) return ("Buy");
   return ("");
}

void RankChangeAlert(string as_0, int ai_8) {
   if (!GlobalVariableCheck(StringConcatenate("Pj - Slot BTS", as_0, ai_8))) GlobalVariableSet(StringConcatenate("Pj - Slot BTS", as_0, ai_8), Rank(ai_8));
   if (GlobalVariableGet(StringConcatenate("Pj - Slot BTS", as_0, ai_8)) <= 7.0) {
      if (Rank(ai_8) > 7) {
         Alert("Passed ", as_0, " With Slots ", GlobalVariableGet(StringConcatenate("Pj - Slot BTS", as_0, ai_8)), " Per Slot ", Rank(ai_8), "");
         GlobalVariableSet(StringConcatenate("Pj - Slot BTS", as_0, ai_8), Rank(ai_8));
      }
   }
   if (GlobalVariableGet(StringConcatenate("Pj - Slot BTS", as_0, ai_8)) >= 8.0) {
      if (Rank(ai_8) < 8) {
         Alert("Has passed ", as_0, " With Slots ", GlobalVariableGet(StringConcatenate("Pj - Slot BTS", as_0, ai_8)), " Per Slot ", Rank(ai_8), "");
         GlobalVariableSet(StringConcatenate("Pj - Slot BTS", as_0, ai_8), Rank(ai_8));
      }
   }
   if (GlobalVariableGet(StringConcatenate("Pj - Slot BTS", as_0, ai_8)) != Rank(ai_8)) GlobalVariableSet(StringConcatenate("Pj - Slot BTS", as_0, ai_8), Rank(ai_8));
}

void Write(string as_0, double a_corner_8, int a_x_16, int a_y_20, string a_text_24, int ai_32, string a_fontname_36, color a_color_44 = -1) {
   ObjectCreate(gs_284 + as_0, OBJ_LABEL, 0, 0, 0);
   ObjectSetText(gs_284 + as_0, a_text_24, ai_32 - 2, a_fontname_36, a_color_44);
   ObjectSet(gs_284 + as_0, OBJPROP_CORNER, a_corner_8);
   ObjectSet(gs_284 + as_0, OBJPROP_XDISTANCE, a_x_16);
   ObjectSet(gs_284 + as_0, OBJPROP_YDISTANCE, a_y_20);
}

double sumSELL() {
   double ld_0 = 0;
   for (int li_8 = 1; li_8 < 8; li_8++) ld_0 += ProfitPair(li_8);
   gd_244 = ld_0;
   return (gd_244);
}

double sumBUY() {
   double ld_0 = 0;
   for (int li_8 = 8; li_8 < 15; li_8++) ld_0 += ProfitPair(li_8);
   gd_244 = ld_0;
   return (gd_244);
}

void tempDel(string as_0) {
   string l_name_12;
   for (int li_8 = ObjectsTotal() - 1; li_8 >= 0; li_8--) {
      l_name_12 = ObjectName(li_8);
      if (StringFind(l_name_12, gs_284 + as_0) != -1) ObjectDelete(l_name_12);
   }
}

int clr_sum(double ad_0) {
   if (ad_0 > 0.0) return (32768);
   if (ad_0 < 0.0) return (4678655);
   if (ad_0 == 0.0) return (8421504);
   return (0);
}