Errores, fallos, preguntas - página 1153

 
joo:
El vídeo en los mensajes del foro no se reproduce. hay un espacio vacío en el lugar del vídeo. probado muchos navegadores. dispositivo - Lenovo K900.
El video se reproduce bien en el sitio de youtube. y en otros sitios de youtube el video se reproduce....
Vamos a comprobarlo.
 
Renat:
¿Cómo se ejecuta un programa instalado en Windows 8.1? ¿Con /portátil?
No. Normalmente lo ejecuto sin /portable. No sólo eso, sino que para asegurarme, instalé y desinstalé MT5 dos veces. Después de desinstalar, borré manualmente las carpetas en AppData también.
 

Si se trabaja en Windows 8.1 como usuario normal, el terminal MT5 no recuerda los números de cuenta introducidos. Además, el MetaEditor no guarda el estado de almacenamiento de MQL5. Esto sólo se puede solucionar si se trabaja como administrador o si se selecciona "Ejecutar este programa como administrador" en las propiedades de metaeditor64.exe y terminal64.exe.

Pero en este caso, cuando se ejecuta bajo una cuenta de usuario normal, tengo que introducir la contraseña del administrador - ¿es esto correcto, teniendo en cuenta las cuestiones de seguridad?

P.D. El terminal es lo último, pero el problema no es nuevo.


 

Buenas tardes.

Tengo un indicador que consume bastantes recursos (que se calcula a partir de 7+ arrays), se carga normalmente sólo "intermitentemente" en el terminal, no sé por qué razón. No hay errores en él, es algo con la propia terminal MT5...

Me gustaría probarlo en el tester, pero en el tester sigue dando error: adjunto una captura de pantalla.

Porfavor, aconséjeme, ¿hay alguna posibilidad de procesar el error antes del inicio del probador y recargar forzosamente el indicador en el probador, si aparece?

 
M1k3:

Buenas tardes.

Tengo un indicador que consume bastantes recursos (que se calcula a partir de 7+ arrays), se carga normalmente sólo "intermitentemente" en el terminal, no sé por qué razón. No hay errores en él, es algo con la propia terminal MT5...

Me gustaría probarlo en el tester, pero en el tester sigue dando un error: adjunto una captura de pantalla.

Porfavor, aconséjeme, ¿hay alguna manera de manejar el error antes del inicio del probador y recargar forzosamente el indicador en el probador, si aparece?

.

El error está en tu código, no en el terminal. Incluso hay una pista de dónde buscar el error: línea 302, posición 49. Este error es un array fuera de su rango. Por ejemplo, tienes un array con tamaño [4], pero estás intentando obtener el valor [5].
 
barabashkakvn:
El error está en tu código, no en el terminal. Incluso hay una pista de dónde buscar el error: línea 302, posición 49. Este error es una salida del array de su rango. Por ejemplo, tienes un array con tamaño [4], pero estás intentando obtener el valor [5].

No puedo arreglarlo, el array se llena de comillas (100%) o de valores indicadores. En el terminal en un momento determinado el valor de las cotizaciones o indicadores X sale NULL, y en otro momento sale un valor normal (no en la barra 0). No sé por qué ocurre.

El valor NULL siempre está presente en el probador. El error se produce cuando intento multiplicar un valor de cotización o de indicador, pero allí es NULL.

 
M1k3:

No puedo arreglarlo, el array se llena de comillas (100%) o de valores indicadores. En el terminal en un momento determinado el valor de las comillas X da NULL, y en otro momento da un valor normal (no en la barra 0). No sé por qué ocurre.

El valor NULL siempre está presente en el probador. El error se produce cuando intento multiplicar un valor de cotización o de indicador, pero allí es NULL.

Utilice la depuración de código o inserte operadores Print() en las secciones de código dudosas. De este modo, entenderá dónde está el error.
 
barabashkakvn:

Este código es el del indicador y la función OnInit(). En consecuencia, OnInit() se procesa en el momento del inicio del terminal - y este código muestra correctamente el precio del tick. Es OnInit() y no init() - como el suyo. Si el error se repite, por favor envíe el código y la versión del terminal.

El error es que está intentando recibir información del mercado (MarketInfo...) en OnInit() del indicador. El indicador no tiene funciones de negociación y, por lo tanto, durante la inicialización no espera la actualización de la información de la cuenta y del mercado.

Para obtener los datos del mercado, utilice OnInit() del EA, no del indicador.

Si desea utilizar la información del mercado en el indicador, debe introducir una bandera (bool) y comprobar la corrección de la información de la cuenta (Account...) en la función OnCalculate() en el caso de la primera ejecución o en OnInit() si cambia el marco temporal o la configuración del indicador.

No engañe a la gente. Independientemente de si se utiliza init() o OnInit() del indicador, el terminal no garantiza que se llame a este manejador cuando ya se ha realizado el ingreso y se conoce el valor del tick. Así que también es fácil obtener el cero en OnInit. Tampoco se prohíbe el uso de información de mercado en los indicadores. Pero en este caso realmente tenemos que transferir la inicialización a la parte de cálculo del indicador y ejecutarla en los primeros ticks.
 
marketeer:
No engañe a la gente. Independientemente de que se utilice el init() o el OnInit() del indicador, el terminal no garantiza que se llame a este manejador cuando se haya realizado el ingreso y se conozca el valor del tick. Así que también es fácil obtener el cero en OnInit. Tampoco se prohíbe el uso de información de mercado en los indicadores. Pero en este caso realmente tenemos que transferir la inicialización a la parte de cálculo del indicador y ejecutarla en los primeros ticks.

No hay funciones de negociación en el indicador. El Asesor Experto tiene funciones comerciales. Por lo tanto, cuando el EA llama al entorno del mercado y/o a la información de la cuenta, todo va correctamente en OnInit().

Para probar mis palabras, aquí está un simple EA en el que OnInit() se refiere al entorno de negociación y a la información de la cuenta:

//+------------------------------------------------------------------+
//|                                                  test_expert.mq4 |
//|                              Copyright © 2014, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  //--- выведем всю информацию, доступную из функции AccountInfoDouble()
      printf("ACCOUNT_BALANCE =  %G",AccountInfoDouble(ACCOUNT_BALANCE));
      printf("ACCOUNT_CREDIT =  %G",AccountInfoDouble(ACCOUNT_CREDIT));
      printf("ACCOUNT_PROFIT =  %G",AccountInfoDouble(ACCOUNT_PROFIT));
      printf("ACCOUNT_EQUITY =  %G",AccountInfoDouble(ACCOUNT_EQUITY));
      printf("ACCOUNT_MARGIN =  %G",AccountInfoDouble(ACCOUNT_MARGIN));
      printf("ACCOUNT_FREEMARGIN =  %G",AccountInfoDouble(ACCOUNT_FREEMARGIN));
      printf("ACCOUNT_MARGIN_LEVEL =  %G",AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));
      printf("ACCOUNT_MARGIN_SO_CALL = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL));
      printf("ACCOUNT_MARGIN_SO_SO = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_SO));
      //--- MarketInfo
      Print("Symbol=",Symbol());
      Print("Минимальная дневная цена=",MarketInfo(Symbol(),MODE_LOW));
      Print("Максимальная дневная цена=",MarketInfo(Symbol(),MODE_HIGH));
      Print("Время поступления последней котировки=",(MarketInfo(Symbol(),MODE_TIME)));
      Print("Последняя поступившая цена предложения=",MarketInfo(Symbol(),MODE_BID));
      Print("Последняя поступившая цена продажи=",MarketInfo(Symbol(),MODE_ASK));
      Print("Размер пункта в валюте котировки=",MarketInfo(Symbol(),MODE_POINT));
      Print("Количество цифр после запятой в цене инструмента=",MarketInfo(Symbol(),MODE_DIGITS));
      Print("Спрэд в пунктах=",MarketInfo(Symbol(),MODE_SPREAD));
      Print("Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах=",MarketInfo(Symbol(),MODE_STOPLEVEL));
      Print("Размер контракта в базовой валюте инструмента=",MarketInfo(Symbol(),MODE_LOTSIZE));
      Print("Размер минимального изменения цены инструмента в валюте депозита=",MarketInfo(Symbol(),MODE_TICKVALUE));
      Print("Минимальный шаг изменения цены инструмента в пунктах=",MarketInfo(Symbol(),MODE_TICKSIZE));
      Print("Размер свопа для ордеров на покупку=",MarketInfo(Symbol(),MODE_SWAPLONG));
      Print("Размер свопа для ордеров на продажу=",MarketInfo(Symbol(),MODE_SWAPSHORT));
      Print("Календарная дата начала торгов (фьючерсы)=",MarketInfo(Symbol(),MODE_STARTING));
      Print("Календарная дата окончания торгов (фьючерсы)=",MarketInfo(Symbol(),MODE_EXPIRATION));
      Print("Разрешение торгов по указанному инструменту=",MarketInfo(Symbol(),MODE_TRADEALLOWED));
      Print("Минимальный размер лота=",MarketInfo(Symbol(),MODE_MINLOT));
      Print("Шаг изменения размера лота=",MarketInfo(Symbol(),MODE_LOTSTEP));
      Print("Максимальный размер лота=",MarketInfo(Symbol(),MODE_MAXLOT));
      Print("Метод вычисления свопов=",MarketInfo(Symbol(),MODE_SWAPTYPE));
      Print("Способ расчета прибыли=",MarketInfo(Symbol(),MODE_PROFITCALCMODE));
      Print("Способ расчета залоговых средств=",MarketInfo(Symbol(),MODE_MARGINCALCMODE));
      Print("Начальные залоговые требования для 1 лота=",MarketInfo(Symbol(),MODE_MARGININIT));
      Print("Размер залоговых средств для поддержки открытых ордеров в расчете на 1 лот=",MarketInfo(Symbol(),MODE_MARGINMAINTENANCE));
      Print("Маржа, взимаемая с перекрытых ордеров в расчете на 1 лот=",MarketInfo(Symbol(),MODE_MARGINHEDGED));
      Print("Размер свободных средств, необходимых для открытия 1 лота на покупку=",MarketInfo(Symbol(),MODE_MARGINREQUIRED));
      Print("Уровень заморозки ордеров в пунктах=",MarketInfo(Symbol(),MODE_FREEZELEVEL)); 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
Archivos adjuntos:
 
barabashkakvn:

No hay funciones de negociación en el indicador. El Asesor Experto tiene funciones comerciales. Por lo tanto, cuando el EA llama al entorno del mercado y/o a la información de la cuenta, todo va correctamente en OnInit().

Para probar mis palabras, aquí está un simple Asesor Experto que OnInit() llama al entorno del mercado y la información de la cuenta:

Bueno, la pregunta era originalmente sobre el indicador. Y tú respondías sobre el OnInit del indicador. El Asesor Experto es otra cosa, ahí no hay problema, pero el Asesor Experto no puede sustituir a un indicador.