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

 
MakarFX:

Cierre del servidor de demostración de MetaQuotes

MetaQuotes Software Corp.

4 de marzo de 2009

El 5 de abril de 2009 se cerrará el servidor "demo.metaquotes.net". Sin embargo, el Centro de Historia con la historia minuciosa continuará su trabajo.

Desde ese día nuestra empresa se niega a utilizar el servidor de demostración. Hoy en día, el número de empresas que utilizan la plataforma MetaTrader 4 es tan alto, que no vemos la necesidad de mantener nuestro propio servidor.

Se trata de una especie de antigüedad (se menciona a otro servidor). Se ha hecho muchas veces este año, la última vez fue hace un mes en MetaQuotes-Demo se creó una nueva cuenta demo normalmente.

Además, si el servidor está eliminado, ¿por qué se muestra y hace ping en el asistente de apertura de cuentas? El atasco se produce sólo en el último paso.

 
Artyom Trishkin:

La primera vez que se accede a los datos históricos desde el indicador, si no hay suficientes datos locales, se inicia la carga de datos y la función devuelve un error.

Esto lo entiendo perfectamente. Si se tratara de barras insuficientes en el historial, entonces ambas funciones devolverían 0. Sin embargo, una de ellas devuelve 0, mientras que la otra devuelve correctamente el número de barras en el historial. Además, se llaman una tras otra:

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() работает нормально
  }

Sólo los datos en el primer caso se toman de los premembers listos (símbolo y timeframe) de la clase Loader (correctamente inicializados), pero en el segundo caso, de las funciones Symbol() y Period() (que devuelven exactamente los mismos valores escritos en symbol y timeframe). Los valores de las variables son idénticos a los de las funciones (lo he comprobado). Pero no está claro dónde iBars(symbol, timeframe) se equivoca con el símbolo y el marco temporal absolutamente correctos. Mientras que iBars(Symbol(), Period()) no comete ningún error. Así que decidí que debía ser un error en el propio terminal o una compilación incorrecta del código fuente.

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Если указаны параметры start_time и stop_time, то функция возвращает количество баров в диапазоне дат. Если эти параметры не указаны, то функция возвращает общее количество баров. Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, или данные таймсерии в момент вызова функции не...
 
Mihail Matkovskij:

Lo entiendo muy bien. Si se tratara de la falta de barras en el historial, entonces ambas funciones devolverían 0. Pero tal como es, una función devuelve 0, mientras que la otra devuelve correctamente el número de barras en el historial. Además, se llaman una tras otra:

Sólo los datos en el primer caso se toman de los premembers listos (símbolo y timeframe) de la clase Loader (correctamente inicializados), pero en el segundo caso, de las funciones Symbol() y Period() (que devuelven exactamente los mismos valores escritos en symbol y timeframe). Los valores de las variables son idénticos a los de las funciones (lo he comprobado). Pero no está claro dónde iBars(symbol, timeframe) se lía con el símbolo y el marco temporal absolutamente correctos. Mientras que iBars(Symbol(), Period()) no comete ningún error. Así que decidí que hay un error en alguna parte del funcionamiento del terminal.

Ahora escríbelo así, como aconsejó Igor:

Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(Symbol(), Period())); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(symbol, timeframe)); // Этот же вызов iBars() работает нормально
  }
Y no olvides que este es un constructor de la clase, y se llama antes de la inicialización
 
Mihail Matkovskij:

Lo entiendo muy bien. Si se tratara de la falta de barras en el historial, entonces ambas funciones devolverían 0. Pero tal como es, una función devuelve 0, mientras que la otra devuelve correctamente el número de barras en el historial. Y se llaman uno tras otro:

Se le ocurre una historia

y luego decides escribirlo como una reclamación y entonces la pregunta

¿Qué dice la ayuda del error 4401?

¿Qué he escrito?

¿Entiendes la diferencia entre la falta de barras y que el gráfico no esté listo?

tiene la situación después del reinicio del terminal con el inicio del indicador, y solicita los datos en la inicialización global del programa MQL (constructor de la clase), que se ejecutará antes de OnInit()


se ha ido, escribes más rápido de lo que lees, busca en el foro 4401 - todas las respuestas

 
MakarFX:

Calculo el lote de la siguiente manera

Está al principio del EA... y lo pongo al final del código

#property link      "http://www.mql5.com"
input double CheckLots = 0.01;
input int    Persent   = 5;
   double Lots=NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2);  

Cuando se llama a la variable Lots en la función OnTick, el EA la encuentra y la recalcula.

No puede ser así. La declaración y la inicialización están en marcha, y la variableLots está siendo asignada con una expresión.

NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2)

Esta asignación sólo puede realizarse una vez al inicio. No puede darse el caso de que una expresión se asigne automáticamente cada vez que se accede aLots. No he oído que mql pueda hacer eso.

 
Seric29:

No puede ser así. Tienes la declaración y la inicialización, y una expresión se asigna a la variableLots.

Esta asignación puede hacerse una vez al inicio, no puede ser que cada vez que se accede aLots se asigne automáticamente una expresión. No he oído que mql pueda hacer eso.

Lo he comprobado, cuando el balance cambia, el lote también cambia
 
MakarFX:
Lo he comprobado, cuando el saldo cambia, el lote también cambia

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.

 
Artyom Trishkin:
Y no olvides que este es un constructor de la clase, y se llama antes de la inicialización

Esto es si el objeto es automático. Pero lo creo con la palabra clavenew (en OnInit()) y lo borro con la palabra clave delete (en OnDeinit()). Es decir, uso un puntero a un objeto de tipo Loader. Pero creo que ya conoces todos esos detalles. Por eso el cargador se crea en OnInit() y aquí no puede haber ningún error.

Si te refieres a intercambiar funciones, lo he probado y el resultado es el mismo. Sólo que los mensajes van en una secuencia diferente :)

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

Resultado:

2020.06.24 23:10:48.568 Loader::Loader símbolo: EURUSD timeframe: PERIOD_H1

2020.06.24 23:10:48.568 Loader::Loader bars (2): 140435

2020.06.24 23:10:48.568 Loader::Barras de carga: 0

2020.06.24 23:10:48.568 Loader::Loader Error: 4401

Tenga en cuenta que esto sólo ocurre si y sólo si se reinicia el terminal. Porque en el primer arranque del terminal (después del arranque de Windows) este ejemplo funciona correctamente.
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Igor Makanu:

Se te ocurre una historia.

y luego decidió convertirlo en una queja.

No hay reclamaciones. ¿Y qué pasa si proporciono el código fuente e incluso describo la secuencia de acciones para probar su funcionamiento? Obviamente, me has malinterpretado...

Igor Makanu:

Y estás pidiendo datos en la inicialización global del programa MQL (constructor de la clase), que se ejecutará antes de OnInit()


se ha ido, estás escribiendo más rápido que leyendo,busca en el foro 4401 - todas las respuestas


No debe ejecutarse antes deOnInit(), escribí en un post anterior.Eres tú el que no está leyendo con atención, tanto los post como el código fuente que añadí para probar.

 
Stanislav Korotky:

Esto es algo antiguo (se menciona otro servidor). Más de una vez este año, la última vez hace un mes en MetaQuotes-Demo una nueva cuenta de demostración se creó normalmente.

Además, si el servidor está eliminado, ¿por qué se muestra y hace ping en el asistente de apertura de cuentas? El atasco se produce sólo en el último paso.

Sí, algo no se está registrando, incluso en el terminal móvil. A principios de este año todo se estaba registrando.
Razón de la queja: