How to reload command line compiled scripts in Trading Terminal?

To add comments, please log in or register
Geri_
34
Geri_  

When I use Meta Editor IDE, as soon as compilation finishes, the scripts gets removed / reloaded immediately in Trading Terminal.

How can I achieve the same behaviour (reload / reinit scripts), when using command line compilation?

I can nicely compile the scripts using command line compilation, but I have to refresh the scripts manually each time. I can't really iterate fast without update automatically.

Anthony Garot
3513
Anthony Garot  
Geri_:

When I use Meta Editor IDE, as soon as compilation finishes, the scripts gets removed / reloaded immediately in Trading Terminal.

How can I achieve the same behaviour (reload / reinit scripts), when using command line compilation?

I can nicely compile the scripts using command line compilation, but I have to refresh the scripts manually each time. I can't really iterate fast without update automatically.

This is a good question.

I have found this myself since I prefer to work in a different editor than MetaEditor.

What I do:

1. I keep MetaEditor open on my right-monitor.

2. I edit using a different editor on the left-monitor.

3. Changes in the different editor are automatically detected by MetaEditor.

4. So, when it's time to compile, I simply click the compile button in MetaEditor, even though I have done no actual editing there.

Geri_
34
Geri_  
Anthony Garot:

This is a good question.

I have found this myself since I prefer to work in a different editor than MetaEditor.

What I do:

1. I keep MetaEditor open on my right-monitor.

2. I edit using a different editor on the left-monitor.

3. Changes in the different editor are automatically detected by MetaEditor.

4. So, when it's time to compile, I simply click the compile button in MetaEditor, even though I have done no actual editing there.

Thanks for getting back. I did the same for a while (using VSCode, and compile for warnings / errors via command line), however, it can get pretty tedious when compiling too often, e.g. fiddling with some UI thing.

Perhaps there is a way to tell the Terminal to do the refresh thing. I'm wondering how MetaEditor and Terminal is wired up. I did not found any intermediate file that changes. Also, I did not found any mach message, or similar.

As a workaround, I can create a watcher script that polls the modification date for a given mql, then remove / readd a given script to a chart if anything changed. However, the input parameters must be preserved somehow for the indicators. Sounds a lot of upfront work, I'm not quite sure if it is worth it.

Geri_
34
Geri_  

This is actually a terribly grumpy workaround, but I use cliclick to programatically invoke a click on MetaEditor Compile button from my build script.

It breaks whenever I move windows around and all, but for now it saves the day.

alphatrading
100
alphatrading  

You can either use a AutoHotkey script called after your compile script finished successfully, or you can write a little helper .exe and send a Windows messages to the terminal, again after your compile script finished successfully. That's

#define WM_COMMAND       0x0111
#define MT4_MQL_REFRESH   12349        // rescan und reload modified .ex4 files

int hWnd = GetTerminalMainWindow();
PostMessage(hWnd, WM_COMMAND, MT4_MQL_REFRESH, 0);

@see https://github.com/rosasurfer/mt4-mql/blob/master/mql4/include/shared/defines.h#L274

The issue here is to find the Windows handle of the application main window. At the command line you may have multiple terminals open and then you don't know which terminal to refresh. Either way with multiple installations you should organize your code in a way that all installations use the same MQL code base (e.g. by using symlinks).

In your own tool you can use logic similar to: https://github.com/rosasurfer/mt4-expander/blob/master/src/lib/terminal.cpp#L281

You can't use the function in the compiled DLL (https://github.com/rosasurfer/mt4-expander/tree/master/bin/Release) directly from CLI because it assumes to be called from MQL. You could adapt the code and could send the message to all open terminals (for example).

Geri_
34
Geri_  

Thanks @alphatrading!

Sounds pretty exactly what I'm looking for.

The constant (and the window lookup) says MT4. Does it work with MT5 as well?

To add comments, please log in or register