Особенности языка mql5, тонкости и приёмы работы - страница 319

 
fxsaber #:
Что-либо делать на этом графике возможно только во фрейм-режиме. Даже "создать" объект, но он не будет виден.
Жаль. Значит на текущий момент в терминале нет возможности визуализировать процессы проходящие в мат. фрейм-режиме. 
 
Anatoli Kazharski #:
Значит на текущий момент в терминале нет возможности визуализировать процессы проходящие в мат. фрейм-режиме. 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2025.11.11 14:50

2025.11.11 16:28:06.025 EAToMath_Example (XAUUSD.pro,M1)        [2025.11.11 16:28:06.025] EAToMath.mqh 1114: XAUUSD.pro: math optimization of Experts\fxsaber\EAToMath_Example.ex5 from 2025.10.03 00:00:00 to 2025.11.04 00:00:00, 1 Month 1 Day
2025.11.11 16:28:06.025 EAToMath_Example (XAUUSD.pro,M1)        
2025.11.11 16:28:06.025 EAToMath_Example (XAUUSD.pro,M1)        FileOpen mode: C:\Users\Unknown\AppData\Roaming\MetaQuotes\Terminal\Common\EAToMath.mqh\RannForex-Server\XAUUSD.pro\Ticks_0.tsh
2025.11.11 16:28:06.025 EAToMath_Example (XAUUSD.pro,M1)        StartTime = 2025.11.11 16:28:06
2025.11.11 16:28:49.696 EAToMath_Example (XAUUSD.pro,M1)        ExpertRemove() function called
2025.11.11 16:29:13.041 EAToMath_Example        [2025.11.11 16:29:13.040] EAToMath.mqh 1114: XAUUSD.pro: math optimization of Experts\fxsaber\EAToMath_Example.ex5 from 2025.10.03 00:00:00 to 2025.11.04 00:00:00, 1 Month 1 Day
2025.11.11 16:29:13.041 EAToMath_Example        
2025.11.11 16:29:13.041 EAToMath_Example        FileOpen mode: C:\Users\Unknown\AppData\Roaming\MetaQuotes\Terminal\Common\EAToMath.mqh\RannForex-Server\XAUUSD.pro\Ticks_0.tsh
2025.11.11 16:29:13.041 EAToMath_Example        StartTime = 2025.11.11 16:29:13
2025.11.11 16:30:20.324 EAToMath_Example        ExpertRemove() function called

В этом логе запуск мат. фрейм-режима, когда в Обзоре рынка есть символ (помечен), и когда - нет.

Достаточно в Обзоре рынка иметь один символ хоть с какой-то историей баров. Этого будет достаточно, чтобы в мат. фрейм-режиме была полноценная визуализация.
 
fxsaber #:
Достаточно в Обзоре рынка иметь один символ хоть с какой-то историей баров. Этого будет достаточно, чтобы в мат. фрейм-режиме была полноценная визуализация.
Понял. Уже интереснее!
Надеюсь уже скоро смогу протестировать всё это подробнее. Я сообщу о результатах. 
 

Как заставить это работать

//+------------------------------------------------------------------+
//|                                                     Internal.mq5 |
//+------------------------------------------------------------------+
int OnInit() { Print("Init Internal"); return(INIT_SUCCEEDED);}

void OnDeinit(const int reason) {Print("Deinit Internal");}

void OnTick() {Comment(TimeCurrent());}



//+------------------------------------------------------------------+
//|                                                     External.mq5 |
//+------------------------------------------------------------------+
#import "Internal.ex5"
namespace EA{
int OnInit(void);
void OnDeinit(const int);
void OnTick(void);
}
#import

int OnInit() {EA::OnInit(); Print("Init External"); return(INIT_SUCCEEDED);}

void OnDeinit(const int reason) {EA::OnDeinit(reason); Print("Deinit External");}

void OnTick() {EA::OnTick();}
 
Rorschach #:

Как заставить это работать

Попробуйте так:

//+------------------------------------------------------------------+
//|                                                     Internal.mq5 |
//+------------------------------------------------------------------+
int OnInit() export { Print("Init Internal"); return(INIT_SUCCEEDED);}

void OnDeinit(const int reason) export {Print("Deinit Internal");}

void OnTick() export {Comment(TimeCurrent());}
Результат:
2025.11.12 13:35:32.996 Init Internal
2025.11.12 13:35:32.996 Init External
2025.11.12 13:38:31.308 Deinit Internal
2025.11.12 13:38:31.308 Deinit External
 
Anatoli Kazharski #:

Попробуйте так:

Результат:
А чтоб исходники Internal не трогать?
 
amrali #:
Также деление на / 1000 может быть медленным. Попробуйте более быстрое (3x) умножение * 0.001, если это имеет значение.

Это, действительно, имеет значение! Спасибо.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: TicksShort

fxsaber, 2025.11.18 12:57

Абсолютно бесплатно поднялась производительность компрессии почти на 40%!


Если вещественное деление выполняется миллионы раз, то целесообразно заменять его на умножение.


Где подобный код может выполняться миллионы раз.

  • Советник/индикатор в Тестере.
  • Свой тестер.
  • Канвас.
  • И другая работа с большими массивами данных (компрессия/кодирование и т.д.).
 

Кто разбирается в JSON, просьба поделиться готовым решением с функционалом этих двух кнопок.

bool SymbolExport( const string Symb, const string FileName ); // Export symbol's json-data.
bool SymbolImport( const string Symb, const string FileName ); // Import symbol's json-data.

Должны создавать и читать ровно такие же json, как это делает MT5 через помеченные кнопки на скриншоте.


Нужно для общедоступного торрента с данными для бэктестов. Спасибо.

 

Вопрос про макросы. Я хочу задать переменной x5 значение 5 через макрос, составляя имя этой переменной.

Этот код не компилируется:

char x3 = 0, x4 = 0, x5 = 0, o = 0;
#define num o
#define mcr(z) x##z = 5;
#define macro(z) o = z == 3 ? 5 : 3; mcr(num)
macro(3)
Print("x3 = ",x3,", x4 = ",x4,", x5 = ",x5);

Как я думаю, проблема в том, что в mcr не передаётся значение переменной o. Возможно как-то решить эту задачу?
 

 
Andrei Iakovlev #:

Вопрос о макросах. Я хочу установить переменную x5 в значение 5 с помощью макроса, компилируя имя этой переменной.

Этот код не компилируется:

Как мне кажется, проблема в том, что значение переменной o не передается в mcr. Есть ли способ решить эту проблему?

Компилятор не может определить (будущее) значение времени выполнения для расширения макроса mcr(num) во время компиляции.

В макросе mcr(z) используется оператор concat (##), поэтому он должен быть разрешен (расширен) только во время компиляции.