#property copyright "Copyright 2013, papaklass."
#property link "http://www.mql4.com/ru/users/papaklass"
#property library
//+----------------------------------------------------------------------------+
//âîçâðàùàåò ðàçìåð ñâîáîäíûõ ñðåäñòâ, íåîáõîäèìûõ äëÿ îòêðûòèÿ 1 ëîòà
double GetMarginForOpening( int dir, string smb ){
//çíà÷åíèå ïëå÷à äëÿ òåêóùåãî ñ÷åòà
int leverage = AccountLeverage();
//ðàçìåð êîíòðàêòà â áàçîâîé âàëþòå
double contract = MarketInfo( smb, MODE_LOTSIZE );
//ïîëó÷èì âàëþòó ñ÷åòà
string accCurrency = AccountCurrency();
//ïîëó÷èì âàëþòó çàëîãà
string marginCurrency = StringSubstr( StringTrimLeft( smb ), 0, 3 );
//ïîëó÷èì âàëþòó êîòèðîâàíèÿ
string profitCurrency = StringSubstr( StringTrimLeft( smb ), 3, 3 );
//âàëþòà äëÿ ðàñ÷åòà
string calcCurrency ="";
//îáðàòíàÿ êîòèðîâêà - true, ïðÿìàÿ - false
double prc;
//ïîëó÷èì âàëþòó äëÿ ðàñ÷åòà
if( profitCurrency == accCurrency ){ // XXXUSD - îáð
calcCurrency = smb;
//ïîëó÷èì òåêóùóþ öåíó äëÿ óêàçàííîãî íàïðàâëåíèÿ
prc = Dbl_If( dir == OP_BUY, MarketInfo( calcCurrency, MODE_ASK ),
MarketInfo( calcCurrency, MODE_BID ) );
}
if( marginCurrency == accCurrency ){ // USDXXX - ïðÿì
calcCurrency = smb;
prc = 1.0;
}
if( calcCurrency == "" ){
//ïîëó÷èì òåêóùóþ öåíó äëÿ óêàçàííîãî íàïðàâëåíèÿ
double crossPrice =
Dbl_If( dir == OP_BUY, MarketInfo( smb, MODE_ASK ),
MarketInfo( smb, MODE_BID ) );
calcCurrency = GetSymbolByCurrencies(profitCurrency, accCurrency);
prc =
Dbl_If(dir == OP_BUY, crossPrice * MarketInfo(calcCurrency, MODE_ASK),
crossPrice * MarketInfo(calcCurrency, MODE_BID));
if(calcCurrency == "NULL"){
calcCurrency = GetSymbolByCurrencies(accCurrency, profitCurrency);
prc =
Dbl_If(dir == OP_BUY, crossPrice / MarketInfo(calcCurrency, MODE_ASK),
crossPrice / MarketInfo(calcCurrency, MODE_BID));
}
}
if( leverage != 0 && prc != 0 && contract != 0){
return( NormalDbl( prc * contract / leverage, 2) );
}
return( -1 );
}//----------------------------------------------------------------------------+
//âîçâðàùàåò ñèìâîë ñ çàäàííûìè âàëþòàìè çàëîãà (base) è êîòèðîâêè (profit)
string GetSymbolByCurrencies( string baseCurrency, string accCurrency ){
//ïîëó÷èì âàëþòó ðàñ÷åòà
string calcCurrency = "" + baseCurrency + accCurrency;
if( MarketInfo( calcCurrency, MODE_ASK) != 0 ){ return( calcCurrency ); }
return( "NULL" );
}//----------------------------------------------------------------------------+
//âîçâðàùàåò íîðìàëèçîâàííîå çíà÷åíèå òèïà Double â ñëó÷àå óñïåõà
//è -1 â îáðàòíîì ñëó÷àå
double NormalDbl( double d, int n = -1 ){
int dgt = MarketInfo( Symbol(), MODE_DIGITS );
if( n < 0 ){ return( NormalizeDouble( d, dgt ) ); }
if( n >= 0 ){ return( NormalizeDouble( d, n ) ); }
return( -1 );
}//----------------------------------------------------------------------------+
//âîçâðàùàåò çíà÷åíèå âûðàæåíèé If_True èëè If_False â çàâèñèìîñòè îò âûïîíåíèÿ
//óñëîâèÿ Condition
double Dbl_If( bool Condition, double If_True, double If_False ){
if ( Condition ) return( If_True );
else return( If_False );
}//----------------------------------------------------------------------------+
Comments