Errores, fallos, preguntas - página 2353

 
Alexey Navoykov:
¿Dónde has visto manillas de texto? ) Y si complicamos las cosas, las asas también se pueden especificar como una estructura.
Sí... y así sucesivamente:
struct A { int i; };
bool SelectHandle( A& ) { return true; }
A GetHandle() { A a; return a; }
A NewHandle;
datetime time = MACRO100( NewHandle, TimeCurrent());

también funciona

 
A100:
Sí... y así sucesivamente:

también funciona

Todavía hay un array ) Y hay que convertirlo primero en un array de bytes, y luego convertirlo en una estructura usando la biblioteca propietaria TypeToBytes )

 
Alexey Navoykov:

Todavía queda un array ) Y hay que convertirlo en un array de bytes primero, y luego convertirlo en una estructura usando la librería propietaria TypeToBytes )

No puedo comprobarlo - no tengo ese archivo de biblioteca (build 1961x32). En una semana podrás comprobarlo por ti mismo

 
Alexey Navoykov:
¿Dónde has visto manillas de texto? ) Y si complicamos las condiciones, las asas también pueden especificarse como una estructura.

Por favor, dame un enlace a la tarea.
Gracias.

 
Sergey Dzyublik:

Por favor, dame un enlace a la tarea.
Gracias.

https://www.mql5.com/ru/forum/1111/page2350#comment_9974834

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

pavlick_, 2018.12.21 17:23

int MACROS_helper_PrevHandle;
datetime MACROS_helper_time;
#define  MACROS(NEW_HANDLE_, FN_)   (MACROS_helper_PrevHandle=GetHandle())*0 == 0 ?  \
                                     (MACROS_helper_time=SelectHandle(NEW_HANDLE_) ? FN_ : 0)*0 == 0 ? \
                                        SelectHandle(MACROS_helper_PrevHandle)*0 == 0 ? MACROS_helper_time : 0 : 0 : 0
Por desgracia, esta variante se refiere a
Alexey Navoykov:
variable global a utilizar.


No he pensado demasiado en este problema. No he encontrado una solución de inmediato, así que decidí aprender en este foro. No me interesa la intriga, porque quiero utilizarla en la práctica: la biblia virtual, sin la cual ya no puedo imaginar un EA de combate.

Bueno, como dos personas ya han afirmado que hay una solución sin variables adicionales, lo probaré el fin de semana.

Permítanme especificar que NewHandle puede ser una constante. Es decir, una llamada válida.

time = MACROS(0, TimeCurrent()); // TimeCurrent из 0-хендла.
time = MACROS(1, TimeCurrent()); // TimeCurrent из 1-хендла.

MACROS(0, SymbolInfoTick(_Symbol, Tick)); // SymbolInfoTick из 0-хендла.

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
Price = MACROS(3, Bid); // Bid из 3-хендла.
 

fxsaber:

NewHandle puede ser una constante. Es decir, una llamada válida como esta

Todo funciona:

#include "Простейшее.mqh"
 int GetHandle() { return 0; }
bool SelectHandle( int ) { return true; }
#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
void OnStart()
{
        datetime time = MACRO100(0, TimeCurrent());
                 time = MACRO100(1, TimeCurrent());
        MqlTick tick;
        MACRO100(0, SymbolInfoTick(_Symbol, tick));
        double price = MACRO100(3, Bid);
}

Cuándo más va a surgir la oportunidad... para comprobar el nivel real
A juzgar por las discusiones... aquí... proggers serios que hacen malabares con palabras altisonantes, incluyendo sobre OOP, etc. (A veces ni siquiera entiendo más de la mitad de los refranes)

¿Y qué es lo real? ¿El oropel? ¿O no se han unido todos todavía?
Debo subrayar una vez más: si algo complicado, ... inusual o que requiere conocimientos especiales - se habría escrito de inmediato, y aquí - el más simple (!). Así que enciende tu cerebro y escribe opciones... O espera.

 
¿Puedes ponerlo en un hilo aparte que empiece en https://www.mql5.com/ru/forum/1111/page2350#comment_9974834? Se pierde aquí, quiero ver cómo la A100 está cagando líquido.
 
pavlick_:
Quiero ver cómo la A100 caga líquido.

¿Por qué haces un escándalo? ¿Por qué no creasun puesto de trabajo de tres dígitos y dejas que el tribunal decida quién se ha cagado?

 
fxsaber:
Lamentablemente, esta opción se refiere a


No he pensado mucho en el problema. No encontré una solución en el lugar, así que decidí aprenderla en el foro. La intriga no es interesante, porque quiero usar en la práctica - Virtual-bibble, sin la cual ya no puedo imaginar un combate EA.

Ya he pensado en ello de diferentes maneras. Si he entendido bien, lo que importa es la variabilidad del tipo devuelto por la macro. Se puede resolver en C++.

//------------------------------------ 1 вариант
template <typename T>
T f(T(*fp)()) {...}
//------------------------------------ 2 вариант
template <typename T>
struct Store {
   static inline T val;
};
int MACROS_helper_PrevHandle;
#define  MACROS(NEW_HANDLE_, FN_)   (MACROS_helper_PrevHandle=GetHandle())*0 == 0 ?           \
      (Store<decltype(FN_)>::val=SelectHandle(NEW_HANDLE_) ? FN_ : 0)*0 == 0 ?               \
      SelectHandle(MACROS_helper_PrevHandle)*0 == 0 ? Store<decltype(FN_)>::val : 0 : 0 : 0

Pero el preprocesador gcc puede hacerlo:

#define  M(FN_) ({int a=5; ; FN_;})
int ff() {return 50;}

int val = M(ff());

Los intentos de implementar todo esto en µl terminaron en fracaso. Quizá la mejor solución sea modificar SelectHandle(new, set_next=INT_MAX). Aunque, tal vez, alguien me sorprenda con una macro complicada.