1

我需要创建一个
MQL4 API(类 C 语言)
Forex Tester API(C++/Delphi DLL)的自动代码转换器。

有建议可以在 和 的帮助下ANTLR完成MMVP。但是,我不知道如何在上述技术的帮助下完成。

谁能告诉我的问题如何解决?

如果您不知道如何使用ANTLRMMVP然后请建议其他技术完成我的任务。

这是一个简单MQL4程序的示例。

int Count=0;                                    // Global variable.

int init()                                      // Special function init()
{
   Print ("init()"); 
   return 0;                                      
}   

int start()                                     
{
   double Price = Bid;                          
   My_Function();                               
   Print("New tick:  ",Count,"   Price = ",Price); 
   return 0;                                      
}

int deinit()                                    
{
   Print ("deinit()"); 
   return 0;                                      
}

int My_Function()                               
{
   Count++; 
   return Count;                             
}

用 C++ API 编写的同一程序的示例。

#include <windows.h>
#include "StrategyInterfaceUnit.h"
#include "TechnicalFunctions.h"

int Count=0;
char buf[100];

EXPORT void __stdcall InitStrategy()
{
   Print ("init "); 
}

EXPORT void __stdcall DoneStrategy()
{
   Print ("deinit()");
}

EXPORT void __stdcall ResetStrategy()
{
   Print ("ResetStrategy()");
}

int My_Function()                               
{
   return Count++;                                     
}

EXPORT void __stdcall GetSingleTick()
{
   SetCurrencyAndTimeframe("EURUSD", PERIOD_M1);
   double Price = Bid();                          
   My_Function();
   sprintf (buf, "New Tick %d   Price = %f", Count, Price);
   Print(buf); 
}

Sample.def
LIBRARY ISHIMOKU

EXPORTS InitStrategy
    DoneStrategy
    GetSingleTick
    ResetStrategy
    ReplaceStr
    IntrfProcsRec
4

1 回答 1

2

你被推荐为你的任务使用 ANTLR/MMVP 吗?

好吧,核心问题并不隐藏在 ANTLR 类工具的功能中。

我花了一些时间研究,如果 ANTLR 可以“保存”我们的 IDE(不是默认的 MetaLang,另一个,使用更灵活、可配置和可编程的 IDE)仍然无法解决语法错误的代码库问题多级注释源代码中的大括号匹配。

虽然 ANTLR 毫无疑问是一匹非常强大的马,但人们会花费很长时间来进行窄带专业化,从而只使用这种通用语言建模和抽象语法树建模知识。

如果您的团队可以在此学习曲线上花费几年时间,那么请继续计划。 如果没有,那么现在是审查、重新设计和重新安排您的项目计划的时候了。

为什么?

注意事项:代码转换是最简单的部分......

需要涵盖语法差异,
需要涵盖变量范围的差异(变得有点困难)

词法分析器可能会在这方面有所帮助。


理解概念上的差异

我喜欢您基于目标 API 服务在 C++ 端创建代理层的想法,以便在MQL4->复盘大师行进路线的更灵活部分中调解缺失的行为。

在 MQL4 过去的美好时光中(当时它确实是 MQL4,而不是“新”混合)我已经开发了一些语法包装器用于类似目的但动机不同,其中简单明了的 MQL4 概念是不可行的保持无助。

正确理解MetaTrader 终端 4中可用的主要架构和不同的操作方式作为 MQL4 程序类型的代码执行生态系统 { EA | 脚本 | 一旦您决定详细说明从 MQL4 -DSL 域到另一个 DSL 域的代码转换,指标 } 只是该方法的开始。


进入棺材的最后一颗钉子...... New-MQL4.56789 中的语法令人毛骨悚然

很难不提到近年来 MQL4 开始成为一种非常不同的语言。

一旦可以猜测这对代码库维护意味着什么,一旦代码库跨越大约n 数百人年,这意味着“幕后”的噩梦就越大。

简而言之,虽然关键概念不经常变动,但 MetaTrader 终端 4 的每个新版本作为代码执行生态系统或 MetaEditor 作为半集成代码编译工具链} 以前称为 MetaLang.exe(pre- New-MQL4.56789...)(虽然两者都是在自己的控制之外分发的,即使是通过代理方操作的策略“强制更新”,所以对于特定的“版本冻结”没有办法可以拯救你必须在这个雷区跳舞)。


如何解决?

如果我处于您的情况,我会要求项目经理/项目发起人说明创建这种通用代码转换器的可用预算、时间限制和客户偏好是多少。

如果可行,我将启动一个具有这样给定时间表/劳动力/预算的新项目,并获得独立的项目管理和成本控制。

如果不可行,我会要求项目指导委员会重新定义指标,更新和发布经过调整的项目计划/劳动力/时间表/预算,以便在没有自动化工具的情况下执行代码库转换任务。

于 2015-12-16T08:29:00.640 回答