//+----------------------------------------------------------------------------+
//| 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