//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+
Comments