Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1191

 

¿Cómo conectar con los servidores de Meta Quotes para que la librería dll pueda enviar órdenes e intercambiar datos de forma que el lenguaje c++, y no mql4, participe en la implementación de EA en la medida de lo posible?


¿Es posible dibujar objetos en MT4 utilizando la librería dll, qué se puede aprender de ello?

 
Mihail Matkovskij:

Pero, ¿por qué con iBars(symbol, timeframe) la historia resulta incompleta, mientras que con iBars(Symbol(), Period()) es bastante normal? Y sólo ocurre cuando se reinicia el terminal, no siempre. Y las variables símbolo, timeframe se inicializan correctamente, en la sección de inicialización (lo he comprobado yo mismo).

Intenta exprimir mi ejemplo:https://c.mql5.com/3/324/Test.mq5

Secuencia de acciones:

1. Lanza el archivo compilado a la carta. Los mensajes que recibes cuando haces esto:

2. Terminar el terminal y arrancarlo de nuevo. Los mensajes en el registro serán los siguientes:

Resuelto.

En lugar de este código

public:  
  Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); // Этот же вызов iBars() работает нормально
  }

He escrito lo siguiente

public:  
  Loader(): symbol(NULL), timeframe(PERIOD_CURRENT) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe));
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); 
  }

Ahora no hay errores al reiniciar el terminal. Pero el símbolo y el marco temporal deben ser inicializados sólo con valores vacíos.

Aquí hay dos versiones del código fuente, con un error y una que funciona. Le recuerdo que la secuencia de las pruebas es la siguiente:https://www.mql5.com/ru/forum/160683/page1189#comment_17047032

Archivos adjuntos:
Bug.mq5  7 kb
Correct.mq5  6 kb
 
Seric29:

¿Cómo conectarse a los servidores de Meta Quotes para que la librería dll pueda enviar órdenes e intercambiar datos para que la implementación del Expert Advisor involucre en lo posible el lenguaje C++ y no mql4?

No hay manera. El protocolo está cerrado.

¿Es posible dibujar objetos en MT4 utilizando la biblioteca dll? ¿Qué puedo estudiar al respecto?

No, no puedes.

 
Seric29:

Vaya, lo comprobaré. Sé que se pueden inicializar variables con elementos de arrays con funciones, pero no sabía que cambia automáticamente, creo que tampoco existe en c++, lo comprobaré luego.

He cometido un error (

Si necesita recalcular el lote antes de las operaciones, es mejor que coloque la definición del lote al principio de OnTick

o (como lo he cambiado) OnTimer

 

Hola, por favor, ayúdame a imprimir todos los valores, sólo puedo imprimir los últimos. Y la segunda pregunta, cómo dar salida a estos valores con un desplazamiento a la derecha(establecer cualquier desplazamiento). Gracias.

   for(int p = 0; p < 4; p++)
      for(int c = 0; c < 4; c++)
         for(int ps = 0; ps < 4; ps++)
            Comment(StringFormat("Выводим значения\nP = %G\nC = %G\nPS = %d", p, c, ps));
 

¿Dónde puedo leer acerca de los delimitadores en la impresión? Son delimitadores de más o de menos, no puedo entenderlo, es un lío.

Print(a, b + "abc") ;

 
Koldun Zloy:

Negativo. El protocolo está cerrado.

No se puede.

¿Qué quiere decir que el protocolo está cerrado? Hay funciones de apertura de pedidos en mql4, es esencialmente sólo código. Lo mismo ocurre con los objetos gráficos. He oído que mql4 es un producto comercial y por eso no hay código fuente ni funciones integradas (por ejemplo, Arrayresize/Range, etc.). Por ejemplo, no me siento cómodo usando mql4 para escribir un programa, es un lenguaje demasiado muerto, muy limitado. ¿Qué pasa con el lenguaje Win API 32, no puede hacer nada acerca de mis preguntas? Supongo que todo está cerrado para Win API 32 también.

 
Seric29:

¿Qué quiere decir que el protocolo está cerrado? Hay funciones de apertura de pedidos en mql4, es esencialmente un código simple. Lo mismo ocurre con los objetos gráficos. He oído que mql4 es un producto comercial y por eso no hay código fuente ni funciones integradas (por ejemplo, Arrayresize/Range, etc.). Por ejemplo, no me siento cómodo usando mql4 para escribir un programa, es un lenguaje demasiado muerto, muy limitado. ¿Qué pasa con el lenguaje Win API 32, no puede hacer nada acerca de mis preguntas? Probablemente, todo está bloqueado para Win API 32 también.

Sería mejor hacer un tema aparte, será más animado)

 
MakarFX:

He cometido un error(

Si necesita recalcular el lote antes de realizar una operación, es mejor colocar la definición del lote al principio de OnTick

o (como lo he cambiado) OnTimer

Lo que quiero decir es que has inicializado la variable "lote" con una expresión, no puedes hacer que esta expresión se rellene automáticamente. Incluso puedes comprobarlo, toma un contador simple, asigna el valor del contador durante la inicialización y luego cambia el contador y el valor de Lot no cambiará a menos que lo cambies tú mismo. Funciona en C++.

int Pomidor=9;
int Pomidor1(int q=Pomidor){return q;}//при инициализации
Вызов
Print(Pomidor());// результат будет автоматически равен Pomidor и это будет регулярная смена значений 

Pero no funciona en mql4, sólo funciona así

int Pomidor1(int q=67){return q;}

Resultado 67.

 
Valeriy Yastremskiy:

Mejor hacer un tema aparte, será más animado)

Yo también estaba pensando, el tema es relevante pero desde luego no el hecho de que merezca la pena atascar el foro, quizás no sea interesante para mucha gente. Estoy interesado, me gusta escribir código en C++.

Razón de la queja: