我可以在MetaTrader4上使用除了MQL4以外的其他语言吗?

8

我有一个任务,需要将C#市场策略迁移到MetaTrader。

  1. 有没有自动化这个工作的方法?(例如,是否可以将C#解析为其AST,然后进行翻译?)

  2. MetaTrader是否以任何方式接受其他语言?

4个回答

7

从架构的角度自下而上地处理任务

是的,您可以简化麻烦并使MT4成为一个节点,它与您当前的C#市场策略立即进行点对点连接。

这使我能够使用基于集群的计算与一群MT4节点进行大规模并行通信。

MT4可以通过更复杂的“可扩展正式通信框架”以非常智能的方式成为anEventFEED节点。

您是否希望拥有CLI界面来命令您的MT4节点 - 一个作为anEventFEED节点,另一个作为anXtoACTOR节点 - 可选择使用CLI指令的语法和语法(不谈论测试自动化等...)?

您是否希望拥有中央<syslog>守护程序,以卸载HFT流量负载的MT4节点,并自动化+管理脚本化的监视和维护任务?

您是否希望拥有外部GPU计算引擎/集群,以按每个tickEvent基础与MT4 EA进行客户端/服务器通信?

ZeroMQ和/或nanomsg框架将允许您设计和开发多对多(节点网络方式)和任意对任意(实现语言方式)的系统。

MT4/MQL4具有直接智能包装器,可用于ZeroMQ >>>感谢GitHub上的Austen Conrad MQL4ZMQ

ZeroMQ>>>由于其出色的团队,具有许多语言绑定-C/C ++,Python,Java,R,甚至Erlang等

因此,您的项目可以在坚实的基础上启动,并独立于任何特定的架构网格锁定(DLL移动沙丘等)

工程内置功能可以节省大量时间和精力,并避免重新发明轮子


@Viclib 在将 C# 市场策略转移到 MT4 平台时,有许多陷阱需要注意。如果要生产专业级服务,则跨编译并不简单。我曾试图联系您,Viclib,以在此方面提供进一步的帮助,但出现了“Error: ENOENT, stat '/home/vh/Viclib/index.html'” 的错误提示。 - user3666197
@Viclib,你的转换项目进展如何,Viclib?无论如何PF2015。 - user3666197
PF2015!我没有因为缺乏C#知识而参与这项工作 :( - 相反,我将注意力转向了函数式编程。谢谢关心,你好吗? - MaiaVictor
1
谢谢,我很好。祝你在有趣的编程中好运,Vic。仍然有比可用时间更多的想法需要审查和实现。继续hack,Vic!如果你发现周围有类似有趣的FX/Quant工作/项目,请告诉我:o) - user3666197

3
如何处理GET/POST请求和基于Web的文本API服务?
您可以使用C#策略来更新基于Web的文本文件,其中包含三元信号:
-1 SELL
 0 HOLD
 1 BUY

然后使用MQL4每分钟读取一次文本文件以获取交易信号。

至于技术上如何实现这一点,很遗憾我是Python程序员而不是MQL4或C#程序员,所以无法提供帮助。


2
FYI:在一个以毫秒为单位的世界中,想象一个基于文件的、由Web服务器操作的、GET / POST访问的每分钟采样一次的系统是很难的。微秒很重要,甚至纳秒都在争取尽可能减少... - user3666197
根据我的经验,大多数量化交易员并不是高频交易员...这是一个非常专业的领域,超越了炒作。对于交易每小时蜡烛图的零售交易来说,这种技术已经足够了。 - litepresence
确实,在大规模计算模型中,纳秒的时间也很重要,这不仅仅限于高频交易。尽管如此,在过去几十秒钟内,H1蜡烛图增加了交易流量,如果您愿意,最终的收盘价会在看跌和看涨力量之间进行交叉,并且即使是基于H1的策略也有充分的理由将时间域"盲区"最小化而死锁在无法控制的交易延迟中。如果某个问题可能需要几毫秒来解决,为什么要花费数百毫秒甚至几秒钟来得出同样的答案呢? 外汇市场从不等待任何人。 - user3666197
1
我明白你的意思。我所开发的大多数策略都基于每周一次的H1和H12指标的“全进全出”。从这个角度来看,纳秒并不是很重要;我只会每分钟检查一次价格。如果你的交易频率更接近于短线交易而不是长线交易,那么这种技术可能会失败,我同意这一点。 - litepresence
SAR Harmonica 上很棒的壁纸。 - user3666197

1
短答案是否定的,但是在MQL中有一个导入DLL的功能。因此,您可以使用C ++ / CLI库将C#库包装起来,通过函数导出公开功能,甚至可以在MQL中运行计时器并实现基本的消息泵。
更新:MT4只能访问未管理的DLL的标准调用。您必须使用C ++包装器的原因是C ++确实具有创建未管理的标准调用的能力。任何其他语言,只要您可以创建标准调用就可以使用。
此外,您需要一个包装器,以防您想要使用不支持标准调用的其他语言。您可以在C ++中编写所有代码,整个包装器概念将过时。

1

是的,可以使用第三方解决方案如NQuotes http://www.nquotes.net/ 来使用C#,它本质上是一个通用的预制DLL(正如Dmitry所说,您也可以创建自己的DLL,但需要一些工作)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接