你是如何计算保证金的?

 

下午好!

突然遇到一种情况,未结头寸的保证金大幅增加(20倍)。有人怀疑经纪人提高了未结头寸的保证金要求。这个假设被异常高的AccountMargin值所证实,它比这个工具和设定的杠杆的计算值高几倍。

在这种情况下的一个账户中,我不得不以亏损的方式关闭最后一个交易量最大的开仓,以减少存款的负荷,不允许止损。而在某个时候(关闭另一个亏损头寸后),账户保证金的又回到了计算水平也许,我没有一下子注意到,因此我不能肯定地说,对哪些头寸适用了增加的保证金要求。

我在另一个账户上还没有做任何事情,除了开了一个锁仓单。现在我需要向经纪人提出索赔,说明哪些订单的保证金要求增加了。这就提出了一个问题。

有没有办法在终端中分别了解每个未结头寸的抵押品(保证金)的数额?在终端我只看到保证金的总额,这是由AccountMargin()函数返回的值。在MQL4参考资料中,我没有找到一个合适的带有Order前缀的函数。合乎逻辑的是,这个值可以通过OrderGetDouble()获得,但同样,在ENUM_ORDER_PROPERTY_DOUBLE 中没有合适的值。

请告诉我,在MT4终端中,我如何才能真正获得单个开仓的存款规模?

 
你可以在这里 阅读。
Как получить программно "Процент маржи"
Как получить программно "Процент маржи"
  • 2017.05.31
  • www.mql5.com
В окне терминала "Спецификации контракта" есть пункт "Процент маржи...
 
Alexey Viktorov:
你可以在这里 阅读。

谢谢你,我已经看过了。在第7页有一个脚本,用于计算每个未结头寸的计算保证金值。考虑到这不是CFD,而是FOREX的事实,我对它进行了一些调整,并以这种形式进行了汇编。

void OnStart()
{
 double size = 0, percentage = 0, orderMargin = 0, accountMargin = 0;
 long leverage = 0;
 for(int i = 0; i < OrdersTotal(); i++)
  {
   int tupe = -1;
   if(OrderSelect(i, SELECT_BY_POS) && (tupe=OrderType()) < OP_BUYLIMIT)
    {
     string symbol = OrderSymbol();
     string symbolCurencyMargin = SymbolInfoString(symbol, SYMBOL_CURRENCY_MARGIN);
     double orderOpenPrice = OrderOpenPrice();
     double orderLots = OrderLots();
     double margin = MarketInfo(symbol, MODE_MARGINREQUIRED);
     double ask = MarketInfo(symbol, MODE_ASK);
     double bid = MarketInfo(symbol, MODE_BID);
     double price = symbolCurencyMargin == "USD" ? 1 : tupe == OP_BUY ? bid : ask;
      size = SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE);
      leverage = AccountInfoInteger(ACCOUNT_LEVERAGE);
      percentage = NormalizeDouble(margin/(size*price/100)*leverage, 0);
      //orderMargin = (size*orderOpenPrice*percentage/100)/leverage;
      orderMargin = (orderLots*size*orderOpenPrice)/leverage;
      accountMargin += orderMargin;
      Print(symbolCurencyMargin, " ******** Маржа ", symbol, " = ", orderMargin);
    }
  }
 Print(AccountInfoString(ACCOUNT_CURRENCY), " ******** AccountMargin = ", DoubleToString(accountMargin, 2));
}

在绝大多数情况下,这个脚本计算出的最终保证金值与实际的保证金值相吻合。但是,可惜的是,在我的情况下没有。问题是,计算每个订单的保证金的公式使用的是那一刻 活跃的杠杆值。

但在一些经纪商的规定中(不指责),对于在某些条件下(周五晚上、平均法等)建立的头寸,规定了杠杆率,而且通常比整个账户的杠杆率低几倍。这正是我的情况。然而,为了正确准备索赔并避免将来重复这种情况,我需要找出哪些仓位是以正常的杠杆率开的,哪些是以较高的杠杆率开的。

该经纪商的支持团队公开表示,增加的杠杆不是为整个账户设置的,而是为特定订单设置的,这发生在开仓之后。因此,使用AccountFreeMarginChek请求是没有用的。

这实际上引起了一个问题:如果我们知道经纪人可以为每个头寸设置不同的杠杆,那么是否有办法可靠地知道终端中的每个头寸实际使用的是哪种保证金?

 
Janis Ozols:

但在一些经纪人的规定中(我们不要指责),对于在某些条件下(周五晚上、平均法等)建立的头寸,要设置特殊的杠杆,通常比整个账户的杠杆低几倍。这正是我的情况。但为了进行适当的索赔,并避免将来再次出现这种情况,我需要了解哪些仓位是以正常的杠杆开的,哪些是以较高的杠杆开的

1)经纪人永远是对的。
2)如果经纪人是错误的,请阅读第1条规则。

 
Janis Ozols:

谢谢你,我已经看过了。在第7页有一个脚本,用于计算每个未结头寸的计算保证金值。考虑到这不是CFD,而是FOREX的事实,我对它进行了一些调整,并以这种形式进行了汇编。

在绝大多数情况下,这个脚本计算出的最终保证金值与实际的保证金值相吻合。但是,可惜的是,在我的情况下没有。问题是,计算每个订单的保证金的公式使用的是那一刻 活跃的杠杆值。

但在一些经纪商的规定中(不指责),对于在某些条件下(周五晚上、平均法等)建立的头寸,规定了杠杆率,而且通常比整个账户的杠杆率低几倍。这正是我的情况。然而,为了正确准备索赔 并避免将来重复这种情况,我需要找出哪些仓位是以正常的杠杆率开的,哪些是以较高的杠杆率开的。

该经纪商的支持团队公开表示,增加的杠杆不是为整个账户设置的,而是为特定订单设置的,这发生在开仓之后。因此,使用AccountFreeMarginChek请求是没有用的。

这实际上导致了以下问题:如果我们知道经纪人可以为每个头寸设置不同的杠杆,那么是否有办法可靠地知道终端中每个头寸实际使用的保证金?

不要把时间浪费在无用的信件上。这是在法规中写明的,争论就像与风车作战。

这与符号无关,而是与开放时间 有关。许多人在周末关门前15分钟就有了。而15分钟后的周一,杠杆率恢复正常。

 
Alexey Viktorov:

不要在无用的信件上浪费你的时间。这是在法规中写明的,争论就像与风车作战。

我想提出投诉,主要是想弄清楚申请增加杠杆的规则。条例对此规定得不是很清楚。

我想了解的主要事情是如何在未来避免这种情况。具体来说,在我的经纪人的规定中,有关条款包含了 "公司保留权利 "的模糊措辞。也就是说,他们可能会也可能不会对某个特定订单适用增加的保证金要求。因此,对我来说非常重要的是,如何在终端中检测出增加的杠杆(除了由AccountLeverage发出的杠杆)所适用的头寸。例如,及时关闭此类头寸,通知交易员并停止交易。

当然,有一些方法可以向终端要求单个头寸的保证金数额。我只是还不知道,而且我在文档中也找不到。

 
Janis Ozols:

我想提出投诉,主要是想弄清楚申请增加杠杆的规则。这在法规中不是很清楚。

我想了解的主要事情是如何在未来避免这种情况。具体来说,在我的经纪人的规定中,有关条款包含了 "公司保留权利 "的模糊措辞。也就是说,他们可能会也可能不会对某个特定订单适用增加的保证金要求。因此,对我来说非常重要的是,如何在终端中检测出增加的杠杆(除了由AccountLeverage发出的杠杆)所适用的头寸。例如,及时关闭此类头寸,通知交易员并停止交易。

当然,有一些方法可以向终端要求单个头寸的保证金数额。我只是还不知道,而且我在文档中也找不到。

我不知道你的经纪人,但有些情况下,一切都很好,我们关闭了一个位置,得到了增加的保证金。没有办法追踪这一点。而且没有人愿意做出任何解释。只有一个办法:不要在你的保证金可能增加的时候进行交易。这很可能是由保证金的百分比,而不是杠杆来调节的。

 

你开仓 的时候,使用公开的公式计算你自己的保证金和杠杆。

在评论中或在魔术中写下杠杆,或在一般情况下--一次性写下杠杆调整后的保证金。

你将有一些东西可以记住

 
Alexey Viktorov:

我不知道你的经纪人,但有些情况下,一切都很好,我们平仓 并获得增加的保证金。

在我的经纪人那里,情况是这样的:我们开了一个头寸,得到了增加的保证金。而在某些情况下,我们会这样做,在某些情况下,我们不会这样做("公司保留......的权利")。


Alexey Viktorov:

只有一个办法:在保证金可能增加的时候不要交易。这很可能是由保证金的百分比,而不是杠杆来调节的。

在我的情况下,不幸的是,这并没有帮助。保证金可以在任何时候增加。而且,它是由杠杆来监管的。在任何情况下,法规都谈到了杠杆作用。我非常希望避免在这个话题中讨论某个特定经纪人的交易条件。我真正感兴趣的是,你如何能从终端获得关于单个头寸的保证金数额的信息。

 
Renat Akhtyamov:

你开仓 的时候,使用公开的公式计算你自己的保证金和杠杆。

在评论中或在魔术中写下杠杆,或在一般情况下--一次性写下杠杆调整后的保证金。

你将有一些东西可以记住。

我试图这样做。但问题是,开仓后 保证金增加。换句话说,在开仓之前,我得到了它的保证金的计算值。在成功调用OrderSend 后,我立即要求终端提供AccountMargin的值。而且它完全满足我的期望。但过了一段时间,这个数值就会急剧增加!而AccountMargin的原来比每个未平仓订单的保证金数额大几十倍,是在其开仓后立即获得的

我的问题可以简化为:在任何特定时刻,终端如何获得特定订单的实际保证金价值

这是整个账户的AccountMargin()或AccountInfoDouble(ACCOUNT_MARGIN)。因此,有两种方法可以得到这个值。当然,至少有一种方法可以获得一个订单的保证金价值。我只是不知道这件事,这就是我问的原因。

 
Janis Ozols:

我已经试过这个。但问题是,开仓后 保证金增加。换句话说,在开仓之前,我得到了它的计算保证金值。在成功调用OrderSend 后,我立即要求终端提供AccountMargin的值。而且它完全满足我的期望。但过了一段时间,这个数值就会急剧增加!而AccountMargin的原来比每个未平仓订单的保证金数额大几十倍,是在其开仓后立即获得的

我的问题可以简化为:在任何特定时刻,终端如何获得特定订单的实际保证金价值

这是整个账户的AccountMargin()或AccountInfoDouble(ACCOUNT_MARGIN)。因此,有两种方法可以得到这个值。当然,至少有一种方法可以获得一个订单的保证金价值。我只是还不知道,这就是我问的原因。

你不需要问

考虑 公式

和肩部也是如此。 使用公式

终端不跟踪当前的杠杆率,而是给你加载终端时的那个杠杆率。

这就是为什么这个函数所要求的保证金是不同的