Как получить размер необходимой маржи аналогичный MODE_MARGINREQUIRED в МТ4

 

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

double m = 0;
double price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
OrderCalcMargin(ORDER_TYPE_BUY, _Symbol, 1.0, price, m);
Print(m); // = 0

PrintFormat("Коэффициент взимания маржи по длинным позициям равен %G",SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_LONG)); // = 1
PrintFormat("Коэффициент взимания маржи по коротким  позициям равен %G",SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_SHORT)); // = 1 
PrintFormat("Коэффициент взимания маржи по Limit ордерам равен %G",SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_LIMIT)); // = 0
PrintFormat("Коэффициент взимания маржи по Stop ордерам равен %G",SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_STOP)); // = 0
PrintFormat("Коэффициент взимания маржи по Stop Limit ордерам равен %G",SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_STOPLIMIT)); // = 0

Вопрос : как получить размер залога при открытии позиции аналогичный тому, что был в МТ4 для Forex рынка?

MarketInfo(Symbol(), MODE_MARGINREQUIRED) // для GBPUSD = 328.28
 
artemiusgreat:

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

Вопрос : как получить размер залога при открытии позиции аналогичный тому, что был в МТ4 для Forex рынка?

У меня нормально всё с таким же кодом:

2014.02.09 15:14:57.921 #Test (NZDUSD,W1)       NZDUSD (price: 0.82995): 829.95
2014.02.09 15:15:02.505 #Test (USDJPY,W1)       USDJPY (price: 102.351): 1000.00
2014.02.09 15:15:05.961 #Test (GBPJPY,W1)       GBPJPY (price: 167.984): 1641.41
2014.02.09 15:15:08.833 #Test (AUDUSD,W1)       AUDUSD (price: 0.89599): 895.99
2014.02.09 15:15:16.345 #Test (GBPUSD,W1)       GBPUSD (price: 1.64141): 1641.41
2014.02.09 15:15:19.225 #Test (EURUSD,W1)       EURUSD (price: 1.36355): 1363.55

Код:

//+------------------------------------------------------------------+
//|                                                        #Test.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double m      =0;
   double price  =SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   int    digits =(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
//---
   OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1.0,price,m);
//---
   Print(_Symbol," (price: "+DoubleToString(price,digits)+"): ",DoubleToString(m,2));
  }
//+------------------------------------------------------------------+
 

спасибо, понял, эта функция запрещена в индикаторе ...

тогда другой вопрос - как программно получить размер плеча?

Update: ссылка сама появилась, вопрос закрыт :)

 
artemiusgreat:

...

Update: ссылка сама появилась, вопрос закрыт :)

Поиск рулит. А тем, для кого не рулит, сайт сам подсказывает. ))
 

Вдруг кому маржа в индикаторе понадобится : http://www.roboforex.ru/about/faq/top-10/margin-calculation/

double GetMargin(const string symbol, const double lot)
{
    long leverage = AccountInfoInteger(ACCOUNT_LEVERAGE);
    double contract = SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE) * lot;
    string currency = StringSubstr(symbol, 0, 3) + AccountInfoString(ACCOUNT_CURRENCY);
    return(SymbolInfoDouble(currency, SYMBOL_LAST) * contract / leverage);
}
Как рассчитывается размер залога? / RoboForex
  • www.mql5.com
Формула расчёта залога в базовой валюте: = / Базовая валюта – это валюта, стоящая первой в котировке, например: Размер контракта – объём контракта в базовой валюте. Величина 1 лота всегда равна 100 000 единицам базовой валюты. Соответственно, величина 0,1 лота = 100 000 * 0,1 = 10 000 базовой валюты, величина 0,01 лота = 100 000 * 0,01...