文章 "如何将MetaTrader 5中的交易复制到MetaTrader 4" - 页 2

[删除]  
Urain:

在反转或切入时都不会出现差异,差异仅出现在当前时刻的报价水平差异和执行滞后上。

理想情况下,如果 MT 之间的报价相等,滞后期为 0,那么交易将带来相同的利润。


并不适合所有交易策略(如上所述,我指的是如果您不将 MT4 交易方法调整到 MT5)。

我说的不是 R2 和 MT5 的结果差异(但 Rumus 实在是没办法,我们就不考虑它了)。

真正想用 MT5 管理 MT4 交易的人应该考虑反向过程。

同时,在策略中更多地使用精确翻转和切割(在多货币条件下)。

如果能按照 GMT 或终端的当地时间(如果它们位于同一时区)同步所有交易过程和余额信息,那就更好了。

PS

这与 "汇率 "无关,甚至与存款的负载也无关。这与您需要放弃什么以及如何改变策略有关。

从这个意义上讲,唯一的方便之处在于所有 MT4 交易过程都可以调整为 netteng,并获得 100% 的结果。

当然,重要的一点是,在大多数交易策略中,翻转和割肉等现象非常罕见。

Urain

关于 dll,MQ 不可能挖掘每一个第三方代码检查其安全性,而且不是每个人都有 delphi 或 srp 编译器。您可以发布一个 "圣经 "的代码,然后用另一个编译文件代替。因此目前只能使用 ex5。

不幸的是,MQL5 将不会很快提供至少一半的可能性,而这些可能性可以在 DLL 的帮助下获得。

许多开发工具都可以使用 DLL,它可以让您跳出 "沙盒",而且体积不大。

作为一种选择,您可以应用与 WinAPI 绑定的 MQL 库。

 
Interesting:

并非适用于所有交易策略(如上所述,我指的是如果您不将 MT4 交易方法调整到 MT5)。

我说的不是 R2 和 MT5 的结果差异(但 Rumus 实在不在人世,我们就不考虑它了)。

我已经是第 n 次读到这句话了,我想第 n 次请您举出至少一个订单/交易序列,当它从 MT5 转到 MT4(或相反)时,其财务结果会发生变化。历史订单/交易列表不会改变,当前未结头寸的显示也不会不同,但财务结果会改变

我认为,如果交易条件相同(报价/价差/隔夜利息/止损杠杆等),MT5 的结果将与 MT4相同或更好(由于隔夜利息,如果 MT4 上有 2 个反向头寸,结果会更好)。


是的,在复制交易 时组织所有细微差别的核算是一项艰巨的任务。但这是另一项任务,与净额结算问题的理论部分无关。

 
komposter:

事实上,OnTrade 是处理头寸列表变化的理想场所。您只需确保在启动时立即复制现有交易(而不是在下一个交易事件时)。

过滤事件非常简单--检查头寸列表,只有当列表中发生变化时才继续处理。

我说的不是这种过滤,在 OnTrade 事件中,不仅会出现已执行的交易,还会出现已下单的交易,而这反过来不一定会被执行。
 
Urain:
我说的不是这种过滤,在 OnTrade 中,事件不仅会出现在已执行的交易中,还会出现在已下单的交易中,反过来,它也不一定会被执行。
这就是我们所说的--您不需要对下单/取消/执行订单做出反应。为此,您需要检查仓位 是否发生了变化。
 

好主意。很久以前我就想这么做,但没有成功,在这里我看到了我的错误。


向作者致敬。!!!

 
komposter:
这就是我们所说的--您不必对下单/取消/执行订单做出反应。为此,您需要检查仓位 是否发生了变化。

那么,复制 OnTimer 并将其重命名如下:

void OnTimers()
  {
//--- 获取位置 
   get_positions();
//--- 如果位置不相等,则保存新数据
   if(compare_positions())saves_positions();
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnTrade()
  {
//--- 获取位置 
   get_positions();
//--- 如果位置不相等,则保存新数据
   if(compare_positions())saves_positions();
  }

//EventKillTimer(),然后在 OnDeinit 中注释掉定时器的销毁;

和 OnInit 中的EventSetTimer(1); 删除。

OnTimers();

实际上,ZY 已经完成了整个修改工作,但我只能在周一进行检查。

 
Urain:

好吧,那就复制一个 OnTimer,然后像这样重命名:

这就是我的意思,很简单;)


Urain

并在 OnInit 中代替 EventSetTimer(1);; put

这就是我想提醒你的--如果初始化 "失败"(例如,启动终端 时,数据无法及时加载),复制器将 "休眠",直到下一个交易事件发生。在这种情况下,我们应该提供一个无限循环或相同的定时器,它将一直工作到初始化成功为止。

 
Urain:

至于库,我并不反对使用 ex5 库,但我不想使用 dll,因为这会打击最终用户的积极性。

另外,额外安装 MT4 对最终用户来说也不太方便;-)。用户很可能已经安装 MT4 很长时间了,根本不需要 MT5 文件。也许我们应该推荐使用 subst 作为一种技巧?
 
marketeer:
对于最终用户来说,安装 MT4 的额外副本也不是很方便。)用户很可能已经安装 MT4 很长时间了,根本不需要 MT5 文件。也许您应该推荐使用 subst 作为一种技巧?
我也有过类似的想法。但 subst 有一些缺陷(至少在 XP 中是这样):访问物理磁盘(\\.PHYSICALDRIVEx)会停止工作。
 
marketeer:
对于最终用户来说,安装 MT4 的额外副本也不太方便。)用户很可能已经安装 MT4 很长时间了,根本不需要 MT5 文件。也许您应该推荐使用 subst 作为一种技巧?

我并不想写一篇 关于信号传输通道的文章,我只是找到了最简单易懂的解决方案。

我认为信号传输是另一篇文章的主题。

关于在这里放置第二台 MT 不太方便的问题,我认为你错了,据我所知,许多用户都在机器上安装了多达十几台 MT,而且没有任何问题。此外,MT4 可以通过简单复制轻松转移。此外,我的代码没有魔力保护,因此不可能通过复制和手动同时使用账户。