MQL4 - automated forex trading   /  

Code Base

Code Base  Скрипты  MarginCalculate Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый код


Скачай MetaTrader 5 и посети MQL5.community Code Base
и торгуй мобильно!
Библиотека программ на новом MQL5
Готовься к Чемпионату -
Не нашёл подходящий код? Закажи его в разделе Работа

Этот скрипт для
MetaTrader 4

и торгуй мобильно!

Имя:
MarginCalculate
Автор: Renat (19.09.2006 22:45)
Скачано: 1959
Скачать:
 MarginCalculate.mq4 (3.2 Kb) View

    Очень простая функция расчета маржи для форексных символов. Расчет автоматически идет в базовой валюте счета и учитывает кредитное плечо.

    Не работает для сложных видов курсов, которые не имеют прямого пересчета в базовую валюту торгового счета.
2 комментария  Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый комментарий
А вот покажите перевод прибылей/убытков из валюты котировки в валюту депозита...

Смысл вопроса - какими курсами Вы будете пользоваться. Если при расчете маржи брались курсы вал. депозита и вал. котировки в момент времени

покупки/продажи базовой валюты , то как производится пересчет всего хозяйства в валюту депозита для каждого текущего момента времени вплоть до завершения операции.

Всякий раз по текущему курсу вал.депозита/вал.котировки(вал. котировки/вал.депозита) ? Или по первоначальному ?

С уважением - С.Д.
26.08.2007 02:05 Sart
Очень хорошая идея - опубликовать пример расчёта маржи в авторском исполнении!
На InterbankFX на минисчетах к названиям инструментов добавляется буква m (например "EURUSDm"). Поскольку брокер весьма популярен, то я доработал скрипт для работы именно с InterbankFX на минисчетах. Думаю начинающим может пригодиться.
//+------------------------------------------------------------------+
//|                MarginCalculate.mq4 (for InterBankFX mini-account)|
//|                      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);      
// цена бид
//---- допускаем только стандартные форексные символы XXXYYYm
   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);
// USDxxx
   if(second==currency)  return(contract*bid*volume/leverage);
// xxxUSD
//---- проверяем обычные кроссы, ищем прямое преобразование 
//     через валюту депозита
   //string base=currency+first;   
   string base=currency+first+"m";                           
// USDxxx
   if(MarketInfo(base,MODE_BID)>0) 
       return(contract/MarketInfo(base,MODE_BID)*volume/leverage);
//---- попробуем наоборот
   base=first+currency+"m";
// 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 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);
  }
//+------------------------------------------------------------------+

.
20.09.2006 01:19 solandr