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

 

在帮助中说

enum_symbol_calc_mode

识别器

描述

公式

符号_计算_模式_外汇

外汇模式 - 外汇的利润和保证金计算

保证金: 批量*合同大小/杠杆率

利润:(收盘价-开盘价)*合约大小*手数

符号_计算_模式_期货

期货模式 - 计算期货的保证金和利润

保证金:Lots *InitialMargin*Percentage/100

利润:(收盘价-开盘价)*TickPrice/TickSize*Lots

symbol_calc_mode_cfd

CFD模式--计算CFD的保证金和利润

保证金:Lots *ContractSize*MarketPrice*Percentage/100

利润:(收盘价-开盘价)*合约大小*手数

symbol_calc_mode_cfdindex

CFD指数模式--计算CFD指数的保证金和利润

保证金:(手数*合约大小*市场价格)*价格/手数大小

利润:(收盘价-开盘价)*合约大小*手数

symbol_calc_mode_cfdleverage

CFD 杠杆模式 - 使用杠杆交易时计算CFD的保证金和利润

保证金:(手数*合约大小*市场价格*百分比)/杠杆率

利润:(收盘价-开盘价)*合约大小*手数

符号_计算_模式_外盘股票

交易所模式--在交易所买卖证券的保证金和利润的计算

保证金:手数*合约大小*公开价格

利润:(收盘价-开盘价)*合约大小*手数

symbol_calc_mode_exch_futures

期货模式 - 在交易所交易期货合约的保证金和利润计算

保证金: 批量*初始保证金或批量*维护保证金

利润:(收盘价-开盘价)*手数*TickPrice/TickSize

symbol_calc_mode_exch_futures_forts

FORTS期货模式 - 计算在FORTS上交易期货合约的保证金和利润。根据以下规则,保证金的大小可以通过MarginDiscount的值来减少。

1.如果多头头寸(买入订单)的价格低于计算价格,MarginDiscount = Lots*((PriceSettle-PriceOrder)*TickPrice/TickSize)

2.如果空头头寸(卖单)的价格高于结算价,那么MarginDiscount = Lots*((PriceOrder-PriceSettle)*TickPrice/TickSize)。

其中。

    • PriceSettle - 前一个时段的结算(清算)价格。
    • PriceOrder - 定单(订单)中指定的头寸或开仓价的加权平均价格。
    • TickPrice - 勾股价(价格变化一个点的成本)。
    • TickSize - 滴答大小(价格变化的最小步数)。

保证金: 批量*初始保证金或批量*维护保证金

利润:(收盘价-开盘价)*手数*TickPrice/TickSize

symbol_calc_mode_serv_collateral

抵押模式 - 该工具在交易账户中作为非交易资产使用。未平仓合约的市场价值是根据交易量、当前市场价格、合约大小和流动性比率计算的。该价值被计入资产,并被添加到权益中。因此,这种工具的未平仓合约会增加自由保证金,并作为交易工具未平仓合约的额外抵押品。

保证金:无

利润:没有

市场价值:地块*合同大小*市场价格*利润率

 
fxsaber:

在帮助中说

恕我直言,我打算带你回去 阅读

P.S.

你可以得到它,但如果我们使用AUDCAD,我们将得到澳元货币的保证金,而账户是以美元计价的。如果你使用澳元兑美元的价格,你会得到所需的保证金数额,但这并不是普遍和糟糕的,因为有一些账户有前缀和后缀,这里开始了整个故事。此外,在市场概览中可能根本就没有配对开放,计算是一个死胡同。

一个能与钱打交道的程序(开发者的说法)是无法计算的。旧的、坏的、慢的mt4可以用钱来工作,但新的、花哨的mt5不能。怎么说呢?

 
fxsaber

使用链接中的这个公式。

例如,我们计算了CADJPY的抵押品,我们得到了CAD的抵押品

SymbolInfoDouble("CADJPY",SYMBOL_TRADE_CONTRACT_SIZE) / AccountInfoInteger(ACCOUNT_LEVERAGE)*0.7625 // СADUSD

我可以看到0.7625,这是CADUSD的价格,但终端中甚至没有这样的一对。

用 "复制粘贴 "的方法将"MODE_MARGINREQUIRED"功能转移到mt5,从而使开发者的生活更轻松,这有那么难吗?

 
阿尔乔姆-特里什金
我希望能有独立于程序类型的计算。
开发人员认为,保证金计算(和其他一些信息功能)是一种交易功能,应该在指标中禁止使用。我就这个问题开了一个严肃的话题--它的版主立即把它删掉了,一如既往地匿名。现在我不关心它了,在KB中发布了一个没有保证金的阉割指标。
 
维塔利-穆齐琴科

恕我直言,我打算带你回到 你的阅读中去

我承认,我当时没有注意到。不知为何,我总觉得计算利润率是不必要的。特别是在指标方面。在什么地方可以需要它的指标?

我认为解决方案非常简单。当我有空的时候,我会想清楚的。

 
维塔利-穆齐琴科

你可以得到它,但如果我们使用AUDCAD,我们将得到澳元货币的保证金,而账户是以美元计价的。如果我们使用澳元兑美元的价格,我们会得到所需的保证金,但这并不是普遍和糟糕的,因为有一些账户有前缀和后缀,这里开始了整个故事。此外,在市场概览中可能根本没有配对开放,计算结果将付诸东流。

而如果澳元兑美元不在市场概况中,这四种回报会是什么?

对于指标中边际反映的具体任务,有可能构建一个拐杖,考虑到前缀和后缀(或使用一个辅助顾问)。交易的东西都有。

 
安德烈-哈蒂姆连斯基

而如果澳元兑美元不在市场概况中,这四种回报会是什么

对于在指标中显示保证金的具体任务,可以建立一个考虑到前缀和后缀的拐杖(或使用一个辅助EA)。而对于交易来说,一切似乎都在那里。

四将返回"MODE_MARGINREQUIRED" )

阿列克谢-沃尔昌斯基
我认为计算保证金(以及其他来自信息功能的东西)是一种 交易功能,应该在指标中禁止使用。我就这个问题开了一个严肃的话题--它的版主立即把它删掉了,一如既往地匿名。现在我不关心它了,在KB中发布了一个没有保证金的阉割指标。

它真的是交易吗?)))尽管是的,开火并不是被禁止的。我想知道它的交易内容,是开仓还是平仓,或者只是修改订单?

fxsaber:

我承认,我当时没有注意到。我总是不需要计算保证金。此外,它在指标中是没有必要的。在哪里可能有必要的指标?

我认为解决方案非常简单。当我自由了,我就会发明它。

除了MA和随机指标外,还有一些信息性指标。例如,在进行交易前了解存款的信息指标(观察MM),计算手数,看是否符合你的TS的条件或不进入交易,等待另一个信号。而这仅仅是其使用的一个例子。

 
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_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
这是对FOREX的一种计算。其余的是通过类比。
 
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);
}
这是对外汇的计算。其余的也差不多。
非常感谢,日元对仍有一个错误。
 
维塔利-穆齐琴科
非常感谢,日元对仍有一个错误。
是的,我搞砸了一点。现在它是正确的。