Очень хорошая идея - опубликовать пример расчёта маржи в авторском
исполнении!
На InterbankFX на минисчетах к названиям инструментов добавляется
буква m (например "EURUSDm"). Поскольку брокер весьма популярен,
то я доработал скрипт для работы именно с InterbankFX на минисчетах.
Думаю начинающим может пригодиться.
#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);
string second =StringSubstr(symbol,3,3);
string currency=AccountCurrency();
double leverage=AccountLeverage();
double contract=MarketInfo(symbol,MODE_LOTSIZE);
double bid =MarketInfo(symbol,MODE_BID);
if(StringLen(symbol)!=7)
{
Print("MarginCalculate: '",symbol,
"' must be InterBankFX mini account forex symbol XXXYYYm");
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);
if(second==currency) return(contract*bid*volume/leverage);
string base=currency+first+"m";
if(MarketInfo(base,MODE_BID)>0)
return(contract/MarketInfo(base,MODE_BID)*volume/leverage);
base=first+currency+"m";
if(MarketInfo(base,MODE_BID)>0)
return(contract*MarketInfo(base,MODE_BID)*volume/leverage);
Print("MarginCalculate: can not convert '",symbol,"'");
return(0.0);
}
int start()
{
Print("Margin EURUSDm: ",MarginCalculate("EURUSDm",1.0));
Print("Margin USDCHFm: ",MarginCalculate("USDCHFm",1.0));
Print("Margin GBPCHFm: ",MarginCalculate("GBPCHFm",1.0));
Print("Margin CHFJPYm: ",MarginCalculate("CHFJPYm",1.0));
return(0);
}
.