Author: Copyright 2013, papaklass.
0 Views
0 Downloads
0 Favorites
Zalog
#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