Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 440
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Hola 2015.09.17_19:07 GMT+3 .He establecido las dimensiones de las matrices dinámicas en el programa EA. Y el compilador da errores: "coma esperada". Y si hay una variable en el texto del programa, -- da advertencias: "la variable tal o cual oculta la declaración de la variable a nivel global". No lo entiendo. Todo parece correcto, como en la Ayuda. Aquí hay algunos fragmentos de código:
//--- matriz de precios máximos de barras
bool ArraySetAsSeries(double &High[],bool);
//---
bool ArraySetAsSeries(double &Low[],bool);
//--- establecer los tamaños de los arrays con reserva (reserve)
int ArrayResize(double &mrate[],int 16,int 9);
int ArrayResize(double &maVal[],int 16,int 9);
int ArrayResize(double &fVal[],int 3,int 2);
int ArrayResize(double &zVal[],int 3,int 0);
int ArrayResize(double &High[],int 1,int 0);
int ArrayResize(double &Low[],int 1,int 0);
//+------------------------------------------------------------------+
//| Función de desinicialización experta |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Hola 2015.09.17_19:07 GMT+3 .He establecido las dimensiones de las matrices dinámicas en el programa EA. Y el compilador da errores: "coma esperada". Y si en el texto del programa hay
Si te refieres a mi código - entonces sí, mi código está comprobando si hay una nueva barra.
Me interesa el código que he adjuntado, quiero entender lo que hace.
El código que has dado no hace nada, o más bien no funciona. Error:
Esta condición sólo funcionará una vez: la primera vez que ejecute el programa. En este punto, la variable estática será inicializada.
La condición de abajo no tiene sentido comprobarla en absoluto ya que la variable TimeN en su código será igual al cero eterno (o más bien la fecha del 1 de enero de 1970) y este cero eterno se comparará con la variable TimeC que es igual a la hora de apertura de la barra actual):
El código que has dado no hace nada, o más bien no funciona. Error:
Esta condición sólo funcionará una vez: la primera vez que ejecute el programa. En este punto, la variable estática será inicializada.
La condición de abajo no tiene sentido comprobarla en absoluto ya que la variable TimeN en su código será igual al cero eterno (o más bien será la fecha del 1 de enero de 1970) y este cero eterno se comparará con la variable TimeC que es igual al tiempo de apertura de la barra actual):
Ahora me pregunto por qué debería haberlo escrito... en el Asesor Experto.
Gracias por la aclaración.
Si la nueva barra está en el marco temporal M1, entonces imprime el mensaje:
Resulta que no di el código completo, el código correcto era
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
Resulta que no di el código completo, el código correcto era
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
Aquí está el código de trabajo:
¿Has intentado compilar este código? Aquí hay un error: la variable TimeN está declarada en OnInit() y al salir de OnInit() esta variable será destruida, por lo que se produce un error en la función OnTick()
Aquí está el código de trabajo:
Escribí static datetime TimeN=0; en el área antes deint OnInit() - donde se declaran las variables externas y otras.