Pero: este código se ejecutará cada vez que se introduzca OnCalculate() - dependiendo de sus necesidades, puede añadir la bandera bool o colocar el código en una función separada.
Pero: este código se ejecutará cada vez que OnCalculate() - dependiendo de sus necesidades, o añadir una bandera bool o colocar el código en una función separada.
Gracias, pero en cada garrapata para hacer el recuento no es bueno - Tengo que analizar su código, sin embargo, mientras que quiero entender por qué mi código no funciona, en el registro se devuelven los números extraños
Open_timeTF
1454715900
Hora_de_apertura
1454284800
Delta_1S
431100
Delta_M15
479
resulta que hay una diferencia de 479 barras entre la primera barra del día y la barra actual, ¿por qué?
Gracias, pero recalcular en cada tick no es bueno - Tengo que pensar en su código, sin embargo, mientras quiero entender por qué mi código no funciona, el registro devuelve números extraños
Open_timeTF
1454715900
Hora_de_apertura
1454284800
Delta_1S
431100
Delta_M15
479
resulta que hay una diferencia de 479 barras entre la primera barra del día y la barra actual, ¿por qué?
Sí indiqué que no soy psíquico y por eso:
Pero: este código se ejecutará cada vez que se introduzca OnCalculate() - aquí, dependiendo de sus necesidades, añada una banderaboolo ponga el código en una función separada.
¿Por qué se requiere la habilidad psíquica aquí? Hay variables en el código anterior, mostré lo que esas variables devuelven en números y pregunté por qué es así y no al revés - según el código.
Karputov Vladimir, no entiendo su código - porque soy un principiante en este negocio,no he utilizado la funciónOnCalculate antes, así que no puedo entender lo querates_totalse calcula allí, y lo más importante, donde devolverlo? Tampoco entiendo cómo hacer todo en una función separada... es difícil de entender sin comentarios.
-Aleks-: Karputov Vladimir, no entiendo tu código - soy un principiante en este negocio yno he utilizado la funciónOnCalculate antes, por lo que no puedo entender lo querates_totalse calcula allí y, más importante, ¿a dónde debe ser devuelto? Tampoco entiendo cómo hacer todo en una función separada... es difícil de entender sin comentarios.
Aquí está el código completo del indicador MQL4:
//+------------------------------------------------------------------+//| Start day.mq4 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict#property indicator_chart_window//--- input parametersinputint timer=10; // seconds//--- parameterbool IsDefineTime=true; // true -> you can define time//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingEventSetTimer(timer);
//---
IsDefineTime=true;
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---int temp_day;
MqlDateTime dt_struct;
TimeToStruct(time[0],dt_struct);
temp_day=dt_struct.day;
if(IsDefineTime)
{
for(int i=0;i<rates_total-1;i++)
{
TimeToStruct(time[i],dt_struct);
if(dt_struct.day<temp_day)
{
Print("Start day ",time[i-1]);
IsDefineTime=false;
break;
}
}
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---
IsDefineTime=true; // true -> you can define time
}
//+------------------------------------------------------------------+
Algoritmo de su trabajo: Cuando se inicia el indicador, se establece el intervalo de tiempo del temporizador (por ejemplo, 10 segundos) - significa que cada 10 segundos se activará el temporizador:
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---
IsDefineTime=true; // true -> you can define time
}
y a la variableIsDefineTime se le asigna el valor true. ¿Para qué sirve? Cuando IsDefineTime=true podemos, en OnCalculate(), entrar en un bucle para determinar la hora de inicio del día:
En este bucle comenzamos a recorrer la matriz time[] (esta matriz almacena los valores de tiempo de apertura) desde la barra más a la derecha (su índice es "0"). Cuando se encuentra el inicio del día, desestablecemos su valor y asignamos a la variableIsDefineTime el valorfalse - de esta manera nos protegemos de seguir entrando en el ciclo de determinación de la hora de inicio del día, hasta que el temporizador se ejecute de nuevo.
Karputov Vladimir, gracias por la aclaración, sin embargo, ¿cómo resuelve esto el problema?
A grandes rasgos, necesitamos saber la barra del marco temporal actual que corresponde a la barra del principio del día. Tenemos que saber en cada barra y calcular y dibujar el indicador en consecuencia.
Karputov Vladimir, gracias por la aclaración, sin embargo, ¿cómo resuelve esto el problema?
A grandes rasgos, necesitamos saber la barra del marco temporal actual que corresponde a la barra del principio del día. Es necesario conocerlo en cada barra y calcular y dibujar el indicador en consecuencia.
Así es como preguntaste y así se te respondió :) . Y si quiere no la hora del primer compás de este día, sino el índice de este compás - está aquí, cuando imprime el comienzo del día:
.
.
.
Print("Start day ",time[i-1]);
.
.
.
Se utiliza el índice [i-1], que es el número de la primera barra del día.
Como has preguntado, tienes tu respuesta :) . Y si no necesita la hora de la primera barra del día, sino el índice de esta barra, está aquí, cuando imprime el comienzo del día:
Se utiliza el índice [i-1], que es el número de la primera barra del día.
Estoy de acuerdo, he preguntado de forma confusa.
Hay un indicador en la aplicación que hice, pero no cuenta correctamente. Soy terriblemente tonto y no entiendo, ni siquiera después de tus explicaciones, cómo hacer que determine correctamente el índice correspondiente a la primera barra del inicio del día.
Pido disculpas por la insolencia, pero tal vez puedas mostrarme cómo combinar tu código y el mío.
¡Por favor, ayuda! (MQL4)
Necesito obtener la hora de apertura del Día en el gráfico M15 teniendo en cuenta cada barra - para el indicador.
Decidí calcular en segundos, teniendo en cuenta la barra actual (0), pero debo estar equivocado.
D_Shift=(Open_time-pos*15*60-(Open_time-Open_timeTF))/1440*60;
Si para el indicador, entonces:
Pero: este código se ejecutará cada vez que se introduzca OnCalculate() - dependiendo de sus necesidades, puede añadir la bandera bool o colocar el código en una función separada.
Si para el indicador, entonces:
Pero: este código se ejecutará cada vez que OnCalculate() - dependiendo de sus necesidades, o añadir una bandera bool o colocar el código en una función separada.
Gracias, pero en cada garrapata para hacer el recuento no es bueno - Tengo que analizar su código, sin embargo, mientras que quiero entender por qué mi código no funciona, en el registro se devuelven los números extraños
resulta que hay una diferencia de 479 barras entre la primera barra del día y la barra actual, ¿por qué?
Gracias, pero recalcular en cada tick no es bueno - Tengo que pensar en su código, sin embargo, mientras quiero entender por qué mi código no funciona, el registro devuelve números extraños
resulta que hay una diferencia de 479 barras entre la primera barra del día y la barra actual, ¿por qué?
Sí indiqué que no soy psíquico y por eso:
Pero: este código se ejecutará cada vez que se introduzca OnCalculate() - aquí, dependiendo de sus necesidades, añada una banderaboolo ponga el código en una función separada.
Sí señalé que no soy vidente y por eso:
Karputov Vladimir, no entiendo tu código - soy un principiante en este negocio yno he utilizado la funciónOnCalculate antes, por lo que no puedo entender lo querates_totalse calcula allí y, más importante, ¿a dónde debe ser devuelto? Tampoco entiendo cómo hacer todo en una función separada... es difícil de entender sin comentarios.
Aquí está el código completo del indicador MQL4:
Algoritmo de su trabajo: Cuando se inicia el indicador, se establece el intervalo de tiempo del temporizador (por ejemplo, 10 segundos) - significa que cada 10 segundos se activará el temporizador:
y a la variableIsDefineTime se le asigna el valor true. ¿Para qué sirve? Cuando IsDefineTime=true podemos, en OnCalculate(), entrar en un bucle para determinar la hora de inicio del día:
En este bucle comenzamos a recorrer la matriz time[] (esta matriz almacena los valores de tiempo de apertura) desde la barra más a la derecha (su índice es "0"). Cuando se encuentra el inicio del día, desestablecemos su valor y asignamos a la variableIsDefineTime el valorfalse - de esta manera nos protegemos de seguir entrando en el ciclo de determinación de la hora de inicio del día, hasta que el temporizador se ejecute de nuevo.
Karputov Vladimir , gracias por la aclaración, sin embargo, ¿cómo resuelve esto el problema?
A grandes rasgos, necesitamos saber la barra del marco temporal actual que corresponde a la barra del principio del día. Tenemos que saber en cada barra y calcular y dibujar el indicador en consecuencia.
Karputov Vladimir , gracias por la aclaración, sin embargo, ¿cómo resuelve esto el problema?
A grandes rasgos, necesitamos saber la barra del marco temporal actual que corresponde a la barra del principio del día. Es necesario conocerlo en cada barra y calcular y dibujar el indicador en consecuencia.
Así es como preguntaste y así se te respondió :) . Y si quiere no la hora del primer compás de este día, sino el índice de este compás - está aquí, cuando imprime el comienzo del día:
Se utiliza el índice [i-1], que es el número de la primera barra del día.
Como has preguntado, tienes tu respuesta :) . Y si no necesita la hora de la primera barra del día, sino el índice de esta barra, está aquí, cuando imprime el comienzo del día:
Se utiliza el índice [i-1], que es el número de la primera barra del día.
Estoy de acuerdo, he preguntado de forma confusa.
Hay un indicador en la aplicación que hice, pero no cuenta correctamente. Soy terriblemente tonto y no entiendo, ni siquiera después de tus explicaciones, cómo hacer que determine correctamente el índice correspondiente a la primera barra del inicio del día.
Pido disculpas por la insolencia, pero tal vez puedas mostrarme cómo combinar tu código y el mío.
-Aleks-:
¿Cómo consigo que detecte correctamente el índice correspondiente a la primera barra del inicio del día?
Es un poco desordenado: