Come riferirsi a un tempo particolare - pagina 4

 
Agent86:
Ciao
Grazie per la risposta

Ho letto il tuo post che riguardava un intervallo di tempo o un intervallo / filtro e ho capito la conclusione ma non le equazioni completamente

Dalla tua risposta devo supporre che non capisco come creare un'espressione che confronti qualcosa come if(Time[1] == 7:15) nella sua forma corretta perché non capisco le equazioni che hai postato.

Devi leggere ciò che è scritto e capirlo . . . se non capisci una funzione cercala e leggila finché non la capisci. Il codice che WHR ha postato è matematica molto semplice . . . l'unica cosa che forse non ti è familiare è il % . . . non significa percentuale . . . cercalo, lo puoi trovare qui: https://docs.mql4.com/basis/operations/math
 
RaptorUK:

Hai davvero bisogno di iniziare a imparare la tua strada attraverso la documentazione . . .

Vai a qualsiasi funzione che usa un TimeFrame e vedrai timeframe enumerazione . . . e si collega a qui: Timeframe enumeration e ti dirà che Period_H1 è un valore di 60 . . . in altre parole 60 minuti . . . 60 minuti * 60 = secondi . . . i datetime sono in secondi.


Quello che hai codificato non funzionerà . . il tuo time_select NON è un datetime . . . ricorda, cos'è un datetime? dalla documentazione . . . "tipo datetime (intero che rappresenta la quantità di secondi trascorsi dalla mezzanotte, 1 gennaio, 1970)" se vuoi un datetime che significa 7:15 deve essere il numero di secondi che sono trascorsi dal 1 gennaio 1970 alle 7:15 di oggi . . .

Quello che avete calcolato è il numero di secondi da mezzanotte alle 7:15 di questa mattina, e questo non è un datetime.


So che questo non è un datetime e immagino che se avessi capito esattamente cosa sia PERIOD_H1 avrei saputo anche questo.

Ora ho capito che devo convertire in secondi da 1 gennaio 1970
ok grazie
 
RaptorUK:
Devi leggere ciò che è scritto e capirlo . . . se non capisci una funzione cercala e leggila finché non la capisci. Il codice che WHR ha postato è matematica molto semplice . . . l'unica cosa che potrebbe non esserti familiare è il % . . . non significa percentuale . . . cercalo, lo puoi trovare qui: https://docs.mql4.com/basis/operations/math
Ho capito che % non significa percentuale.
Non ho capito l'86400 o perché è stato usato.

Ho appena capito questo == quanti secondi in un giorno l'ho capito grazie
 
Grazie gente

Ho continuato a lavorare su questo e a capire i vari modi per concludere la mezzanotte di un giorno particolare

Poi come suggerito alcuni altri metodi per calcolare 18 ore x 3600 che vedo è il numero di secondi in un'ora moltiplicato X 18 per darmi HR1800

Penso che dovrei essere in grado di fare alcuni codici di tempo vari da questo tra cui alcuni codici di tempo per un tempo particolare non solo un intervallo

Grazie ancora
 
Ecco alcuni dei miei progressi, per un tempo e/o un intervallo di tempo selezionabile

Incompleto e grezzo, ma almeno ora capisco tutti i post grazie mille

//+------------------------------------------------------------------+
//|                                         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:
Ecco alcuni dei miei progressi, per un tempo e/o un intervallo di tempo selezionabile

Incompleto e grezzo, ma almeno ora capisco tutti i post grazie mille


Eppure, Time_Select non è corretto.
 
Sì, grazie, lo vedo
Ci ho pensato subito dopo averlo postato ma sono uscito per cenare lol

Time_Select = bod + extHour*3600 + extMinutes*60,
So che alla fine posso capire come usare semplicemente un input utente reale per 7:15 o qualche tempo simile, ma è comunque bello vedere i risultati che stavo cercando.

La comprensione di una funzione alla volta penso che ho bisogno di lavorare, probabilmente ho stipato troppe informazioni nell'apprendimento della sintassi e non ho lavorato attraverso ogni funzione e argomento del dizionario abbastanza bene per rendere le cose davvero più facili per me.

Comunque, dopo tutto questo tempo ho finalmente una gestione del tempo, compresa la gestione del mio, per essere in grado di imparare meglio mql.

Grazie ancora a tutti
 
Perché non posso semplicemente usare questo per selezionare un tempo, l'ho reso più complicato di quanto fosse?

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

if(Time[1] == var1)
{
}
C'è qualcosa di sbagliato in questo?
 
Agent86:
Sì, grazie, lo vedo
Ci ho pensato subito dopo averlo postato ma sono uscito per cenare lol

:-)
 
Qualcuno vede qualche problema nell'usare StrToTime in questo modo per le selezioni a tempo e a cavallo?

Per favore consigliate grazie

//+------------------------------------------------------------------+
//|                                      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);
  }    

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

                
Motivazione: