Cómo referirse a un momento determinado - página 4

 
Agent86:
Hola
Gracias por la respuesta

Sí que he leído tu post que se refería a un rango de tiempo o rango / filtro y he entendido la conclusión pero no las ecuaciones por completo

Por tu respuesta tengo que asumir que no entiendo como crear una expresión que compare algo como if(Time[1] == 7:15) en su forma correcta porque no entiendo las ecuaciones que has puesto.

Tienes que leer lo que está escrito y entenderlo... si no entiendes una función búscala y lee sobre ella hasta que la entiendas. El código que publicó WHR es una matemática muy simple. . . lo único que quizás no conozcas es el %. . . no significa porcentaje. . . búscalo, puedes encontrarlo aquí: https://docs.mql4.com/basis/operations/math
 
RaptorUK:

Realmente tienes que empezar a aprender tu camino alrededor de la documentación. . .

Ve a cualquier función que utilice un TimeFrame y verás la enumeración de Timeframe. . . y enlaza con aquí: Timeframe enumeración y que le dirá que Period_H1 es un valor de 60 . . en otras palabras 60 minutos . . . 60 mins * 60 = segundos . . . las fechas están en segundos.


Lo que ha codificado no funcionará... su time_select NO es un datetime... recuerde, ¿qué es un datetime? de la Documentación... "datetime type (integer representing the amount of seconds elapsed from midnight, 1 January, 1970)." si quiere un datetime que signifique 7:15 am tiene que ser el número de segundos que han transcurrido desde el 1 de enero de 1970 hasta las 7:15am de hoy...

Lo que has calculado es el número de segundos transcurridos desde la medianoche hasta las 7:15 de esta mañana, y eso no es un datetime.


Sé que esto no es un datetime y supongo que si entendiera exactamente qué es PERIOD_H1 también lo sabría.

Ahora entiendo que tengo que convertir a segundos desde el 1 de enero de 1970
ok gracias
 
RaptorUK:
Tienes que leer lo que está escrito y entenderlo... si no entiendes una función búscala y lee sobre ella hasta que la entiendas. El código que publicó WHR es una matemática muy simple. . . lo único con lo que quizás no estés familiarizado es con el %. . . no significa porcentaje. . . búscalo, puedes encontrarlo aquí: https://docs.mql4.com/basis/operations/math
Sí entiendo que % no significa porcentaje.
No entendí lo de 86400 ni por qué se usó eso.

Acabo de entender esto == cuántos segundos en un día lo conseguí gracias
 
Gracias gente

Seguí trabajando a través de esto y entender las diversas formas de concluir la medianoche de un día en particular

Entonces, como se sugiere algunos otros métodos para calcular 18hrs x 3600 que veo es el número de segundos en una hora multiplicado X 18 para darme HR1800

Creo que debería ser capaz de hacer algunos varios códigos de tiempo de este incluyendo algunos códigos de tiempo para un tiempo particular no sólo un rango

Gracias de nuevo
 
Aquí están algunos de mis progresos, para un tiempo y/o rango de tiempo seleccionable

Incompleto y tosco pero al menos ahora entiendo todos los puestos, muchas gracias

//+------------------------------------------------------------------+
//|                                         15min_straddle_timer.mq4 |
//|                                     Agent86  15 straddle timer   |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Agent86"


//---- input parameters
extern double    TakeProfit=20.0;
extern double    Lots=0.1;
extern double    StopLoss=10.0;
extern int MagicNumber=1586;

//Time Select and Range select IE: extHour=7; and extMinutes=15; means 7:15am
//Note using the 24hour clock means extHour=13; means 1:00pm fyi
extern int  extHour=7;
extern int  extMinutes=15;

//++++ These are adjusted for 5 digit brokers.

int     pips2points;    // slippage  3 pips    3=points    30=points
double  pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)

    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   if (Digits == 5 || Digits == 3)
   {    // Adjust for five (5) digit brokers.
      pips2dbl    = Point*10; pips2points = 10;   Digits.pips = 1;
   } 
   else 
    {    
      pips2dbl    = Point;    pips2points =  1;   Digits.pips = 0; 
    }
    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
     
   
    
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
   
    
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

datetime now = Time[0],
         bod = now - now % 86400,
         Time_Select = bod + extHour*3600+extMinutes,
         HR1800 = bod + 18*3600,  //I'll make extern for this too
         HR2100 = bod + 21*3600;  //and this
         
if (Time[1] == Time_Select)
   {
   double Low_Mark = Low[1] - 20*pips2dbl,
          High_Mark = High[1] + 20*pips2dbl;
   Print (Low[1], " = Low ", Low_Mark," = Low_Mark"); 
   Print (TimeToStr(Time[1])," Low =", Low[1], " High =", High[1]);
   }
   {
   }
   
//if (Time[1] >= HR1800 && Time[1] < HR2100)
      
          
   return(0);
  }    

//+------------------------------------------------------------------+

                
 
Agent86:
Aquí está algo de mi progreso, para un tiempo y/o rango de tiempo seleccionable

Incompleto y tosco pero al menos ahora entiendo todos los puestos, muchas gracias


Y sin embargo, Time_Select es incorrecto.
 
Sí, gracias, lo veo
Pensé en ello justo después de publicarlo pero me fui a cenar lol

Time_Select = bod + extHour*3600 + extMinutes*60,
Sé que puedo eventualmente averiguar cómo utilizar simplemente una entrada de usuario real para 7:15 o algún tiempo así, pero todavía agradable para ver los resultados que estaba buscando.

La comprensión de una función a la vez creo que tengo que trabajar, probablemente abarrotado demasiada información en el aprendizaje de la sintaxis y no trabajar a través de todos y cada función del diccionario y el tema lo suficientemente bueno para hacer las cosas más fáciles para mí.

De todos modos después de todo este tiempo por fin tengo un control del tiempo incluyendo la gestión de mi propio para poder aprender mql mejor.

Gracias de nuevo a todos
 
¿Por qué no puedo usar esto para seleccionar un tiempo, hice esto más complicado de lo que era?

datetime var1=StrToTime("7:15");

if(Time[1] == var1)
{
}
¿Hay algún problema con esto?
 
Agent86:
Sí, gracias, lo veo.
Lo pensé justo después de publicarlo pero me fui a cenar lol

:-)
 
¿Alguien ve algún problema con el uso de StrToTime de esta manera para las selecciones de tiempo y straddle?

Por favor, aconsejen gracias

//+------------------------------------------------------------------+
//|                                      straddle_with_timerange.mq4 |
//|                           Agent86's Candle Straddle with timer   |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Agent86"


//---- input parameters
extern double    TakeProfit=20.0;
extern double    Lots=0.1;
extern double    StopLoss=10.0;
extern int       MagicNumber=1586;

extern string    Straddle_Candle="7:15"; //select your straddle candle
extern string    StartTime="7:15"; //select your start time range
extern string    EndTime="17:00"; //select your end time range


//++++ These are adjusted for 5 digit brokers.

int     pips2points;    // slippage  3 pips    3=points    30=points
double  pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)

    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   if (Digits == 5 || Digits == 3)
   {    // Adjust for five (5) digit brokers.
      pips2dbl    = Point*10; pips2points = 10;   Digits.pips = 1;
   } 
   else 
    {    
      pips2dbl    = Point;    pips2points =  1;   Digits.pips = 0; 
    }
    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
     
   
    
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
   
    
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

datetime Candle_Select = StrToTime(Straddle_Candle),
         Start_Time = StrToTime(StartTime),
         End_Time = StrToTime(EndTime);
         
if (Time[1] == Candle_Select)
   {
   double Low_Mark = Low[1] - 20*pips2dbl,
          High_Mark = High[1] + 20*pips2dbl;
   Print (Low[1], " = Low ", Low_Mark," = Low_Mark"); 
   Print (TimeToStr(Time[1])," Low =", Low[1], " High =", High[1]);
   }
      
          
   return(0);
  }    

//+------------------------------------------------------------------+