OOP, plantillas y macros en mql5, sutilezas y usos - página 23

 
Igor Makanu:

para poder hacer lo que quiera.


interesado en las opciones sugeridas ayer usando el hechizo mágico #defaine abracadabra ##_

UPD:

Vladimir Simakov OK, trataré de entenderlo

Igor Makanu:

así que haz lo que yo quiera


interesado en las variaciones sugeridas ayer usando el hechizo mágico #defaine abracadabra ##_

UPD:

Vladimir Simakov OK, trataré de resolverlo

UPD:

¡HOORAY! ¡FUNCIONÓ! (С)


¡Gracias! ¡Ha salido como estaba previsto!


PZY: ¿Cómo podría añadir macros __MQL5__ y __MQL4__ a este abracadabra, pero las funciones fast_xxx() nunca estarán en el código MQL4 en absoluto - desde la palabra NUNCA

UPD:

¡HOORAY! ¡FUNCIONÓ! (С)


¡Gracias! ¡Salió como estaba previsto!


PZY: ¿Cómo podría añadir macros __MQL5__ y __MQL4__ a este abracadabra pero las funciones fast_xxx() nunca estarán en el código MQL4 en absoluto - desde la palabra NUNCA

#ifdef __MQL5__
   #ifdef  USE_FAST
      #define  CONNECT fast_connect
   #else
      #define  CONNECT connect
   #endif
#else
   #define  CONNECT connect
#endif
 

¿Cómo puedo saber qué terminal (MT4/MT5) está ejecutando el código?

una variable verdadero/falso es suficiente

 
Igor Makanu:

¿Cómo puedo saber qué terminal (MT4/MT5) está ejecutando el código?

una variable verdadero/falso es suficiente

bool is_mt5=(TerminalInfoString(TERMINAL_NAME)=="MetaTrader 5");
 
Artyom Trishkin:

Vale, pero quiero mirar en las macros, es probable que sea algo sencillo.

UPD:

#ifdef __MQL5__
  #define  mql5 true
#else
  #define  mql5 false 
#endif

bool isMQL5 = mql5;
 
Igor Makanu:

Vale, pero quiero mirar en las macros, es probable que sea algo sencillo.

UPD:

¿Cuál es el significado sagrado?

 
Artyom Trishkin:

¿Cuál es el significado sagrado?

comprobar el compilador, si es el "compilador correcto", debería desechar todo lo innecesario en la fase de compilación

#ifdef __MQL5__
  #define  mql5 true
#else
  #define  mql5 false 
#endif

const bool isMQL5 = mql5;

const string txt_1000symbols = "Язык MetaQuotes Language 5 (MQL5) является объектно-ориентированным языком программирования высокого уровня и предназначен для написания"
                               "автоматических торговых стратегий, пользовательских технических индикаторов для анализа разнообразных финансовых рынков. Он позволяет не только писать разнообразные"
                               "экспертные системы, предназначенные для работы в режиме реального времени, но и создавать собственные графические инструменты, помогающие принимать торговые решения."
                               "MQL5 основан на концепции широко распространенного языка программирования С++, по сравнению с MQL4 в нем добавлены перечисления, структуры, классы и обработка событий."
                               " Благодаря расширению числа встроенных основных типов, взаимодействие исполняемых программ на MQL5 с другими приложениями "
                               "посредством dll максимально облегчено. Синтаксис языка MQL5 подобен синтаксису С++, и это позволяет легко переносить на него программы из современных языков "
                               "программирования. Для целей изучения языка все темы сгруппированы по следующим разделам.\n";
//+------------------------------------------------------------------+
void OnStart()
  {
   if(isMQL5) Print(txt_1000symbols);
   Print("end");
  }
//+------------------------------------------------------------------+

compilarlo y ver el tamaño del .ex5 ;)

SZY: en if() puedes ponerisMQL5 ,mql5 , puedes quitar el modificador const - en general, es un compilador correcto.

 

existe tal código:

#import "mydll.dll"
#import

mt4 no crea nuevas copias de la dll en la memoria si se llama desde 2 EA, no quiero editar la propia dll (es 100% satisfactoria), es más fácil copiar el archivo mydll.dll 5 veces

Necesito una macro para obtener lo siguiente

#define  dllnum 02

#import "mydll02.dll"
#import

Pero quiero comprobar que si no hay macro,dllnum entonces será "mydll.dll"



UPD:

esto resuelto

#define  dllnum 2

#define  DEF_QUOTES(arg) #arg

#ifdef  dllnum
   #define  DEF_DLL_NAME(a,b) DEF_QUOTES(a##0##b.dll)
#else
   #define  DEF_DLL_NAME(a,b) DEF_QUOTES(a.dll)
#endif 

   
string s =  DEF_DLL_NAME(mydll,dllnum);


UPD2: no se ha resuelto (((.

'mydll02.dll' - las expresiones no están permitidas en un ámbito global

 
Igor Makanu:

existe tal código:

mt4 no crea nuevas copias de dll en memoria si se llama desde 2 EA, no quiero editar la propia dll (es 100% satisfactoria), es más fácil copiar el archivo mydll.dll 5 veces

Necesito una macro para obtener lo siguiente

Pero quiero comprobar que si no hay macro,dllnum entonces será "mydll.dll"



UPD:

esto resuelto


UPD2: no se ha resuelto (((.

'mydll02.dll' - las expresiones no están permitidas en un ámbito global

No funcionará, supongo.

DEF_QUOTES(a##0##b.dll)

Aquí no se consigue un token válido. En general, mcl debe ser capaz de

#import "jkjfkj"".dll"

pero por desgracia, como se dice, no estás aquí con C++))

 
Vict:

No funcionará, supongo.

no consigue un token válido aquí. En realidad, el mcl debería ser capaz de

pero por desgracia, como se dice, esto no es C++))

mm-hmm

intentó al menos las inlusiones a través de la macrosustitución para conectar.... salió mal de nuevo

#define  FNAME <mylib.mqh>

#include  FNAME

'#include' - se necesitan comillas dobles o corchetes angulares <

'#include' - las expresiones no están permitidas en el ámbito global


 
Igor Makanu:

No lo entiendo, ¿para qué arden las velas? Así es como funciona, supongo:

#define  LIB "kjkjkjk.dll"
#import  LIB

Admito que puede ser útil cuando hay alguna configuración que se está corrigiendo.

PD: si todavía te apetece mucho, prueba con name_dll (sin punto), a lo mejor despega.