程序库: MT4Orders - 页 29 1...222324252627282930313233343536...95 新评论 Ilya Malev 2018.12.17 15:42 #281 关于佣金,有一件有趣的事。MT5 在进入和退出交易时将佣金分成两半(如果一个仓位有 2 笔交易)。OrderCommission 返回的是交易佣金的 2 倍(由 PositionID 计算?)但要获得与测试版相同的报告指标,需要将盈利交易的一半佣金计算在内,而进入交易时提取的部分应计入总损失。也就是说,盈利的交易计入订单佣金()的 1/2,不盈利的交易计入全部佣金,总损失中的每笔盈利+1/2....。这是最简单的情况,即没有部分进入/退出,我还不想考虑更复杂的情况。)我想知道 OrderSwap() 是否也是如此?附注:不,swap 似乎只在输出方向收费。总的来说,这个库很酷,再次感谢 saber。 fxsaber 2018.12.17 16:28 #282 Ilya Malev:要获得与测试版相同的报告指标,必须考虑盈利交易佣金的一半,而进入交易时提取的部分应计入总损失。也就是说,盈利的交易计入订单佣金()的 1/2,不盈利的交易计入全部佣金,总亏损中的每笔盈利+1/2....。这是最简单的情况,即没有部分进入/退出,我不想考虑更复杂的情况))))。有问题。 Ilya Malev 2018.12.17 16:51 #283 fxsaber:有些东西被弄乱了。我正在为不同类型的交易并行计算 PF 指标,这些交易在测试期间同时开启。因此我注意到,如果我愚蠢地将所有加仓和减仓交易的 OrderProfit()+OrderCommission()+OrderSwap 分别相加,那么最终的总盈利、总亏损和无煤烟 PF 将不会重合。要使它们重合,您需要执行以下操作(如果在 "理想测试环境 "中,每个仓位保证有 2 笔交易) double summ_plus=0, summ_minus=0; int oht=OrdersHistoryTotal(); for(int i = oht-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)&&OrderType()<2/*...*/) { if(OrderProfit()>0) { summ_plus+=OrderProfit()+OrderCommission()/2+OrderSwap(); summ_minus+=-OrderCommission()/2; } else { summ_minus+=-OrderProfit()-OrderCommission()-OrderSwap(); } } } return(summ_minus>0?summ_plus/summ_minus:0.0); // MT5 测试仪上的正确利润因素 fxsaber 2018.12.17 19:08 #284 Ilya Malev:我与测试人员同时计算不同类型交易的 PF 指标,这些交易在测试期间同时开启。因此,PF 计算是绝对错误的。无论使用什么平台,PF 的计算方法都不一样。它是一个纯数学概念。因此,它的计算总是明确无误的。 Ilya Malev 2018.12.17 19:28 #285 fxsaber:因此,PF 计算完全错误。无论使用什么平台,PF 的计算方法都不可能不同。它是一个纯数学概念。因此,它的计算总是明确无误的。那么,请尝试自己计算任何系统,并与 MT5 报告中的数字进行比较。只是佣金最好是外汇(因为我在测试外汇)。 fxsaber 2018.12.17 20:10 #286 Ilya Malev:请尝试自己计算任何系统,并与 MT5 报告中的数字进行比较。只有在有佣金的情况下,而且最好是外汇交易(因为我在测试外汇交易)。我把这段代码插入了MQL5\Experts\Examples\Moving Average\Moving Average.mq5。 #include <MT4Orders.mqh> double GetPF() { double SumPlus = 0; double SumMinus = 0; for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL)) { const double Profit = OrderProfit() + OrderCommission() + OrderSwap(); if (Profit > 0) SumPlus += Profit; else SumMinus -= Profit; } return(SumMinus ? SumPlus / SumMinus : DBL_MAX); } 与测试器完全吻合。 Ilya Malev 2018.12.17 20:12 #287 fxsaber:我将这段代码插入了MQL5\Experts\Examples\Moving Average\Moving Average.mq5与测试器完全匹配。所以也许你连接的账户类型没有交易佣金。 P.S. 我会再检查一遍的,好吗。如果有的话,我会把它连同图片一起发布:) Ilya Malev 2018.12.17 20:48 #288 fxsaber:我将这段代码插入了MQL5\Experts\Examples\Moving Average\Moving Average.mq5与测试者完全吻合。MetaQuotes-Demo 服务器没有外汇交易佣金。 1) 找到一个服务器,例如,在经纪商 A-i. 2) 在代码中添加 printf("My Profit Factor = %.8f, MT5 Profit Factor = %.8f",GetPF(),TesterStatistics(STAT_PROFIT_FACTOR)); // а заодно это printf("My Plus=%.8f, My Minus=%.8f, MT5 Plus=%.8f, MT5 Minus=%.8f",SumPlus,SumMinus, TesterStatistics(STAT_GROSS_PROFIT),TesterStatistics(STAT_GROSS_LOSS)); 3) ??? 4) 盈利:lol: fxsaber 2018.12.17 20:50 #289 Ilya Malev:因此,您所连接的账户类型可能没有交易佣金。没错,我在错误的交易服务器上进行了检查。在有佣金的情况下,正确的 PF 与 Tester 不一致。这表明 MT5 的 PF 计算错误,完全没有考虑 DEAL_IN 佣金。 利润计算完全正确 double GetProfit() { double Res = 0; for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL)) Res += OrderProfit() + OrderCommission() + OrderSwap(); return(Res); } MT5 中的 PF 是错误的。MT5 在交易结束时的 PF 可能是无限的,余额会不断减少。这当然是错误的。 Ilya Malev 2018.12.17 20:52 #290 fxsaber:对,在错误的交易服务器上进行了检查。加上佣金后,正确的 PF 与测试器不符。这说明 MT5 计算 PF 的方法不正确,完全没有考虑 DEAL_IN 佣金。这表明他们有不同的理念 - 他们不把交易视为一个整体(历史头寸选择等意义上的历史头寸并不存在)。对他们来说,每笔交易都是独立的操作,这就是为什么他们在输入损失时要加上佣金(虽然不清楚为什么要从输出利润中扣除佣金)。 1...222324252627282930313233343536...95 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
有问题。
有些东西被弄乱了。
我正在为不同类型的交易并行计算 PF 指标,这些交易在测试期间同时开启。因此我注意到,如果我愚蠢地将所有加仓和减仓交易的 OrderProfit()+OrderCommission()+OrderSwap 分别相加,那么最终的总盈利、总亏损和无煤烟 PF 将不会重合。要使它们重合,您需要执行以下操作(如果在 "理想测试环境 "中,每个仓位保证有 2 笔交易)
我与测试人员同时计算不同类型交易的 PF 指标,这些交易在测试期间同时开启。
因此,PF 计算是绝对错误的。无论使用什么平台,PF 的计算方法都不一样。它是一个纯数学概念。因此,它的计算总是明确无误的。
因此,PF 计算完全错误。无论使用什么平台,PF 的计算方法都不可能不同。它是一个纯数学概念。因此,它的计算总是明确无误的。
那么,请尝试自己计算任何系统,并与 MT5 报告中的数字进行比较。只是佣金最好是外汇(因为我在测试外汇)。
请尝试自己计算任何系统,并与 MT5 报告中的数字进行比较。只有在有佣金的情况下,而且最好是外汇交易(因为我在测试外汇交易)。
我把这段代码插入了MQL5\Experts\Examples\Moving Average\Moving Average.mq5。
与测试器完全吻合。
我将这段代码插入了MQL5\Experts\Examples\Moving Average\Moving Average.mq5
与测试器完全匹配。
所以也许你连接的账户类型没有交易佣金。
P.S. 我会再检查一遍的,好吗。如果有的话,我会把它连同图片一起发布:)我将这段代码插入了MQL5\Experts\Examples\Moving Average\Moving Average.mq5
与测试者完全吻合。
MetaQuotes-Demo 服务器没有外汇交易佣金。
1) 找到一个服务器,例如,在经纪商 A-i.
2) 在代码中添加
3) ???
4) 盈利:lol:
因此,您所连接的账户类型可能没有交易佣金。
没错,我在错误的交易服务器上进行了检查。在有佣金的情况下,正确的 PF 与 Tester 不一致。这表明 MT5 的 PF 计算错误,完全没有考虑 DEAL_IN 佣金。
利润计算完全正确
MT5 中的 PF 是错误的。MT5 在交易结束时的 PF 可能是无限的,余额会不断减少。这当然是错误的。
对,在错误的交易服务器上进行了检查。加上佣金后,正确的 PF 与测试器不符。这说明 MT5 计算 PF 的方法不正确,完全没有考虑 DEAL_IN 佣金。
这表明他们有不同的理念 - 他们不把交易视为一个整体(历史头寸选择等意义上的历史头寸并不存在)。对他们来说,每笔交易都是独立的操作,这就是为什么他们在输入损失时要加上佣金(虽然不清楚为什么要从输出利润中扣除佣金)。