簡體   English   中英

如何將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 ++ / Delphi DLL )。

有建議可以通過ANTLRMMVP來完成。 但是,我不知道如何借助上述技術來完成。

有人可以告訴我如何解決我的問題嗎?

如果您不知道如何使用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

建議您為任務使用ANTLR / MMVP?

好吧,核心問題並沒有隱藏在ANTLR工具的功能中。

我花了一些時間進行研究,如果ANTLR可以“保存”我們的IDE的代碼庫問題(不是默認的MetaLang,而是另一個使用更靈活,可配置和可編程的IDE),則仍然無法解決語法錯誤。在多級注釋源代碼中進行花括號匹配。

盡管ANTLR毫無疑問是一匹非常強大的馬,但人們會花很多時間在窄帶領域專攻使用這種通用語言建模和抽象語法樹建模知識。

如果您的團隊可以花幾年的時間學習此曲線,那么請繼續進行規划。 如果沒有 ,那么就需要大量時間來審查,重新設計和重新計划您的項目計划。

為什么?

注意:代碼轉換是最簡單的部分...

需要涵蓋語法差異,
需要涵蓋變量范圍的差異(變得有點困難)

Lexers可能對此有所幫助。


了解概念差異

我喜歡您的想法,即基於目標API服務在C ++端創建代理層,以便在MQL4-> Forex Tester行進路線的更靈活的部分上調解缺失的行為。

在MQL4的美好時光(當時確實是MQL4,而不是“ New” -hybrid),我出於類似的目的但出於不同的動機而開發了一些語法包裝器,其中普通的和簡單的MQL4概念是不可行的保持無助。

MetaTrader Terminal 4中作為MQL4程序類型的代碼執行生態系統可用的主要架構和不同的modi操作的正確理解。 腳本| 如果您決定詳細說明從MQL4- DSL域到另一個DSL域的代碼轉換,那么}只是該方法的開始。


棺材的最后釘子……語法在New-MQL4.56789中蔓延

值得一提的是,近年來MQL4開始成為一種非常不同的語言。

一旦可以猜測出對代碼庫維護的意義,那么一旦代碼庫跨越了數百人的年頭,這將意味着“幕后”的噩夢。

簡而言之,盡管關鍵概念並沒有經常變動,但每個新版本的MetaTrader Terminal 4作為代碼執行生態系統或MetaEditor作為半集成代碼編譯工具鏈}(以前稱為MetaLang.exe( New-MQL4.56789 ...)(盡管兩者都是由自己控制的,即使是由代理方操作的策略強制執行“強制更新”,因此,進行任何特定的“版本凍結”都無法使您擺脫困境在此雷場上進行強制性跳舞)。


如何解決?

如果您遇到這種情況,我會請項目經理/項目發起人說明創建此類通用代碼轉換器的可用預算,時間限制和客戶偏好。

如果可行 ,我將使用給定的時間表/勞動力/預算啟動一個新項目,並獲得獨立的項目管理和成本控制。

如果不可行,我將請項目指導委員會重新定義指標,並更新和發布調整后的項目計划/勞動力/進度/預算,以便在沒有自動化工具的情況下執行代碼庫轉換任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM