mql5语言的特点、微妙之处以及技巧 - 页 9

 
fxsaber:
解决办法直接出现了。
// Размер свободных средств, необходимых для открытия 1 лота на покупку
double GetMarginRequired( const string Symb )
{
  MqlTick Tick;

  return(SymbolInfoTick(Symb, Tick) ? Tick.ask * SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) * SymbolInfoDouble(Symb, SYMBOL_TRADE_CONTRACT_SIZE) *
         SymbolInfoDouble(Symb, SYMBOL_POINT) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
这是对外汇的计算。其余的也差不多。
很好,剩下的就是带着存款货币 的保证金,因为保证金,例如,存款货币为美元的AUDCAD,需要用美元。
 
阿列克谢-沃尔昌斯基
很好,我们所要做的就是把保证金带入存款货币,因为保证金,比如说,澳元兑美元的存款货币为美元,需要用美元。
它已经完成了。
 
阿列克谢-沃尔昌斯基
很好,现在我们需要把保证金带入存款货币,因为保证金,例如澳元的存款货币为美元,应该是美元。
看起来函数中的SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)只是为了它......带来大量的入金货币
 
fxsaber:
这就是已经完成的工作。

在外汇中一切运作正常,只是最后的问题仍然是:"为什么是一半,我如何解决?"

 
维塔利-穆齐琴科

在外汇中一切运作正常,但有一个最后的问题:"为什么会减半,如何解决?"

我遇到过,在FIBOGroup-MT5服务器和MetaQuotes-Demo服务器上,SGDJPY的保证金是不同的。这表明MT5本身在计算保证金 时有误差。好吧,如果是这样的话,就没有比较的标准了。因此,我不能确定这是否是我的实现或开发者的错误。我认为这两种情况下都有错误。问题是缺乏正确的信息。
 
fxsaber:
我遇到的情况是,在FIBOGroup-MT5服务器和MetaQuotes-Demo服务器上,SGDJPY的保证金是不同的。这表明MT5本身在计算保证金 时有误差。好吧,如果是这样的话,就没有比较的标准了。因此,我不能确定这是否是我的实现或开发者的错误。我认为这两种情况下都有错误。问题是缺乏正确的信息。

我有两个服务器显示正确,但有一个例外--以红色标出

我怎样才能找到红色标示的财产?

谢谢你!

 
Vitaly Muzichenko:

我有两个服务器显示正确,但有一个例外--以红色标出

我怎样才能找到红色标出的财产?

谢谢你的提示!在野外,它是SymbolInfoMarginRate。所以现在是这样的
// Размер свободных средств, необходимых для открытия 1 лота на покупку
double GetMarginRequired( const string Symb )
{
  MqlTick Tick;
  double MarginInit, MarginMain;

  return((SymbolInfoTick(Symb, Tick) && SymbolInfoMarginRate(Symb, ORDER_TYPE_BUY, MarginInit, MarginMain)) ? MarginInit * Tick.ask *
          SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}

你必须清楚地了解,在MT5中,不同方向的保证金要求可能有很大的不同。也就是说,单一的MT4变体可能无法工作。当然,在外汇市场上,情况不会是这样的。但你必须记住。因此,一般来说,你应该这样写
// Альтернатива OrderCalcMargin
bool MyOrderCalcMargin( const ENUM_ORDER_TYPE action, const string symbol, const double volume, const double price, double &margin )
{
  double MarginInit, MarginMain;

  const bool Res = SymbolInfoMarginRate(symbol, action, MarginInit, MarginMain);
  
  margin = Res ? MarginInit * price * volume * SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE) /
                 (SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0;
  
  return(Res);  
}
 
fxsaber:
这就是所做的事情。
是的,这就对了,这就对了。
 

MT5在FIBOGroup-MT5服务器上的笑话 SGDJPY

在这种情况下,MyOrderCalcMargin的计算是正确的,但普通的OrderCalcMargin却不正确!为什么?

 
fxsaber:

MT5对FIBOGroup-MT5服务器SGDJPY的恶作剧

在这种情况下,MyOrderCalcMargin的计算是正确的,但普通的OrderCalcMargin却不正确!为什么?

有什么方法可以计算出套期保值的保证金吗?