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