Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1311

 
Sprut 185:

Gracias por su participación.

Desgraciadamente, la función ObjectSet*** no era adecuada para mi tarea.

Yo mismo resolví el problema utilizando la función OnDeinit().

Ahora todo funciona como debería.

Pero en su pregunta hay tales palabras

Sprut 185:

Por favor, ayúdenme con un problema.

Apenas estoy aprendiendo a escribir código y en este sentido les pido que sean indulgentes con mi analfabetismo.

Quiero ayudarte a entender la funciónOnChartEvent que cuando cambias el marco de tiempo, o cambias la configuración en el menú del indicador, actualizará los objetos gráficos en el gráfico.

Tengo entendido que primero hay que borrar los objetos gráficos y luego volver a crearlos. Perosi los objetos fueron borrados, no hay acceso a sus propiedades y entonces cómo recrear estos objetos....... ¿O tal vez no lo entiendo? ¿O tal vez haya otra forma de actualizar los objetos gráficos en el gráfico?

Por favor, escriba un ejemplo con comentarios sobre cómo hacerlo.

Y para no borrar, basta con cambiar la propiedad del objeto requerido por una de las funciones de ObjectSet***.

En cuanto a la eliminación de todos los objetos........., debe tener mucho cuidado al eliminar todos los objetos indiscriminadamente... Entre los objetos del gráfico, puede haber objetos creados manualmente o por otro Asesor Experto/indicador. Si te gusta eliminar objetos, debes prestar atención a la eliminación por prefijo. Cierto, hay que crear con el prefijo. No es difícil.

 
¿Cuál es el resultado de

iSpread ?


Veo que es más o menos similar al valor del spread si consultas las barras en Símbolos/Barras en el terminal.

Por supuesto, estos valores no se corresponden con los valores reales dados por SYMBOL_SPREAD.

¿Por qué esa diferencia? ¿Y qué es un diferencial tan irreal mostrado coniSpread?

 
Aleksei Skrypnev:
¿Qué resultado muestra la función

iSpread ?


Veo que es más o menos similar al valor del spread si consultas las barras en Símbolos/Barras en el terminal.

Por supuesto, estos valores no se corresponden con los valores reales dados por SYMBOL_SPREAD.

¿Por qué esa diferencia? ¿Y qué es un diferencial tan irreal mostrado coniSpread?

El diferencial mínimo por barra.

He añadido un buffer para la comprobación - toma los datos de la matriz del indicador spread[] y muestra un comentario para la barra actual - el resultado de iSpread


Cómo hacerlo aquí:Spread Control

Spread Control
Spread Control
  • www.mql5.com
Просмотр спреда
Archivos adjuntos:
 

¡Saludos!

¿Puedes decirme por qué la variable "ATR14" no cambia y cómo puedo ver su cambio?

void OnTick()
{

double ATR14=iATR(NULL,PERIOD_CURRENT,14);

Comment(
 
      "ATR14==: ",ATR14,"\n");
}
 
Alexey Belyakov:

¡Saludos!

¿Puede decirme por qué no cambia la variable "ATR14"? ¿Cómo puedo ver que cambia?

Porque en MQL5 el handle del indicador (por cierto, tiene el tipo int) se crea UNA vez y se hace en OnInit.

Y para la recepción de datos del indicador se utiliza el CopyBuffer.

 
Vladimir Karputov:

Porque en MQL5 el handle del indicador (y tiene el tipo int, por cierto) se crea UNA vez y se hace en OnInit.

Y para la recepción de datos del indicador se utiliza el CopyBuffer.

Ok, supongamos.

double  ATR14m[];   

int ATR14;

int OnInit()
  {
ATR14=iATR(NULL,PERIOD_CURRENT,14);
  return(0);   
  }
  
  
void OnDeinit(const int reason)
  {
//---  
  }


void OnTick()
{
CopyBuffer(ATR14,0,0,3,ATR14m);



Comment(

      "ATR14==: ",ATR14,"\n");

}



Nada ha cambiado.

 
Alexey Belyakov:

¡Saludos!

¿Puede decirme por qué la variable "ATR14" no cambia? ¿Y cómo puedo ver que cambia?

aquí hay un ejemploһttp://www.mql5.com/ru/docs/indicators/iatr

Документация по MQL5: Технические индикаторы / iATR
Документация по MQL5: Технические индикаторы / iATR
  • www.mql5.com
iATR - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Belyakov:

Bueno, digamos que

Nada ha cambiado.

Ya casi lo tienes. Recomiendo llamar al array 'array_atr' en lugar de 'ATR14m'. Entonces verás antes tu error al llamar a'Comentario'.

 
Vladimir Karputov:

Casi has acertado. Recomiendo llamar al array 'array_atr' en lugar de 'ATR14m'. Entonces verá antes su error en la llamada"Comentario".

double  array_atr[];   

int ATR14;

int OnInit()
  {
ATR14=iATR(NULL,PERIOD_CURRENT,14);
  return(0);   
  }
   
void OnDeinit(const int reason)
  {
//---  
  }

void OnTick()
{


CopyBuffer(ATR14,0,0,3,array_atr);

Comment(

      "ATR14==: ",array_atr,"\n");

}

Lo cambié y obtuve el error: " 'array_atr' - acceso inválido a la matriz "


 
Vladimir Karputov:

Casi has acertado. Recomiendo llamar al array 'array_atr' en lugar de 'ATR14m'. Entonces verás antes tu error al llamar a'Comentario'.

¿Crees que ponerle un nombre al orinal de un niño cambiará algo?

Hay tal malentendido ahí que no me atrevo ni a intentar sugerir algo... Hay que leer la documentación 50 veces para entenderlo...