文章 "EA 交易中的资金管理函数"

 

新文章 EA 交易中的资金管理函数已发布:

交易策略的开发主要着重于搜索进入和退出市场的模式以及维持仓位。如果我们能够将某些模式公式化为自动交易规则,则交易者面临计算持仓量、预付款数额等问题,以及在自动模式中维持抵押资金的安全水平以保证未平仓位的问题。在本文中,我们将使用 MQL5 语言构建几个进行这些计算的简单例子。

作者:MetaQuotes Software Corp.

 

哦,这里出现了最美味的 "阅览室",让我们一起来读一读它是什么、如何......

尤其是这样一位作者。:)

 

我还希望看到交换计算功能。 交换有 5 种,每种都有自己的细微差别。

有时你无法通过科学方法找到正确的位置。

我通过选择找到了三种变体,但仍有SYMBOL_SWAP_MODE_BY_INTEREST。我无法检查它,因为我找不到使用这种计算方法的经纪商。

如果能在 CodeBase 中发布指定货币和手数的掉期计算功能,我们将不胜感激。

 
sergeev:

我还希望看到交换计算功能。 交换有 5 种,每种都有自己的细微差别。

有时你无法通过科学方法找到正确的位置。

我通过选择找到了三种变体,但仍有 SYMBOL_SWAP_MODE_BY_INTEREST。我无法检查它,因为我找不到使用这种计算方法的经纪商。

如果能在 CodeBase 中发布指定货币和手数的掉期计算功能,我们将不胜感激。

+1.或者更好的办法是,在标准库中 实现所有这些计算,我们将看到如何以及如何正确操作...
 
我想文档里是这么说的。在 mcl4 中也是一样,只是公式变了。
 
Если даже торговля на данном счете разрешена, то это еще не означает, что эксперт имеет право торговать. Чтобы проверить, разрешено ли торговать эксперту, пишем:

什么情况下允许交易,但不允许使用 Expert Advisor?

是指经纪商禁止还是终端设置?

与 4 类比: - "......如果允许专家进行交易,并且交易操作的流量是自由的......"

也就是说,IsTradeAllowed= IsExpertEnabled+ IsTradeContextBusy

IsTradeAllowed - Документация на MQL4
  • docs.mql4.com
IsTradeAllowed - Документация на MQL4
 

这篇文章既有趣又有必要!我试着检查了这篇文章中的公式,结果是这样的。让我们以 EURGBP 为例。账户货币是美元。最近的货币对是 EURUSD,即模式=true。我们使用文章中的公式来确定所需的保证金:

   if(direction==POSITION_TYPE_BUY)
     {
      //--- 反向引用
      if(mode)
        {
         //--- 按反向报价的买入价计算
         calc_price=tick.ask;
         answer=lot*lot_size*calc_price;
        }
...
if(direction==POSITION_TYPE_SELL)
     {
      //--- 反向引用
      if(mode)
        {
         //--- 按反向报价的卖价计数
         calc_price=tick.bid;
         answer=lot*lot_size*calc_price;
        }

也就是说,根据文章,买入时所需保证金应为

买入:保证金 =手数*手数*阈值/杠杆率

卖出时

卖出:保证金 =手数*手数*买入价/杠杆率

我们将这些公式编码到一个简单的 EA 中,并尝试提前以较低的资金卖出和买入欧元兑美元,这样 metatrader 就会告诉我们需要多少保证金。同时,我们输出计算出的保证金。我们从测试器中得到这些信息:

2010.07.06 16:34:01 Core 1 没有足够资金 [instantsell 0.10 EURGBP at 0.82227 sl: 0.83296 tp: 0.79796]
2010.07.06 16:34:01 Core 1 PrevBalance: 10.00, PrevEquity 10.00, PrevMargin: 0. 00, NewMargin:122.91, NewFreeMargin: -112.91- 由测试人员计算的保证金
2010.07.06 16:34:01 Core 1 Error:not enough money.自由保证金 = 10,所需保证金 =122.899 - 由我们计算的 保证金


2010.07.06 16:34:01 Core 1 没有足够资金 [instantbuy 0.10 EURGBP at 0.81247 sl: 0.80191 tp: 0.82988]
2010.07.06 16:34:01 Core 1 PrevBalance: 10.00, PrevEquity 10.00, PrevMargin: 0. 00, NewMargin:122.72, NewFreeMargin: -112.72- 由测试人员计算的保证金
2010.07.06 16:34:01 Core 1 Error: not enough money.自由保证金 = 10,所需保证金 =122.737 - 由我们计算的 保证金

这就是区别。现在,我们将计算所需保证金的公式改为

买入:保证金 =手数*手数*买入价/杠杆率

卖出:保证金 =手数*手数*卖出价/杠杆率

这与文章相矛盾。我们从测试人员那里得到了这样的信息:

2010.07.06 16:39:49 Core 1 没有足够资金 [instantsell 0.10 EURGBP at 0.82227 sl: 0.83296 tp: 0.79796]
2010.07.06 16:39:49 Core 1 PrevBalance: 10.00, PrevEquity 10.00, PrevMargin: 0. 00, NewMargin:122.91, NewFreeMargin: -112.91- 由测试人员计算的保证金
2010.07.06 16:39:49 Core 1 Error: not enough money.Free margin = 10, required margin =122.911 - margin calculated by us

2010.07.06 16:39:49 Core 1 no enough money [instantbuy 0.10 EURGBP at 0.81247 sl: 0.80191 tp: 0.82988]
2010.07.06 16:39:49 Core 1 PrevBalance: 10.00, PrevEquity 10.00, PrevMargin: 0.00, NewMargin:122.72, NewFreeMargin: -112.72- 由测试人员计算的保证金
2010.07.06 16:39:49 Core 1 Error: not enough money.Free margin = 10, required margin =122.722 - 由我们计算的 保证金

在这里,Expert Advisor 使用 "错误 "方法计算出的保证金与测试人员计算出的保证金完全相同。事实证明,在计算 EURGBP 等交叉盘时,无论是测试器还是文章中的买入价和卖出价都是重新排列的。谁是正确的:文章还是测试器?

 

这篇文章很好,对我很有用。

既便于理解,又节省时间。谢谢

我只是不明白使用这个函数能得到什么。

如果需要抵押品,合同价值不是应该除以杠杆吗?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
SHOOTER777:

这篇文章很好,对我很有用。

既便于理解,又节省时间。谢谢

我只是不明白这个功能能给我们带来什么。

如果是所需抵押品 的大小,那么合同价值不是应该除以杠杆率吗?

我没有马上明白。我花了一个小时才弄明白为什么结果与实际结果相差 100 倍。
 
SHOOTER777:

如果需要保证金,合同价值不是应该除以杠杆吗?

合约价值不是保证金金额。代码会用价值除以杠杆,得出保证金金额。
 
在您演示的欧元兑美元货币对 上......可用资金为 10 000,我不能以 10 手开仓......为什么?如何根据可用资金计算最大可能手数?