MetaTrader 5是如何计算利润的?

 

运行一个简单的脚本。

//+------------------------------------------------------------------+
//|                                                       profit.mq5 |
//+------------------------------------------------------------------+
string com;
string Sy[28]={"EURGBP","EURAUD","EURNZD","EURUSD","EURCAD","EURCHF","EURJPY","GBPAUD","GBPNZD","GBPUSD",
              "GBPCAD","GBPCHF","GBPJPY","AUDNZD","AUDUSD","AUDCAD","AUDCHF","AUDJPY","NZDUSD","NZDCAD",
              "NZDCHF","NZDJPY","USDCAD","USDCHF","USDJPY","CADCHF","CADJPY","CHFJPY"};
double a[28],b[28],BuyPlus[28],BuyMinus[28],SellPlus[28],SellMinus[28];
double diff=0.001;

void OnStart()
  {com="";
   for(int i=0;i<28;i++)
      {b[i]=SymbolInfoDouble(Sy[i],SYMBOL_BID);a[i]=SymbolInfoDouble(Sy[i],SYMBOL_ASK);
       OrderCalcProfit(ORDER_TYPE_BUY,Sy[i],1.0,a[i],a[i]+diff,BuyPlus[i]);
       OrderCalcProfit(ORDER_TYPE_BUY,Sy[i],1.0,a[i],a[i]-diff,BuyMinus[i]);
       OrderCalcProfit(ORDER_TYPE_SELL,Sy[i],1.0,b[i],b[i]+diff,SellPlus[i]);
       OrderCalcProfit(ORDER_TYPE_SELL,Sy[i],1.0,b[i],b[i]-diff,SellMinus[i]);
       
       com=com+"\n"+Sy[i]+"  BuyPlus="  +DoubleToString(BuyPlus[i],4)
                         +"  BuyMinus=" +DoubleToString(BuyMinus[i],4)
                         +"  SellPlus=" +DoubleToString(SellPlus[i],4)
                         +"  SellMinus="+DoubleToString(SellMinus[i],4);
      }//for
   Comment(com);
  }//start

这个错误是清晰可见的...

问题一定来自SYMBOL_TRADE_TICK_VALUE_PROFITSYMBOL_TRADE_TICK_VALUE_LOSS

我们将需要SYMBOL_TRADE_TICK_VALUE_LONG和SYMBOL_TRADE_TICK_VALUE_SHORT

搜索结果发现了一些有趣的东西。

Renat:

Я вчера, когда смотрел код, неверно выразился по поводу разной стоимость пункта в зависимости от направления.

Точнее сказать, что TickValue при конвертации в целевую валюту зависит от того, убыточна она или нет. То есть, если мы получили убыток в 1 пипс, то нам надо его выкупить по цене Ask, а если прибыль в 1 пипс, то продать по цене Bid.


这当然是错误的。对于一个空头头寸,价格反过来说....

我真的希望这个错误是不由自主的。你能不能纠正它,请!

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

遗憾的是,这个问题没有明确说明,也没有从提出的例子中得出结论。目前还不清楚--究竟什么是表示为错误。

请准确地表述你的问题,附上所获得的结果并指出其中的错误所在。

例如,指出这里的错误所在。

EURGBP  BuyPlus=158.40000000  BuyMinus=-158.48000000  SellPlus=-158.48000000  SellMinus=158.40000000  Profit=1.58398000  Loss=1.58482000

我在最后添加了SYMBOL_TRADE_TICK_VALUE_PROFIT 和SYMBOL_TRADE_TICK_VALUE_LOSS值。

你可以看到,利润实际上考虑到了不同的刻度值,这取决于交易的盈利或亏损。这是因为有一个隐含的转换操作,当一个人必须卖出(如果是盈利)或买回(如果是亏损)获得的财务结果在一种货币中进行转换。

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

 

一个"√"的价值并不取决于交易的利润或损失。

盈利和亏损将以同一价格收盘。转换是一样的。

只有短线和长线的交易才会有刻度值的差异,并且在转换为存款货币 时可以有不同的计算方法。

BuyPlus和BuyMinus的例子将是相等的。也有SellPlus和SellMinus。你只能购买....与卖家不同...

你在这里混淆了一些东西。

雷纳特

...当你要卖出(如果是盈利)或买回(如果是亏损)的财务结果,以一种货币进行转换。

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

当你开立欧元兑英镑的交易,而入金的货币是 美元,你基本上有(大致)买入欧元兑美元和卖出英镑兑美元(音量的差异并不重要,因为在你关闭时它们不会改变)

开盘:以 Ask(EURUSD) 买入 EURUSD,以 Bid(GBPUSD) 卖出 GBPUSD

在收盘时(如果是盈利,如果是亏损),你有相同的价格:买入(EURUSD)和卖出(GBPUSD)

为什么盈利/亏损 的刻度值不同

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

这是开发商长期以来的错误观念 造成的。

Renat:

更准确的说法是,兑换成目标货币时的TickValue取决于是否是损失。也就是说,如果我们有1个点的损失,我们必须以Ask价格买回来,如果我们有1个点的利润,我们必须以Bid价格卖掉它。

 
Manov:

一个"√"的价值并不 取决于交易是盈利还是不盈利。

盈利和亏损将以同一价格收盘。在转换时,价格也将如此。

这只是它的作用。

要做到这一点,你需要了解具有复杂交叉 转换的数学计算。只要你用欧元兑美元和英镑兑美元等主要货币进行操作,你就不会看到什么。

是的,乍一看似乎并不取决于它,但如果你详细地检查十字架 ,你会发现它确实如此。

 
Renat:

这就是问题所在,它取决于。

这实际上是一个没有意义的问题。雷纳特的逻辑很清晰,乍一看甚至似乎很正确。

当你做交叉交易时,你在其基础货币 中获得了利润。例如,欧元兑英镑 交易的利润是以英镑 计算的。但在MT5 中没有多币种利润的概念,所以英镑的利润 会被即时转换为账户货币。而且,似乎在正数利润的情况下,它必须按照当前的汇率GBPUSD_Bid 进行转换,而在负数的情况下--GBPUSD_Ask

然而,这里有一个反例

  1. 你有两个独立的账户。你决定把资金从一个转到另一个。
  2. EURGBP 上,你将一个账户的内部价差设置为BuyLimit。因此,投标价格 成为你的。
  3. 在另一个账户上,使用市场订单,你执行卖出
  4. 通过这个简单的操作,你已经卖给了自己。
  5. 一段时间过去了,你决定完成交易。
  6. 在第一个账户中,你在价差内设置SellLimit。现在你的价格变成了 "要价"。
  7. 在另一个账户上,你用市场订单来买入
  8. 事实证明,你现在已经从你自己的账户中购买了。
  9. 每个账户中的两笔交易都已关闭。你买了又卖给你自己。
  10. 在一个账户中你有正的利润,而在另一个账户中则是负的。
  11. 你认为你们两个账户中的资金数额有变化吗(不包括经纪人的佣金)?
  12. 根据雷纳特的逻辑,它已经改变了。因为一个账户的利润将不等于另一个账户的损失。而且,尽管你自己也在买进和卖出。
  13. 这样说对吗?

我们在谈论市场条件--ECN/STP 经纪人。

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

然而,一个反例
  1. 这是正确的做法吗?

这是关于市场条件 -ECN/STP 经纪人。

考虑到至少有两个其他的内部转换交易有自己的价差。
 
Renat:

这就是问题所在:这取决于。

要做到这一点,你需要深入研究具有复杂交叉 转换的数学计算。只要你用欧元兑美元和英镑兑美元等主要货币进行操作,你就不会看到什么。

是的,乍一看,似乎不应该依赖,但如果你详细检查十字架 ,你会发现它确实如此。

要价/出价的计算可能很复杂,但 事实上,对于所有的交叉盘你有2个交易

1. 买入或卖出SYMBOL_CURRENCY_BASE-ACCOUNT_CURRENCY的要价/出价

2) 买入或卖出SYMBOL_CURRENCY_PROFIT -ACCOUNT_CURRENCY的要价/出价

每笔交易,如果我们以买入价开盘,我们将以卖出价收盘。反之亦然......。

结果符号对于收盘价来说并不重要,就像现在MetaTrader 5上所做的那样!

 
Renat:
请记住,至少还有两个内部转换有自己的传播。

我们谈论的是什么转换操作?逻辑很简单,你必须将多币种利润转换为账户货币,仅此而已。在这个例子中,英镑的利润必须转换为美元。利润是正数还是负数并不重要,你必须转换它。

你已经放弃了获取多币种利润并在展期时进行兑换的市场计划。这与定位为市场平台的MT5的市场条件 不同。但为了简化起见,这种背离可以理解,而且在许多情况下(不是所有情况下)不会产生严重的费用。

但在利润计算的情况下,以正确的名称称呼事物,你是有意或无意地促成了一个欺诈性的计划,从客户那里拿钱,而有利于使用MT5的经纪人。让 我解释一下,目前经纪人在MT5上从所有客户的交易中获得的额外利润等于(大致)他所有客户在交叉盘上的营业额,乘以相应的主力合约的点差。

你已经实施了一个免费的计划,在价差上赚钱,而且是在任何价差上赚钱。例如,在新闻期间,在同一个英镑兑美元上,点差可能非常大,如果在经纪商的客户处有收盘/开盘,经纪商就会在一个平坦的地方赚取这个巨大的点差。

这是一个缺点,多币种利润放弃,因为多币种价差在新闻期间可以以非常讨厌的价格转换。而事实上,在展期期间,多币种利润是按所有客户的总净值进行转换的。而这种不平衡是不可能发生的,如上面的反例所示。