Как преобразовать код 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.

Я потратил некоторое время на исследования, если бы 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 стал совсем другим языком.

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

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


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

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

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

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

1

Другие решения

Других решений пока нет …