MarginCalculate





//+------------------------------------------------------------------+
//|                                              MarginCalculate.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
//+------------------------------------------------------------------+
//| Î÷åíü ïðîñòàÿ ôóíêöèÿ ðàñ÷åòà ìàðæè äëÿ ôîðåêñíûõ ñèìâîëîâ.      |
//| Ðàñ÷åò àâòîìàòè÷åñêè èäåò â áàçîâîé âàëþòå ñ÷åòà è íå ðàáîòàåò   |
//| äëÿ ñëîæíûõ âèäîâ êóðñîâ, êîòîðûå íå èìåþò ïðÿìîãî ïåðåñ÷åòà     |
//| â áàçîâóþ âàëþòó òîðãîâîãî ñ÷åòà.                                |
//+------------------------------------------------------------------+
double MarginCalculate(string symbol,double volume)
  {
   string first   =StringSubstr(symbol,0,3);         // ïåðâûé ñèìâîë,    íàïðèìåð EUR
   string second  =StringSubstr(symbol,3,3);         // âòîðîé ñèìâîë,    íàïðèìåð USD
   string currency=AccountCurrency();                // âàëþòà äåïîçèòà,  íàïðèìåð USD
   double leverage=AccountLeverage();                // êðåäèòíîå ïëå÷î,  íàïðèìåð 100
   double contract=MarketInfo(symbol,MODE_LOTSIZE);  // ðàçìåð êîíòðàêòà, íàïðèìåð 100000
   double bid     =MarketInfo(symbol,MODE_BID);      // öåíà áèä
//---- äîïóñêàåì òîëüêî ñòàíäàðòíûå ôîðåêñíûå ñèìâîëû XXXYYY
   if(StringLen(symbol)!=6)
     {
      Print("MarginCalculate: '",symbol,"' must be standard forex symbol XXXYYY");
      return(0.0);
     }
//---- ïðîâåðêà íàëè÷èÿ äàííûõ
   if(bid<=0 || contract<=0) 
     {
      Print("MarginCalculate: no market information for '",symbol,"'");
      return(0.0);
     }
//---- ïðîâåðÿåì ñàìûå ïðîñòûå âàðèàíòû - áåç êðîññîâ
   if(first==currency)   return(contract*volume/leverage);           // USDxxx
   if(second==currency)  return(contract*bid*volume/leverage);       // xxxUSD
//---- ïðîâåðÿåì îáû÷íûå êðîññû, èùåì ïðÿìîå ïðåîáðàçîâàíèå ÷åðåç âàëþòó äåïîçèòà
   string base=currency+first;                                       // USDxxx
   if(MarketInfo(base,MODE_BID)>0) return(contract/MarketInfo(base,MODE_BID)*volume/leverage);
//---- ïîïðîáóåì íàîáîðîò
   base=first+currency;                                              // xxxUSD
   if(MarketInfo(base,MODE_BID)>0) return(contract*MarketInfo(base,MODE_BID)*volume/leverage);
//---- íåò âîçìîæíîñòè ïðÿìîãî ïåðåðàñ÷åòà
   Print("MarginCalculate: can not convert '",symbol,"'");
   return(0.0);
  }
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   Print("Margin EURUSD: ",MarginCalculate("EURUSD",1.0));
   Print("Margin USDCHF: ",MarginCalculate("USDCHF",1.0));
   Print("Margin GBPCHF: ",MarginCalculate("GBPCHF",1.0));
   Print("Margin CHFJPY: ",MarginCalculate("CHFJPY",1.0));
//----
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: