El problema de la transferencia de MT4 a MT5. O, más precisamente, la incapacidad de ejecutar algunos algoritmos en MT5 sin'err. - página 11

 

Información para la reflexión.

Observando algunos de los desarrollos de EA publicados en el mercado. O algunos artículos.

A menudo especifican un pequeño spread en los requisitos de selección de brokers para el EA.

Y, en mi opinión, MT5 se ha ajustado en gran medida para reaccionar rápidamente a los cambios en el mercado. Esto explica por qué todos los frenos con la espera de la actualización de las cotizaciones están apagados.

Significa que si hay una actualización de las cotizaciones, el terminal negará el acceso a las series de tiempo. Para no interferir con algunos algoritmos rápidos.

Este paradigma tiene derecho a existir. En este caso la negociación es corta. Se introduce rápidamente. Recoge algunos puntos. Salir rápidamente.

Pero hay otro paradigma.

Hay algunas situaciones extremas en el mercado en las que se formaron reversiones del mercado.

Estos extremos pueden haberse formado incluso hace varios años. Pero siguen influyendo en la situación actual del mercado.

En este caso se pueden tener en cuenta los cambios momentáneos en el historial de ticks o minutos. Pero no son decisivos.

En este caso es posible esperar a que se actualicen las cotizaciones sin salir del manejador como resultado de la interrupción del acceso. Y sólo funciona en MT4.

Algunas fotos con explicaciones de lo que se ha dicho.

Tomamos el tf mensual. Los extremos de marzo de 1995, octubre de 2000 y julio de 2007 siguen influyendo en el mercado.

Incluso el extremo de febrero de 1985 tiene un efecto:


Se puede ver que las líneas construidas con estos extremos son notadas por el mercado.

Pasemos a otros plazos. Aproximadamente en una proporción tal como si estuviéramos haciendo marcas de onda. Esta elección puede dar lugar al desarrollo de un nivel de onda en cada TF

TF semanal:

D1:

H4:

M30:

M5:

M1:

Vemos que los extremos formados muy atrás en la historia tienen un impacto en el impulso actual del mercado.

----------------------------------

Debería haber un acceso continuo a los presupuestos para estas construcciones.

Continuaré más adelante. Básicamente todo lo que se muestra en las fotos se utiliza en el comercio manual.

Pero. Es posible alimentar las cotizaciones de diferentes plazos a las entradas de varias redes neuronales, por ejemplo las representadas en las imágenes. Cada NS procesará sus propios datos. Y dar en su salida su propia comprensión de lo que está pasando. Las salidas de las redes neuronales se sincronizarán según la hora de recepción de las barras.

En este caso las señales del NS de mayor prioridad que las de menor prioridad.

Las señales recibidas de las redes neuronales se introducen en la entrada de la siguiente NS con alguna consideración de prioridad. Aquí puede haber variantes.

La primera capa de redes neuronales, por ejemplo, puede ser del tipo LSTM. Por capa en este caso nos referimos a las redes neuronales que obtienen cotizaciones cada una desde su marco temporal. Cada red neuronal de la primera capa puede tener varias capas de neuronas.

La red neuronal de suma puede tener su propia arquitectura. Esto es más bien una tarea de ingeniería.

Por ejemplo, es posible entrenar con algún algoritmo de apertura comercial. En la primera capa de las redes neuronales. Es decir, cada red neuronal de la primera capa se entrena por separado. Abrimos operaciones, por ejemplo, al final de una barra en la capa correspondiente. Incluso puede abrir operaciones en diferentes direcciones. Los intercambios son condicionales. Al final de esos tratos se envía una señal para entrenar al NS.

Así, la red neuronal agregada tiene derecho a elegir el mejor modo de negociación.

Así, obtenemos un algoritmo algo similar al implementado en Alfa Zero por el equipo de DeepMinde.

Debe entrenar dicha red en todo el historial para todos los plazos seleccionados. Lo único que hay que tener en cuenta es que todas las series de tiempo en MT5 se basan en minutos. Esto no es cierto. Los archivos NCC sobre eurodólares hasta 1993 están formados por series temporales. Debe haber un algoritmo que reconstruya el verdadero marco temporal de las series temporales.

Puede entrenar en un par de divisas. Y pruébalo en otro.

------------------------------

Resumen. ¿Por qué en este enfoque es necesario reaccionar rápidamente a lo que ocurre en el mercado?

 
Eugeni Neumoin:


Perdón por el off-topic, pero mientras el tema sea interesante, no puedo dejarlo


Victora:

Bueno, me refiero a esto:

MQL tiene typename() - devuelve el nombre del tipo de cadena, funciona incluso

void OnStart()
  {
   Print(typename(Txt()));      // в логе будет       string
  }
string Txt()
{
return(" Txt ");
}

conociendo el tipo MyFunc() - escribir una macro (((, ... Por supuesto que puedo escribir todas las macros de tipo _Try_helper ... en general probablemente no soy aventurero, pues no sé cómo

 
Igor Makanu:

Perdón por el off-topic, pero mientras sea un tema interesante, no puedo dejarlo


Está bien.

 
Igor Makanu:

MQL tiene typename() - devuelve el nombre del tipo de cadena, funciona incluso

conociendo el tipo MyFunc() - escribir una macro (((, ... Por supuesto que puedo escribir todas las macros de tipo _Try_helper ... bueno, creo que no soy un jugador, pues no sé cómo

typename() en µl no ayudará, no dará en tiempo de compilación un tipo adecuado para la declaración de una variable, sólo lo imprimirá. Esto nos deja con Try_d(), Try_i(), ... . No sé cómo conseguir la funcionalidad de decltype en µl.

 
Vict:

typename() en µl no ayudará, no le dará en tiempo de compilación un tipo adecuado para la declaración de una variable, sólo la imprimirá. Esto nos deja sólo con Try_d(), Try_i(), ... . No sé cómo conseguir la funcionalidad de decltype en µl.

Hmm, ¡no me siento para nada un jugador! ¡Incluso diría que absolutamente ningún jugador! ))) - No sé cómo, así es como algo va a funcionar (realmente no entiendo cómo es a nivel de la máquina "todo girando" - creo que tenemos un lenguaje estrictamente tipado?)

void OnStart()
{
  int i = func(1);
  double d = func(1.123);
  string s = func("s");
  Print("i = ",i);
  Print("d = ",d);
  Print("s = ",s);
}

template<typename T>
T func(T invalue)
{
   string s = typename(T);
   if(s=="int") return(invalue);
   if(s=="double") return(invalue);
   if(s=="string") return("Hello word!!!");
return(NULL);
}

2019.07.31 21:07:05.304 tst2 (EURUSD,H1) i = 1

2019.07.31 21:07:05.304 tst2 (EURUSD,H1) d = 1.123

2019.07.31 21:07:05.304 tst2 (EURUSD,H1) s = ¡¡¡Hola palabra!!!


también puede describir un puntero a la función

typedef void(*TFuncvoidPTR)(void);

y el uso posterior

TFuncvoidPTR      func[];
....
func[0]();
 
Vict:

typename() en µl no ayudará, no dará en tiempo de compilación el tipo adecuado para la declaración de la variable, sólo lo imprimirá. Eso nos deja sólo para multiplicar Try_d(), Try_i(), ... . No sé cómo conseguir la funcionalidad de decltype en µl.

Una función de plantilla con una variable estática de tipo T.

 
Igor Makanu:

Gracias.

He leído tus posts, desgraciadamente tienes razón en muchos aspectos, ayer correspondí mucho con el moderador Artem en este hilo, el resultado de la conversación: si se implementa así, entonces debe funcionar así... Bueno, como en los viejos anuncios "¡Simplemente no sabes cómo cocinarlos!

En mi opinión, los resultados del compilador MQL5 son realmente fantásticos (¡es muy productivo!), pero su uso como terminal de comercio... Bueno, digámoslo así: se requiere una muy, muy buena formación técnica y ganas de escribir un ~30% más de código que "en el antiguo terminal" ( - incluso esta frase es una expresión muy arraigada en el foro)

Ay-yi-yi... No lo he dicho :)

Decía: utilizar lo que tenemos para obtener el resultado que queremos.

Me guardo el resto de mis emociones para mí.

 
Igor Makanu:

No he dicho que el moderador Artem haya dicho tal cosa, sólo he escrito el resultado de la conversación - creo que es mi juicio, que sólo puedo formar en base a mis emociones y al análisis de la conversación .... ))))

es decir, no sé lo que pasó en la cabeza de alguien, sólo puedo ver mi propia cabeza... por suerte en el espejo por ahora )))

Me lo habría creído si en lugar de

elresultado de la conversación: si se implementa así, entonces debería funcionar... como los viejos anuncios sólo que no sabes cómo cocinarlos!"

fue

mi conclusión es: si se implementa de esa manera, entonces es así como debe funcionar... es como el viejo anuncio, " ¡sólo que no sé cómo cocinarlos!"

Y resulta que una cabeza del espejo citada supuestamente por el moderador Artem...

Y bueno, si fue una conversación en privado. Pero sacar conclusiones públicas sobre mis palabras que no he dicho es inculparme públicamente con mi supuesta opinión completamente errónea -tengo una completamente diferente a la supuestamente expresada en la cita-.

Puedo expresar mi opinión:

Saquemos lo mejor de lo que tenemos por el momento, no nos quejemos, ayudemos a encontrar los fallos y pidamos con anticipación que se arreglen, ya que se arreglan y aparecen nuevas y agradables características.

 
Artyom Trishkin:

Me lo creería si en lugar de

era

Pero resulta que una cabeza del espejo citada supuestamente por el moderador Artem...

Y bueno, si fue una conversación en privado. Pero sacar conclusiones públicas sobre mis palabras que no he dicho es inculparme públicamente con mi supuesta opinión completamente equivocada -tengo una completamente diferente a la supuestamente expresada en la cita-.

Puedo expresar mi opinión:

No me quejo, sino que ayudo a encontrar fallos y a pedir que se solucionen: se están arreglando y están apareciendo nuevas funciones geniales.

hmm, qué complicadas se han vuelto las cosas.... limpiar después de mí, mi opinión... ¿a quién le importa? ¿qué va a cambiar? los desarrolladores tienen su propia visión de sus productos, es su negocio y mi opinión... si no actualizas el hilo en 2 días estará muy lejos de la cima


... Cómo va a cambiar ... Bueno, hoy un buen hombre@Vict- me mostró algunas técnicas de depuración fácil, y lo más importante - puedo lograr la legibilidad de mi código - esto ha cambiado mi opinión de MQL5, y en general, los miembros del foro

Ya me callo, por suerte hay un foro con una larga historia, no se puede volver atrás y leer demasiadas respuestas a mis preguntas en la búsqueda de este foro.

 
Igor Makanu:

fxsaber tiene razón - hay una opción

 template <typename T> T Try_helper(T val, bool assign) {
   static T sval;
   if (assign)
      sval = val;
   return sval;
}
#define  Try(EXPR, MES)                    \
   Try_helper(EXPR, true);                \
   if (Try_helper(EXPR, false) <= 0.0) {  \
     printf("Error: %s ", MES);           \
     return;                              \
   }

double f(double) {return DBL_MAX;}
ulong f(ulong) {return ULONG_MAX;}

void OnStart()
{

   double d = Try(f(0.), "double error");
   ulong u = Try(f(0), "ulong error");
}

Es un poco kitsch - EXPR se calculará dos veces, pero sigue siendo más flexible. No se puede decir que sea universal (sólo para los tipos aritméticos. El valor del error debe ser igual, lo cual es desagradable. He intentado evitarlo mediante la especialización explícita de la estructura/función, pero puede que no sea posible.

template <typename T> bool Try_helper_is_valid(T val);
template <> bool Try_helper_is_valid<string>(string val) {val==""?false:true;}  // compile-time error

template <typename T>
struct S;
template <>
struct S<string> {...};      // compile-time error

Pues bien, parece que no importa dónde escarbes en el µl, encontrarás trampas por todas partes. Probablemente, es mejor limitarse a una pequeña macro altamente especializada con un tipo fijo.