Author: Copyright 2014, papaklass
0 Views
0 Downloads
0 Favorites
zalog
//+----------------------------------------------------------------------------+
//|                                                                  Zalog.mq5 |
//|                                                  Copyright 2014, papaklass |
//|                                  https://login.mql5.com/ru/users/papaklass |
//+----------------------------------------------------------------------------+
#property library
#property copyright "Copyright 2014, papaklass"
#property link      "https://login.mql5.com/ru/users/papaklass"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Âîçâðàùàåò ðàçìåð ñðåäñòâ â âàëþòå äåïîçèòà,                     |
//| íåîáõîäèìûõ äëÿ îòêðûòèÿ 1 ëîòà                                  |
//+------------------------------------------------------------------+
double GetMarginForOpening(int dir,string sym)
  {
//--- çíà÷åíèå ïëå÷à äëÿ òåêóùåãî ñ÷åòà
   long leverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
//--- ðàçìåð êîíòðàêòà â áàçîâîé âàëþòå
   double contract=SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
//--- ïîëó÷èì âàëþòó ñ÷åòà
   string accCurrency=AccountInfoString(ACCOUNT_CURRENCY);
//--- ïîëó÷èì âàëþòó çàëîãà
   string marginCurrency=StringSubstr(sym,0,3);
//--- ïîëó÷èì âàëþòó êîòèðîâàíèÿ
   string profitCurrency=StringSubstr(sym,3,3);
//--- âàëþòà äëÿ ðàñ÷åòà
   string calcCurrency="";
//--- ïîëó÷èì ïðåôèêñ âàëþòû
   string pref=GetSymbolPrefix(sym);
//--- îáðàòíàÿ êîòèðîâêà - true, ïðÿìàÿ - false
   double prc=0.0;
   double ask,bid;
   bool isBuy=dir==ORDER_TYPE_BUY;
//--- ïîëó÷èì âàëþòó äëÿ ðàñ÷åòà
   if(profitCurrency==accCurrency) // XXXUSD - îáð
     {
      calcCurrency=sym;

      if(!SymbolInfoDouble(calcCurrency,SYMBOL_ASK,ask) || 
         !SymbolInfoDouble(calcCurrency,SYMBOL_BID,bid))
         return (-1);
      //--- ïîëó÷èì òåêóùóþ öåíó äëÿ óêàçàííîãî íàïðàâëåíèÿ
      prc=isBuy ? ask: bid;
     }

   if(marginCurrency==accCurrency) // USDXXX - ïðÿìàÿ êîòèðîâêà
     {
      calcCurrency=sym;
      prc=1.0;
     }

   if(calcCurrency=="")
     {
      //---ïîëó÷èì òåêóùóþ öåíó äëÿ óêàçàííîãî íàïðàâëåíèÿ
      double crossPrice=isBuy ? ask: bid;

      calcCurrency=GetSymbolByCurrencies(profitCurrency,accCurrency,pref);

      if(!SymbolInfoDouble(calcCurrency,SYMBOL_ASK,ask) || 
         !SymbolInfoDouble(calcCurrency,SYMBOL_BID,bid))
         return (-1);

      prc=isBuy ? crossPrice*ask: crossPrice*bid;

      if(calcCurrency=="NULL")
        {
         calcCurrency=GetSymbolByCurrencies(accCurrency,profitCurrency,pref);

         if(!SymbolInfoDouble(calcCurrency,SYMBOL_ASK,ask) || 
            !SymbolInfoDouble(calcCurrency,SYMBOL_BID,bid))
            return (-1);

         prc=isBuy ? crossPrice/ask: crossPrice/bid;
        }
     }
//---
   if(leverage!=0 && prc!=0 && contract!=0)
      return (NormalizeDouble(prc * contract / leverage, 2));
//---
   return (-1);
  }
//+------------------------------------------------------------------+
//| Âîçâðàùàåò ñèìâîë ñ çàäàííûìè âàëþòàìè                           |
//| çàëîãà (base) è êîòèðîâêè (profit)                               |
//+------------------------------------------------------------------+
string GetSymbolByCurrencies(string baseCurrency,
                             string accCurrency,
                             string pref="")
  {
//--- ïîëó÷èì âàëþòó ðàñ÷åòà
   string calcCurrency=""+baseCurrency+accCurrency;
//---
   if(pref!="")
      calcCurrency=""+baseCurrency+accCurrency+pref;
//---
   if(SymbolInfoDouble(calcCurrency,SYMBOL_ASK)!=0)
      return (calcCurrency);
//---
   return ("NULL");
  }
//+------------------------------------------------------------------+
//| Âîçâðàùàåò ïðåôèêñ                                               |
//+------------------------------------------------------------------+
string GetSymbolPrefix(string sym)
  {
   string pref="";
//---
   if(StringLen(sym)>6)
      pref=StringSubstr(sym,6,StringLen(sym)-1);
//---
   return (pref);
  }
//+------------------------------------------------------------------+

Comments