//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Goldenrod


extern string StartDateTime="2009.09.01 12:00";  

extern double Deposit     = 0;                
extern string Type        = "buy;buy;buy";           
extern string Lots        = "0.2;0.3;0.3";          
extern string Symb        = "EURUSD;USDCHF;EURCHF";    

double Equity[];



int    Types[];         
double Lots_[];        
string Symbols[];      

int PozTotal,PozTotal_t,PozTotal_s,PozTotal_l;  
bool Error;
datetime StartTime; 

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Equity);

   ReadTypes();
   ReadLots();
   ReadSymbol();
   Error=false;
   if(PozTotal_t!=PozTotal_s || PozTotal_t!=PozTotal_l || PozTotal_s!=PozTotal_l) Error=true;
   PozTotal=PozTotal_t;
   
   StartTime=StrToTime(StartDateTime);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int limit,i, StartBar;

//----
   if(Error)
     {
     Print("ERROR!");
     Alert("ERROR!");
     return(-1);
     }
   
   StartBar=iBarShift(Symbol(),Period(),StartTime,false);
      
   for(i=StartBar;i>=0;i--)
     {
     Equity[i]=CalcEquity(i,StartBar);
     }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

void ReadTypes() {
  int    i=0, np;
  string st, tmp=Type;
  ArrayResize(Types, 0);

  while (StringLen(tmp)>0) {
    np=StringFind(tmp, ";");
    if (np<0) {
      st=tmp;
      tmp="";
    } else {
      st=StringSubstr(tmp, 0, np);
      tmp=StringSubstr(tmp, np+1);
    }
    i++;
    ArrayResize(Types, i);
    PozTotal_t=i-1;
    if (st=="buy") Types[i-1]=0; else Types[i-1]=1;
  }
}

//+----------------------------------------------------------------------------+

void ReadLots() {
  int    i=0, np;
  string st, tmp=Lots;
  ArrayResize(Lots_, 0);

  while (StringLen(tmp)>0) {
    np=StringFind(tmp, ";");
    if (np<0) {
      st=tmp;
      tmp="";
    } else {
      st=StringSubstr(tmp, 0, np);
      tmp=StringSubstr(tmp, np+1);
    }
    i++;
    ArrayResize(Lots_, i);
    PozTotal_l=i-1;
    Lots_[i-1]=StrToDouble(st);
  }
}

//+----------------------------------------------------------------------------+

void ReadSymbol() {
  int    i=0, np;
  string st, tmp=Symb;
  ArrayResize(Symbols, 0);

  while (StringLen(tmp)>0) {
    np=StringFind(tmp, ";");
    if (np<0) {
      st=tmp;
      tmp="";
    } else {
      st=StringSubstr(tmp, 0, np);
      tmp=StringSubstr(tmp, np+1);
    }
    i++;
    ArrayResize(Symbols, i);
    PozTotal_s=i-1;
    Symbols[i-1]=st;
  }
}

//+----------------------------------------------------------------------------+

double CalcEquity(int j, int StartShift)
  {
  double res, sum, k2, l_bl;
  double ProfitBaseVal; 
  double ProfitUSD;
  int i;
  string BaseVal;
  datetime Time_j=Time[j];
  
  sum=0.;
  for(i=0; i<=PozTotal; i++)
    {
    if(Types[i]==0)  // buy
      {
      k2=iClose(Symbols[i],Period(),iBarShift(Symbols[i],Period(),Time_j,false));
      ProfitBaseVal=Lots_[i]*MarketInfo(Symbols[i],MODE_LOTSIZE)*(k2-iOpen(Symbols[i],Period(),iBarShift(Symbols[i],Period(),StartTime,false)))/k2;
      }
    else
      {
      l_bl=Lots_[i]*MarketInfo(Symbols[i],MODE_LOTSIZE);
      ProfitBaseVal=l_bl*iOpen(Symbols[i],Period(),iBarShift(Symbols[i],Period(),StartTime,false))/iClose(Symbols[i],Period(),iBarShift(Symbols[i],Period(),Time_j,false))-l_bl;
      }

    BaseVal=StringSubstr(Symbols[i],0,3);
    if(BaseVal=="USD") ProfitUSD=ProfitBaseVal;
    if(BaseVal=="EUR") ProfitUSD=ProfitBaseVal*iClose("EURUSD",Period(),iBarShift("EURUSD",Period(),Time_j,false));
    if(BaseVal=="GBP") ProfitUSD=ProfitBaseVal*iClose("GBPUSD",Period(),iBarShift("GBPUSD",Period(),Time_j,false));
    if(BaseVal=="AUD") ProfitUSD=ProfitBaseVal*iClose("AUDUSD",Period(),iBarShift("AUDUSD",Period(),Time_j,false));
    if(BaseVal=="NZD") ProfitUSD=ProfitBaseVal*iClose("NZDUSD",Period(),iBarShift("NZDUSD",Period(),Time_j,false));
    if(BaseVal=="CHF") ProfitUSD=ProfitBaseVal/iClose("USDCHF",Period(),iBarShift("USDCHF",Period(),Time_j,false));
    if(BaseVal=="CAD") ProfitUSD=ProfitBaseVal/iClose("USDCAD",Period(),iBarShift("USDCAD",Period(),Time_j,false));
    
    sum=sum+ProfitUSD;
    }

  res=sum+Deposit;
  
  return(res);
  }
//+----------------------------------------------------------------------------+