Author: Copyright � 2009, MetaQuotes Software Corp.
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself Checks for the total of closed orders
Indicators Used
Indicator of the average true range
Miscellaneous
It issuies visual alerts to the screen
1 Views
0 Downloads
0 Favorites
SWAP (1)
//+------------------------------------------------------------------+
//|                                                         SWAP.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#define        MAXORDERS            1000


extern bool   bUseStopLevelForTS = True;
extern bool   bUseTPLevelFor = True;
extern double    ATRStopPeriod= 14;
extern double    ATRStopRatio = 0.5;
extern double lot           = 0.1;
extern int    MagicNumber    = 777;
extern bool   PolLots        = true;
extern int    MaxOrders      =  1152;
extern double Ratio=1.01;//

extern string  About = "<<< Instant Trade Analyzer >>>";

extern string  AnalyzerSetting = "<<< Analyzer Setting >>>";
extern bool    ChartSymbolOnly = false;
extern int     SpecificMagic = 0;

extern bool    UsePeriod = false;
extern string  From = "2009.01.01";
extern string  Till = "2009.02.01";

extern string  KellySetting = "<<< Optimal f (Kelly) Setting >>>";
extern double  Fractional_Kelly = 0.25;
extern int     StopLoss_for_Kellylot = 3000;

extern string  SkipCommentSetting = "<<< Skip Comment Setting >>>";
extern string  SkipComment_1 = "Deposit";
extern string  SkipComment_2 = "";
extern string  SkipComment_3 = "";
extern string  SkipComment_4 = "";
extern string  SkipComment_5 = "";

string EANAME = "Instant Trade Analyzer";

string SkipComment[];
int SkipComments;

int DQ_ADJUST []  = { 0 , 0 , 1 , 10 , 1 , 10 , 100 };
int DQADJ, Ldig, DIGITS;


int TrailingStop,TakeProfit,prevtime,InitialSL;
double curprof;
bool exit,tickvalue,atrstop;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
      //----------------------- GENERATE MAGIC NUMBER AND TICKET COMMENT
//----------------------- SOURCE : PENGIE
   MagicNumber    = subGenerateMagicNumber(MagicNumber, Symbol(), Period());
   tickvalue = MarketInfo(Symbol(),MODE_TICKVALUE);
   DIGITS = MarketInfo(Symbol(),MODE_DIGITS);
   DQADJ = DQ_ADJUST [ DIGITS ];

   Ldig = 2;
   if(MarketInfo(Symbol(),MODE_MINLOT) > 0.07) Ldig = 1;
   if(MarketInfo(Symbol(),MODE_MINLOT) > 0.7) Ldig = 0;

   int i=0;
   if(SkipComment_1 != "") { SkipComment[i] = SkipComment_1; i++; }
   if(SkipComment_2 != "") { SkipComment[i] = SkipComment_2; i++; }
   if(SkipComment_3 != "") { SkipComment[i] = SkipComment_3; i++; }
   if(SkipComment_4 != "") { SkipComment[i] = SkipComment_4; i++; }
   if(SkipComment_5 != "") { SkipComment[i] = SkipComment_5; i++; }

   SkipComments = i;

   Trade_Analyzer();

//----
   return(0);
  }
  
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   CheckTradeContext();
   Trade_Analyzer();


//--------------------------------------------------------------------------------------------------------------  
   
   if(bUseStopLevelForTS)TrailingStop = MarketInfo(Symbol(),MODE_SPREAD);
   if(bUseTPLevelFor)TakeProfit = MarketInfo(Symbol(),MODE_SPREAD);
   if (AccountEquity()/AccountBalance()>Ratio) closeOrders();
   
    atrstop=iATR(NULL,0,ATRStopPeriod,1);
    InitialSL = atrstop*ATRStopRatio/Point;



   int i=0;
   int total = OrdersTotal();   
   for(i = 0; i <= total; i++) 
     {
      if(TrailingStop>0)  
       {                 
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == MagicNumber) 
         {
         TrailingStairs(OrderTicket(),TrailingStop);
         }
       }
      }

bool BuyOp=false;
bool SellOp=false;


if (MarketInfo(Symbol(), MODE_SWAPLONG) > 0) BuyOp=true;
if (MarketInfo(Symbol(), MODE_SWAPSHORT) > 0) SellOp=true;

{

}
   if(Time[0] == prevtime) 
       return(0);
   prevtime = Time[0];
   if(!IsTradeAllowed()) 
     {
       prevtime = Time[1];
       return(0);
     }
      if(Volume[0]>1) return;


   if (total < MaxOrders || MaxOrders == 0)
     {   
       if(BuyOp)
        { 
                 if (InitialSL!=0)
          {

           OrderSend(Symbol(),OP_BUY,lot,Ask,3,Bid-(InitialSL*Point),Bid+TakeProfit*Point,"SWAP_Buy",MagicNumber,0,Green);
          }
         else
          {

           OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0,"SWAP_Buy",MagicNumber,0,Green);
          }
        }
       if(SellOp)
        { 
         if (InitialSL!=0)
          {

           OrderSend(Symbol(),OP_SELL,lot,Bid,3,Ask+(InitialSL*Point),Ask-TakeProfit*Point,"SWAP_Sell",MagicNumber,0,Red);
          } 
         else 
          {

           OrderSend(Symbol(),OP_SELL,lot,Bid,3,0,0,"SWAP_Sell",MagicNumber,0,Red);
          }
        }
      }
   
//----
   return(0);
 
}

//+------------------------------------------------------------------+
void TrailingStairs(int ticket,int trldistance)
   {
    int Spred=Ask - Bid;
    if (OrderType()==OP_BUY)
      {
       if((Bid-OrderOpenPrice())>(Point*trldistance))
         {
          if(OrderStopLoss()<Bid-Point*trldistance || (OrderStopLoss()==0))
            {
             OrderModify(ticket,OrderOpenPrice(),Bid-Point*trldistance,OrderTakeProfit(),0,Blue);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,2)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,2),Ask,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Ask,3,Green);
               }
            }
         }
       }
     else
       {
        if((OrderOpenPrice()-Ask)>(Point*trldistance))
          {
           if((OrderStopLoss()>(Ask+Point*trldistance)) || (OrderStopLoss()==0))
             {
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*trldistance,OrderTakeProfit(),0,Red);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,2)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,2),Bid,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Bid,3,Green);
               }
             }
          }
        }
    }
//-----------------------------------------    

void CheckTradeContext()
{
   if(!IsTradeAllowed())
      {
//        Print("Trade context is busy! Wait until it is free...");
        // infinite loop
        while(true)
          {
            // if the expert was stopped by the user, stop operation
            if(IsStopped()) 
              { 
//                Print("The expert was stopped by the user!"); 
                return(-1); 
              }
            // if trade context has become free, terminate the loop and start trading
            if(IsTradeAllowed())
              {
//                Print("Trade context has become free!");
                break;
              }
            // if no loop breaking condition has been met, "wait" for 0.1 sec
            // and restart checking
            Sleep(100);
          }
      }
}    
//+------------------------------------------------------------------+
//| Trade Analyzer
//+------------------------------------------------------------------+
void Trade_Analyzer()
{
   string ln = "\n";
   string DAAAAASH = "---------------------------------------------------------------" +ln;

   double BUY_TRADES = Trades(0);
   double SELL_TRADES = Trades(1);
   double TOTAL_TRADES = BUY_TRADES + SELL_TRADES;
   
   if(OrdersHistoryTotal() < 1 || TOTAL_TRADES < 0.9)
   {
      Comment( DAAAAASH + EANAME +ln+ DAAAAASH + "No History to analyze." );
      return(0);
   }

   string COMMENT = "";

// Analyzer Condition --------------------------------------

   // Period
   int PeriodStart = PeriodSearch("Start");
   int PeriodEnd = PeriodSearch("End");
   double PERIOD = PeriodEnd - PeriodStart;

   double PERIODinDAYS = PERIOD/86400;

   if(UsePeriod) COMMENT = COMMENT + "Period : "+ TS(StrToTime(From),"Day") +" - "+ TS(StrToTime(Till),"Day")+" ("+DS2(PERIODinDAYS)+"days)" +ln;
   if(!UsePeriod) COMMENT = COMMENT + "Period : "+ TS(PeriodStart,"Day") +" - "+ TS(PeriodEnd,"Day")+" ("+DS2(PERIODinDAYS)+"days)" +ln;

   // Symbol
   string SYMBOL = "All Symbol";
   if(ChartSymbolOnly) SYMBOL = "Chart Symbol Only ("+Symbol()+")";
   COMMENT = COMMENT + "Symbol : " + SYMBOL +ln;

   // Magic
   string MAGIC = "All Magic";
   if(SpecificMagic > 0) MAGIC = SpecificMagic + " Only";
   COMMENT = COMMENT + "Magic : " + MAGIC +ln;
   
   COMMENT = COMMENT + DAAAAASH; // ---------------------------------------------------------------

// Statistics --------------------------------------

   double BUY_WINS = Wins(0); double BUY_LOSSES = BUY_TRADES - BUY_WINS; 
   double SELL_WINS = Wins(1); double SELL_LOSSES = SELL_TRADES - SELL_WINS; 
   double TOTAL_WINS = BUY_WINS + SELL_WINS; double TOTAL_LOSSES = TOTAL_TRADES - TOTAL_WINS; 

   // Winning Average
   double WinAv_Total = 0.0;
   if(TOTAL_TRADES > 0.001) WinAv_Total = TOTAL_WINS / TOTAL_TRADES;

   double WinAv_Buy = 0.0;
   if(BUY_TRADES > 0.001) WinAv_Buy = BUY_WINS / BUY_TRADES;
   
   double WinAv_Sell = 0.0;
   if(SELL_TRADES > 0.001) WinAv_Sell = SELL_WINS / SELL_TRADES;

   double TradeFrequency = 0.0;
   if(PERIODinDAYS > 0.001) TradeFrequency = TOTAL_TRADES / PERIODinDAYS;

   COMMENT = COMMENT + "Trades : " + DS0(TOTAL_TRADES) +" (Total) / "+DS0(BUY_TRADES) +" (buy) / "+DS0(SELL_TRADES) +" (sell)" +ln;
   COMMENT = COMMENT + "Trade Frequency : "+ DS2( TradeFrequency ) + " trades / day"+ln;

   COMMENT = COMMENT + "Win. Average (Total) : " + DS2(WinAv_Total*100) +"%"+ln;
   COMMENT = COMMENT + "Win. Average (Buy) : " + DS2(WinAv_Buy*100) +"%"+ln;
   COMMENT = COMMENT + "Win. Average (Sell) : " + DS2(WinAv_Sell*100) +"%"+ln;

   COMMENT = COMMENT + DAAAAASH; // ---------------------------------------------------------------

   // Average P/L
   double Buy_Profit = Profit(0);
   double Sell_Profit = Profit(1);
   double Total_Profit = Buy_Profit + Sell_Profit;
   double Buy_Loss = Loss(0);
   double Sell_Loss = Loss(1);
   double Total_Loss = Buy_Loss + Sell_Loss;

   double Total_PL = Total_Profit - Total_Loss;

   double Av_Profit_Total = 0.0;
   if(TOTAL_WINS > 0.001) Av_Profit_Total = Total_Profit / TOTAL_WINS;

   double Av_Loss_Total = 0.0;
   if(TOTAL_LOSSES > 0.001) Av_Loss_Total = Total_Loss / TOTAL_LOSSES;

   double PL_RATIO_Total = 0.0;
   if(Av_Loss_Total > 0.001) PL_RATIO_Total = Av_Profit_Total / Av_Loss_Total;

   COMMENT = COMMENT + "Total P/L : "+DS2(Total_PL) +" "+AccountCurrency() +ln;
   COMMENT = COMMENT + "Average Win : "+DS2(Av_Profit_Total) +" "+AccountCurrency() +ln;
   COMMENT = COMMENT + "Average Loss : "+DS2(Av_Loss_Total) +" "+AccountCurrency() +ln;
   COMMENT = COMMENT + "Profit / Loss Ratio : "+DS2(PL_RATIO_Total) +ln;

   COMMENT = COMMENT + DAAAAASH; // ---------------------------------------------------------------

// Yardsticks ---------------------------------------------------------------------

   // Profit Factor
   double ProfitFactor = 0.0;
   if(Total_Loss > 0.001) ProfitFactor = Total_Profit / Total_Loss;
   COMMENT = COMMENT + "Profit Factor : "+DS2(ProfitFactor) +ln;

   // Success Score
   COMMENT = COMMENT + "Success Score : "+DS2(PL_RATIO_Total * WinAv_Total * 100) +ln;
   
   // BreakEven Rate
   double Recovery = 0.0;
   if(Av_Profit_Total > 0.001) Recovery = Av_Loss_Total / Av_Profit_Total;

   double BreakEvenRate = Recovery / (1 + Recovery);
   COMMENT = COMMENT + "BreakEven Rate : "+DS2(BreakEvenRate * 100) + "%" +ln;

   COMMENT = COMMENT + DAAAAASH; // ---------------------------------------------------------------

   // Optimal f (Kelly)
   double Optimal_f = 0.0;
   if(PL_RATIO_Total > 0.001) Optimal_f = ( (PL_RATIO_Total + 1) * WinAv_Total - 1 ) / PL_RATIO_Total;

   COMMENT = COMMENT + "Optimal f (Kelly) : "+DS2(Optimal_f * 100) +"%" +ln;
   if(Fractional_Kelly < 0.9999) COMMENT = COMMENT + "Fractional Kelly ("+DS2(Fractional_Kelly)+") : "+DS2(Optimal_f*Fractional_Kelly*100) +"%" +ln;

   string Fractional = ""; if(Fractional_Kelly < 0.9999) Fractional = ", Fractional";

   double Kellylot = 0.0;
   if(StopLoss_for_Kellylot>0.001) Kellylot = (AccountBalance() * Optimal_f*Fractional_Kelly) / ( MarketInfo(Symbol(),MODE_TICKVALUE) * StopLoss_for_Kellylot * DQADJ );
   
   COMMENT = COMMENT + "Risk by Optimal f : "+DoubleToStr(Kellylot,Ldig) +" lot (SL : "+StopLoss_for_Kellylot+"pips"+Fractional+")" +ln;

   Comment(
            DAAAAASH + EANAME +ln+
            DAAAAASH + COMMENT
          );
}  

//+------------------------------------------------------------------+
//| DS2 (string) double Val
//+------------------------------------------------------------------+
string DS2(double Val)
{
   return(DoubleToStr(Val,2));
}

//+------------------------------------------------------------------+
//| DS0 (string) double Val
//+------------------------------------------------------------------+
string DS0(double Val)
{
   return(DoubleToStr(Val,0));
}

//+------------------------------------------------------------------+
//| TS (string) int SEC
//+------------------------------------------------------------------+
string TS(int SEC, string Mode)
{
   if(Mode == "Day") return( TimeToStr(SEC, TIME_DATE) );
   if(Mode == "Min") return( TimeToStr(SEC, TIME_DATE|TIME_MINUTES) );
}

//+------------------------------------------------------------------+
//| PeriodSearch (datetime)
//+------------------------------------------------------------------+
datetime PeriodSearch(string Mode)
{
   datetime PeriodStart = 161059999999;
   datetime PeriodEnd = 0;

   for(int i=0; i<OrdersHistoryTotal(); i++)
   {
      if( !OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) ) continue; // select check
      if( OrderType() > 1) continue; // order type check
      if( IsSkip( OrderSymbol(), OrderMagicNumber(), OrderComment(), OrderOpenTime(), OrderCloseTime()) ) continue;

      if(Mode == "Start") PeriodStart = MathMin(PeriodStart,OrderCloseTime());
      if(Mode == "End") PeriodEnd = MathMax(PeriodEnd,OrderCloseTime());
   }

   if(Mode == "Start") return(PeriodStart);
   if(Mode == "End") return(PeriodEnd);
}  

//+------------------------------------------------------------------+
//| IsSkip (bool)
//+------------------------------------------------------------------+
bool IsSkip(string ORDERSYMBOL, int ORDERMAGIC, string ORDERCOMMENT, datetime ORDEROPENTIME, datetime ORDERCLOSETIME)
{
   if(ChartSymbolOnly && Symbol() != ORDERSYMBOL) return(true); // symbol check
   if(SpecificMagic > 0 && ORDERMAGIC != SpecificMagic) return(true); // magic check
   if( IsSkipComment( ORDERCOMMENT ) ) return(true); // comment check
   if( UsePeriod && IsOutsidePeriod( ORDEROPENTIME, ORDERCLOSETIME ) ) return(true); // period check

   return(false);
}  

//+------------------------------------------------------------------+
//| IsSkipComment (bool)
//+------------------------------------------------------------------+
bool IsSkipComment(string OrdComment)
{
   bool IsSkipComment = false;
   for(int i=0; i<SkipComments; i++) if(StringFind(OrdComment, SkipComment[i]) != -1) IsSkipComment = true;

   return(IsSkipComment);
}  

//+------------------------------------------------------------------+
//| IsOutsidePeriod (bool)
//+------------------------------------------------------------------+
bool IsOutsidePeriod(datetime OPEN, datetime CLOSE)
{
   bool OutsidePeriod = false;
   if(OPEN < StrToTime(From)) OutsidePeriod = true;
   if(CLOSE > StrToTime(Till)) OutsidePeriod = true;

   return(OutsidePeriod);
}  

//+------------------------------------------------------------------+
//| Trades (int)
//+------------------------------------------------------------------+
int Trades(int OrdType)
{
   int Trades = 0;

   for(int i=0; i<OrdersHistoryTotal(); i++)
   {
      if( !OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) ) continue; // select check
      if( OrderType() != OrdType ) continue; // order type check
      if( IsSkip( OrderSymbol(), OrderMagicNumber(), OrderComment(), OrderOpenTime(), OrderCloseTime()) ) continue;
      
      Trades++;
   }

   return(Trades);
}  

//+------------------------------------------------------------------+
//| Wins (int)
//+------------------------------------------------------------------+
int Wins(int OrdType)
{
   int Wins = 0;

   for(int i=0; i<OrdersHistoryTotal(); i++)
   {
      if( !OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) ) continue; // select check
      if( OrderType() != OrdType ) continue; // order type check
      if( IsSkip( OrderSymbol(), OrderMagicNumber(), OrderComment(), OrderOpenTime(), OrderCloseTime()) ) continue;
      
      if(OrderProfit()+OrderSwap()+OrderCommission() >= 0) Wins++;
   }

   return(Wins);
}  

//+------------------------------------------------------------------+
//| Profit (double)
//+------------------------------------------------------------------+
double Profit(int OrdType)
{
   double Profit = 0.0;

   for(int i=0; i<OrdersHistoryTotal(); i++)
   {
      if( !OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) ) continue; // select check
      if( OrderType() != OrdType ) continue; // order type check
      if( IsSkip( OrderSymbol(), OrderMagicNumber(), OrderComment(), OrderOpenTime(), OrderCloseTime()) ) continue;
      
      if(OrderProfit()+OrderSwap()+OrderCommission() >= 0) Profit += (OrderProfit()+OrderSwap()+OrderCommission());
   }

   return(Profit);
}

//+------------------------------------------------------------------+
//| Loss (double)
//+------------------------------------------------------------------+
double Loss(int OrdType)
{
   double Loss = 0.0;

   for(int i=0; i<OrdersHistoryTotal(); i++)
   {
      if( !OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) ) continue; // select check
      if( OrderType() != OrdType ) continue; // order type check
      if( IsSkip( OrderSymbol(), OrderMagicNumber(), OrderComment(), OrderOpenTime(), OrderCloseTime()) ) continue;

      if(OrderProfit()+OrderSwap()+OrderCommission() < 0) Loss -= (OrderProfit()+OrderSwap()+OrderCommission());
   }

   return(Loss);
}

int closeOrders()
  {
//----
   // ???????? ??? ?????, ? ???? ??? ?? ???? ???? ??????? ?????????????
   // ? ???????? ?????? ???????
   if (!IsDemo()) {Alert("?? ???????? ????? ?????? ?????????"); return;}
   
   int total=OrdersTotal(); // ?????????? ???????  
   int ordertype;// ???  ??????   
   if (total==0) {Alert("??? ??????? ??? ????????/????????");return;}
   int ticket; // ????? ?????????? ???? ????? ??????
   double priceClose;// ????, ?? ??????? ????? ????????? ???????? ??????
   for(int i=total-1;i>=0;i--)
      {
      if (OrderSelect(i,SELECT_BY_POS))
         {
         ordertype=OrderType();
         ticket=OrderTicket();
         switch(ordertype)
            {
            case 0:
               // ??????? ??????? 
               //??????? ???? Bid ?? ???????
               priceClose=MarketInfo(OrderSymbol(),MODE_BID);
               Print("????????? ?? ",i," ??????? ????? ? ??????? No",ticket);
               OrderClose(ticket,OrderLots(),priceClose,3,Red);
               break;// ????? ?? ????? switch    
            case 1:
               // ??????? ???????
               //??????? ???? Ask ?? ???????
               priceClose=MarketInfo(OrderSymbol(),MODE_ASK);
               Print("????????? ?? ",i," ??????? ????? ? ??????? No",ticket);
               OrderClose(ticket,OrderLots(),priceClose,3,Red);
               break;// ????? ?? ????? switch    
            default:
               // ???????? ?? 2 ?? 5, ??????? ?????????? ?????
               Print("??????? ?? ",i," ??????? ????? ? ??????? No",ticket);
               OrderDelete(ticket);  
               break;// ????? ?? ????? switch    
            }    
         }
         
      }   
//----
   return(0);
  } 
    
//----------------------- GENERATE MAGIC NUMBER BASE ON SYMBOL AND TIME FRAME FUNCTION


int subGenerateMagicNumber(int Magic_Number, string symbol, int timeFrame)
{
   int isymbol = 0;
   if (symbol == "AUDCAD")       isymbol = 1;
   else if (symbol == "AUDCHF")  isymbol = 2;
   else if (symbol == "AUDJPY")  isymbol = 3;
   else if (symbol == "AUDDKK")  isymbol = 4;
   else if (symbol == "AUDNZD")  isymbol = 5;
   else if (symbol == "AUDPLN")  isymbol = 6;
   else if (symbol == "AUDSGD")  isymbol = 7;
   else if (symbol == "AUDUSD")  isymbol = 8;
   else if (symbol == "CADCHF")  isymbol = 9;
   else if (symbol == "CADJPY")  isymbol = 10;
   else if (symbol == "CHFCAD")  isymbol = 11;
   else if (symbol == "CHFJPY")  isymbol = 12;
   else if (symbol == "CHFSGD")  isymbol = 13;
   else if (symbol == "EURAUD")  isymbol = 14;
   else if (symbol == "EURCAD")  isymbol = 15;
   else if (symbol == "EURCHF")  isymbol = 16;
   else if (symbol == "EURDKK")  isymbol = 17;
   else if (symbol == "EURGBP")  isymbol = 18;
   else if (symbol == "EURHKD")  isymbol = 19;
   else if (symbol == "EURHUF")  isymbol = 20;
   else if (symbol == "EURJPY")  isymbol = 21;
   else if (symbol == "EURLVL")  isymbol = 22;
   else if (symbol == "EURNOK")  isymbol = 23;
   else if (symbol == "EURNZD")  isymbol = 24;
   else if (symbol == "EURPLN")  isymbol = 25;
   else if (symbol == "EURSEK")  isymbol = 26;
   else if (symbol == "EURSGD")  isymbol = 27;
   else if (symbol == "EURSKK")  isymbol = 28;
   else if (symbol == "EURUSD")  isymbol = 29;
   else if (symbol == "EURZAR")  isymbol = 30;
   else if (symbol == "GBPAUD")  isymbol = 31;
   else if (symbol == "GBPCAD")  isymbol = 32;
   else if (symbol == "GBPCHF")  isymbol = 33;
   else if (symbol == "GBPDKK")  isymbol = 34;
   else if (symbol == "GBPJPY")  isymbol = 35;
   else if (symbol == "GBPNOK")  isymbol = 36;
   else if (symbol == "GBPNZD")  isymbol = 37;
   else if (symbol == "GBPSEK")  isymbol = 38;
   else if (symbol == "GBPSGD")  isymbol = 39;
   else if (symbol == "GBPUSD")  isymbol = 40;
   else if (symbol == "GBPZAR")  isymbol = 41;
   else if (symbol == "NZDCAD")  isymbol = 42;
   else if (symbol == "NZDCHF")  isymbol = 43;
   else if (symbol == "NZDJPY")  isymbol = 44;
   else if (symbol == "NZDSGD")  isymbol = 45;
   else if (symbol == "NZDUSD")  isymbol = 46;
   else if (symbol == "SGDJPY")  isymbol = 47;
   else if (symbol == "USDCAD")  isymbol = 48;
   else if (symbol == "USDCHF")  isymbol = 49;
   else if (symbol == "USDCCK")  isymbol = 50;
   else if (symbol == "USDDKK")  isymbol = 51;
   else if (symbol == "USDHKD")  isymbol = 52;
   else if (symbol == "USDHRK")  isymbol = 53;
   else if (symbol == "USDHUF")  isymbol = 54;
   else if (symbol == "USDJPY")  isymbol = 55;
   else if (symbol == "USDLVL")  isymbol = 56;
   else if (symbol == "USDLTL")  isymbol = 57;
   else if (symbol == "USDMXN")  isymbol = 58;
   else if (symbol == "USDNOK")  isymbol = 59;
   else if (symbol == "USDPLN")  isymbol = 60;
   else if (symbol == "USDSEK")  isymbol = 61;
   else if (symbol == "USDSGD")  isymbol = 62;
   else if (symbol == "USDSKK")  isymbol = 63;
   else if (symbol == "USDZAR")  isymbol = 64;
   else if (symbol == "#AA")  isymbol = 65;
   else if (symbol == "#AXP")  isymbol = 66;
   else if (symbol == "#BA")  isymbol = 67;
   else if (symbol == "#C")  isymbol = 68;
   else if (symbol == "#DD")  isymbol = 69;
   else if (symbol == "#DIS")  isymbol = 70;
   else if (symbol == "#AIG")  isymbol = 71;
   else if (symbol == "#GE")  isymbol = 72;
   else if (symbol == "#GM")  isymbol = 73;
   else if (symbol == "#HD")  isymbol = 74;
   else if (symbol == "#HON")  isymbol = 75;
   else if (symbol == "#HPQ")  isymbol = 76;
   else if (symbol == "#IBM")  isymbol = 77;
   else if (symbol == "#VZ")  isymbol = 78;
   else if (symbol == "#INTC")  isymbol = 79;
   else if (symbol == "#JNJ")  isymbol = 80;
   else if (symbol == "#JPM")  isymbol = 81;
   else if (symbol == "#KO")  isymbol = 82;
   else if (symbol == "#MCD")  isymbol = 83;
   else if (symbol == "#MMM")  isymbol = 84;
   else if (symbol == "#MO")  isymbol = 85;
   else if (symbol == "#MRK")  isymbol = 86;
   else if (symbol == "#MSFT")  isymbol = 87;
   else if (symbol == "#PG")  isymbol = 88;
   else if (symbol == "#T")  isymbol = 89;
   else if (symbol == "#PFE")  isymbol = 90;
   else if (symbol == "#UTX")  isymbol = 91;
   else if (symbol == "#WMT")  isymbol = 92;
   else if (symbol == "#XOM")  isymbol = 93;
   else if (symbol == "Gold")  isymbol = 94;
   else if (symbol == "Silver")  isymbol = 95;
   else if (symbol == "#EP")  isymbol = 96;
   else if (symbol == "#ENQ")  isymbol = 97;
   else if (symbol == "#YM")  isymbol = 98;
   else if (symbol == "#CL")  isymbol = 99;
   else if (symbol == "#NG")  isymbol = 100;
   else if (symbol == "#W")  isymbol = 101;
   else if (symbol == "#C")  isymbol = 102;
   else if (symbol == "#S")  isymbol = 103;
   else                          isymbol = 104;
   if(isymbol<10) Magic_Number = MagicNumber * 10;
   return (StrToInteger(StringConcatenate(MagicNumber, isymbol, timeFrame)));
   
}
//+------------------------------------------------------------------+    

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---