Как преобразовать код MQL4 в C ++ / Delphi DLL (API Forex Tester)?

Мне нужно создать автоматический конвертер кода
от MQL4 API (C-подобный язык)
в Forex Tester 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

1 ответ

Решение

Вам рекомендовали использовать ANTLR / MMVP для вашей задачи?

Что ж, основная проблема не скрыта в возможностях инструментов ANTLR.

Я потратил некоторое время на исследования, если бы ANTLR мог "сохранить" наши проблемы с базой кода, где наша IDE (не MetaLang по умолчанию, другая, более гибкая, конфигурируемая и программируемая IDE) все еще не могла разрешить синтаксические ошибки на сопоставление скобок внутри многоуровневого закомментированного исходного кода.

В то время как ANTLR не может считаться очень сильной лошадью, можно было бы потратить целую вечность, чтобы узкополосная специализация просто использовала этот вид знания общего языкового моделирования и абстрактного моделирования синтаксического дерева.

Если ваша команда может потратить несколько человек * лет на эту кривую обучения, продолжайте планировать. Если нет, то самое время пересмотреть, перепроектировать и перепланировать план проекта.

Зачем?

Примечание: преобразование кода - самая простая часть...

необходимость покрытия различий в синтаксисе,
необходимость скрыть различия в области видимости переменных (становится немного сложнее)

Лексеры могут немного помочь в этом.


Понимание концептуальных различий

Мне нравится ваша идея создать прокси-слой на стороне C++, основанный на целевых API-сервисах, чтобы обеспечить отсутствие поведения на более гибкой части маршрута похода MQL4->Forex Tester.

В старые добрые времена MQL4 (когда это был действительно MQL4, а не "новый" гибрид), я разработал несколько синтаксических оболочек для аналогичных целей, но с другой мотивацией, где простые и простые концепции MQL4 были неосуществимы оставаться без помощи.

Правильное понимание как основной архитектуры, так и различных режимов работы, доступных в MetaTrader Terminal 4 как экосистема выполнения кода типов программ MQL4 { EA | Сценарий | Индикатор} - это только начало подхода, когда вы решили разработать преобразование кода из MQL4-DSL-домена в другой DSL-домен.


Последний гвоздь в гроб... Синтаксис ползет в New-MQL4.56789

Трудно не упомянуть, что в последние годы MQL4 стал совсем другим языком.

Как только вы сможете угадать, что это значит для обслуживания базы кода, тем более страшный кошмар это представляет "за кулисами", когда база кода охватывает n-сотни человеко-лет.

Проще говоря, хотя ключевые концепции меняются не так часто, каждый новый выпуск MetaTrader Terminal 4 в качестве экосистемы выполнения кода или MetaEditor в виде полуинтегрированной цепочки инструментов для компиляции кода}, ранее известный как MetaLang.exe (предварительно New-MQL4.56789...) (хотя оба они распространяются вне собственного контроля, даже с "принудительным обновлением", выполняемым политикой на стороне брокера, поэтому никакой способ "замораживания версий" не спасет вас от обязательный танец на этом минном поле).


Как это можно решить?

Если бы я был в вашей ситуации, я бы попросил Менеджера проекта / Спонсора проекта указать, какой имеется доступный бюджет, временные ограничения и предпочтения Заказчика для создания такого универсального преобразователя кода.

Если возможно, я бы запустил новый проект с таким графиком / рабочей силой / бюджетом и получил бы независимое управление проектами и контроль затрат.

Если это невозможно, я бы попросил Руководящий комитет проекта переопределить метрики, обновить и опубликовать адаптированный План проекта / Рабочая сила / График / Бюджет для задачи преобразования базы кода, которая будет выполняться без автоматизированного инструмента.

Другие вопросы по тегам