VIC_Currency_Manager





//+------------------------------------------------------------------+
//|                                         VIC Currency Manager.mq4 |
//|                                                 Copyright © 2007 |
//|                           http://www.automatedtradingmastery.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007"
#property link      "http://www.automatedtradingmastery.com"

extern int viewmode=1; //1=global Info
int acc=1;
int accobj;
double MN_Array[100];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   ObjectCreate("VCC_Title", OBJ_LABEL, 0, 0, 0);
   ObjectSet("VCC_Title", OBJPROP_XDISTANCE, 210);
   ObjectSet("VCC_Title", OBJPROP_YDISTANCE, 0);
   ObjectSetText("VCC_Title", "MT4-Currency Manager V1.0", 13, "Verdana", Yellow);
   createRec(8,250,1,Yellow,acc,210,19);acc++;
   if(viewmode==1){
   createRec(8,5,30,Red,acc,220,40);acc++;
   createRec(8,5,30,Red,acc,440,40);acc++;
   createText("Global Information",11,White,acc,5,40);acc++;
   createText("Historical Information",10,White,acc,235,40);acc++;
   createText("EA Information",10,White,acc,455,40);acc++;
   }
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  accobj=acc;
  for(int index1=0;index1<=100;index1++){
      MN_Array[index1]=999999999999;
   }   
  if(viewmode==1){
  double AccPercentage=(AccountEquity()/AccountBalance())*100;
  double currentDD=100-AccPercentage;
  createText("Server = "+AccountServer(),9,White,accobj,5,60);accobj++;
  createText("Account Type = "+detectAccType(),9,White,accobj,5,75);accobj++;
  createText("Leverage = 1:"+AccountLeverage(),9,White,accobj,5,90);accobj++;
  createText("Total Active Order = "+TotalTrade(0,0,""),9,White,accobj,5,105);accobj++;
  createText("Total BUY Position = "+TotalTrade(1,0,""),9,White,accobj,5,120);accobj++;
  createText("Total SELL Position = "+TotalTrade(2,0,""),9,White,accobj,5,135);accobj++;
  createText("Total PENDING Position = "+TotalTrade(3,0,""),9,White,accobj,5,150);accobj++;
  createText("Total Floating P/L = $"+DoubleToStr(TotalProfit(0,""),2),9,White,accobj,5,165);accobj++;
  if(currentDD>0){
  createText("Current DD (%)="+DoubleToStr(currentDD,2)+"%",9,White,accobj,5,180);accobj++;
  }else{
  createText("Current Profit (%)="+DoubleToStr(currentDD*(0.0-1.0),2)+"%",9,White,accobj,5,180);accobj++;
  }
  createText("Equity (%)="+DoubleToStr(AccPercentage,2)+"%",9,White,accobj,5,195);accobj++;
  createText("Active Magic Number:",9,White,accobj,5,210);accobj++;
  findMagicNumber(5,225);
  }
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
      string  buff_str = "";
   for(int i=ObjectsTotal()-1;i>=0;i--){
      buff_str = ObjectName(i);
      if(StringFind(buff_str,"VCC_",0)==0) ObjectDelete(buff_str);
      }
//----
   return(0);
  }
void createRec(int fontsize,int width,int height,color c,int curobj,int XPOS,int YPOS){
   string buffstr="VCC_OBJ_"+curobj;
   for (int tempIDX_Y=0;tempIDX_Y<height;tempIDX_Y++){
      for (int tempIDX = 0; tempIDX <= width; tempIDX++) {
      ObjectCreate(buffstr + DoubleToStr(tempIDX, 0)+DoubleToStr(tempIDX_Y, 0), OBJ_LABEL, 0, 0, 0, 0, 0, 0, 0);
      ObjectSetText(buffstr + DoubleToStr(tempIDX, 0)+DoubleToStr(tempIDX_Y, 0), "|", fontsize, "Times New Roman", c);
      ObjectSet(buffstr + DoubleToStr(tempIDX, 0)+DoubleToStr(tempIDX_Y, 0), OBJPROP_XDISTANCE, tempIDX+XPOS);
      ObjectSet(buffstr + DoubleToStr(tempIDX, 0)+DoubleToStr(tempIDX_Y, 0), OBJPROP_YDISTANCE, YPOS);
      }
      YPOS+=fontsize;
   }
}

void createText(string content,int fontsize,color c,int curobj,int XPOS,int YPOS){
   string buffstr="VCC_OBJ_"+curobj;
         ObjectCreate(buffstr, OBJ_LABEL, 0, 0, 0, 0, 0, 0, 0);
         ObjectSetText(buffstr, content, fontsize, "Times New Roman", c);
         ObjectSet(buffstr, OBJPROP_XDISTANCE, XPOS);
         ObjectSet(buffstr, OBJPROP_YDISTANCE, YPOS);

}

string detectAccType(){
string AccountType;
int AccType=MarketInfo(Symbol(), MODE_LOTSIZE) ;
  if(AccType==10000){
  AccountType="Mini Account";
  }
  if(AccType==100000){
  AccountType="Standard Account";
  }
  if(AccType!=100000&&AccType!=10000){
  AccountType="<cannot detect>";
  }
  return(AccountType);
}

int TotalTrade(int mode,int magicNumber,string pairSymbol) { 
/*
mode 0: ALL
mode 1: BUY
mode 2: SELL
mode 3: PENDING ORDER

*/



   int totalOrder = 0;
   for (int index1 = 0; index1 < OrdersTotal(); index1++) {
      OrderSelect(index1, SELECT_BY_POS, MODE_TRADES);
      if(pairSymbol==""){
         if(magicNumber==0){
               totalOrder=subTotalOrder(mode,totalOrder);
          }else{
            if (OrderMagicNumber() == magicNumber){
               totalOrder=subTotalOrder(mode,totalOrder);
            }
          }                
      }else{
         if(OrderSymbol()==pairSymbol){
              if(magicNumber==0){
                     totalOrder=subTotalOrder(mode,totalOrder);
                }else{
                  if (OrderMagicNumber() == magicNumber){
                     totalOrder=subTotalOrder(mode,totalOrder);
                  }
                }
         }
      }
      
   }
   return (totalOrder);
}

int subTotalOrder(int mode,int totalOrder){
      switch(mode){
                     case 0:totalOrder++;
                     break;
                     case 1:if(OrderType()==OP_BUY) totalOrder++;   
                     break;
                     case 2:if(OrderType()==OP_SELL) totalOrder++;           
                     break;
                     case 3:if(OrderType()>OP_SELL) totalOrder++;   
                     break;
            }   
      return(totalOrder);   
}

double TotalProfit(int magicNumber,string pairSymbol) { 
   double total = 0;
   for (int index1 = 0; index1 < OrdersTotal(); index1++) {
      OrderSelect(index1, SELECT_BY_POS, MODE_TRADES);
      if(pairSymbol==""){
         if(magicNumber==0){
               total=total + OrderProfit() + OrderSwap();
          }else{
            if (OrderMagicNumber() == magicNumber){
               total=total + OrderProfit() + OrderSwap();
            }
          }                
      }else{
         if(OrderSymbol()==pairSymbol){
              if(magicNumber==0){
                     total=total + OrderProfit() + OrderSwap();
                }else{
                  if (OrderMagicNumber() == magicNumber){
                     total=total + OrderProfit() + OrderSwap();
                  }
                }
         }
      }
      
   }
   return (total);
}

void findMagicNumber(int XPOS,int YPOS){
int counter=0;
bool foundMN=false;
   for (int index1 = 0; index1 < OrdersTotal(); index1++) {
    OrderSelect(index1, SELECT_BY_POS, MODE_TRADES);
    //createText(OrderMagicNumber(),9,White,accobj,XPOS+5,YPOS+(index1*15));accobj++;
      for(int temp=0;temp<=counter;temp++){
         if(OrderMagicNumber()==MN_Array[temp]){
         foundMN=true;
         break;
         }
      }
      if(foundMN==false){
        MN_Array[counter]=OrderMagicNumber(); 
        createText(OrderMagicNumber(),9,White,accobj,XPOS+5,YPOS+(counter*15));accobj++;
        counter++;
      }else{
         foundMN=false;
      }
   }

   createText("more information : victory1@centrin.net.id",9,White,accobj,XPOS,YPOS+(counter*15));accobj++;
}



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders

Other Features: