我需要创建一个自动代码转换器
从 MQL4 API
(一种类似 C 的语言)
到 复盘大师 API
(C++/Delphi DLL
)。
有人建议可以借助ANTLR
和MMVP
来完成。但是,我不知道如何借助上述技术来完成。
谁能告诉我如何解决我的问题?
如果您不知道如何使用 ANTLR
或 MMVP
完成我的任务,请告知其他技术。
这是一个简单的 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
最佳答案
有人建议您在任务中使用 ANTLR/MMVP?
嗯,核心问题并不隐藏在 ANTLR 类工具的功能中。
我花了一些时间研究,如果 ANTLR 可以“拯救”我们的 IDE(不是默认的 MetaLang,另一个使用了更灵活、可配置和可编程的 IDE)仍然无法解析语法的代码库问题- 多级注释源代码中的大括号匹配错误。
虽然 ANTLR 毫无疑问是一匹非常强大的马,但人们会花费很长时间来缩小范围专门研究使用这种通用语言建模和抽象语法树建模知识。
如果您的团队可以花几个人*年的时间来了解这条学习曲线,那么,继续规划。如果不能,那么现在正是审查、重新设计和重新安排您的项目计划。
为什么?
注意:代码转换是最简单的部分...
需要弥补语法上的差异,
需要涵盖变量范围的差异(变得有点困难)
词法分析器可能会在这方面有所帮助。
理解概念差异
我喜欢你基于目标 API 服务在 C++ 端创建代理层的想法,以便调解 MQL4->Forex Tester 更灵活部分的缺失行为行军路线。
在 MQL4 的美好岁月里,(当它确实是 MQL4,而不是"new"-混合)时,我开发了一些语法包装器用于类似的目的但具有不同的动机,其中简单明了的 MQL4 概念保持无助是不可行的。
正确理解 MetaTrader Terminal 4 中作为 MQL4 程序类型的代码执行生态系统的主要架构和不同操作方式 { EA |剧本 |一旦您决定详细说明从 MQL4-DSL-domain 到另一个 DSL-domain 的代码转换,指标 } 只是该方法的开始。
棺材里的最后一颗钉子……New-MQL4.56789 中的语法问题
很难不提近年来 MQL4 开始成为一种非常不同的语言。
一旦可以猜测这对代码库维护意味着什么,一旦代码库跨越大约 n 数百人年,这就代表“幕后”的噩梦。
简单地说,虽然关键概念不会经常变动,但作为代码执行生态系统的 MetaTrader Terminal 4 或作为半集成代码编译工具链的 MetaEditor 的每个新版本} 以前称为 MetaLang.exe ( 新 MQL4.56789 之前...)让你免于在这个雷区强制跳舞。
如何解决?
如果我遇到您的情况,我会请项目经理/项目发起人说明创建此类通用代码转换器的可用预算、时间限制和客户偏好。
如果可行,我会按照给定的时间表/劳动力/预算启动一个新项目,并获得独立的项目管理和成本控制。
如果不可行,我会要求项目指导委员会重新定义指标,并更新和发布经过调整的项目计划/劳动力/进度/预算,以便在不执行代码库转换任务的情况下执行一种自动化工具。
关于c++ - 如何将 MQL4 代码转换为 C++/Delphi DLL(复盘大师 API)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34306839/