Comment faire référence à un moment particulier - page 4

 
Agent86:
Bonjour
Merci pour la réponse

J'ai lu votre message qui concernait une plage de temps ou une plage/filtre et j'ai compris la conclusion mais pas les équations complètement.

D'après votre réponse, je dois supposer que je ne comprends pas comment créer une expression qui comparerait quelque chose comme if(Time[1] == 7:15) dans sa forme correcte, car je ne comprends pas les équations que vous avez postées.

Vous devez lire ce qui est écrit et le comprendre... Si vous ne comprenez pas une fonction, recherchez-la et lisez-la jusqu'à ce que vous la compreniez. Le code que WHR a posté est un calcul très simple... la seule chose que vous ne connaissez pas est le %... il ne signifie pas pourcentage... vérifiez-le, vous pouvez le trouver ici : https://docs.mql4.com/basis/operations/math
 
RaptorUK:

Vous devez vraiment commencer à vous familiariser avec la documentation...

Allez dans n'importe quelle fonction qui utilise un TimeFrame et vous verrez timeframe enumeration ... et il y a un lien vers ici : Timeframe enumeration et cela vous dira que Period_H1 est une valeur de 60 . . . en d'autres termes 60 minutes . . . 60 mins * 60 = secondes ... les dates sont exprimées en secondes.


Ce que vous avez codé ne fonctionnera pas ... votre time_select n' est PAS un datetime ... rappelez-vous, qu'est-ce qu'un datetime ? d'après la documentation ... "datetime type (integer representing the amount of seconds elapsed from midnight, 1 January, 1970)" si vous voulez un datetime qui signifie 7:15 am il doit être le nombre de secondes qui se sont écoulées du 1 Jan 1970 à 7:15 am today ...

Ce que vous avez calculé est le nombre de secondes entre minuit et 7h15 ce matin, et ce n'est pas une date.


Je sais que ce n'est pas une date et je suppose que si j'avais compris exactement ce qu'est PERIOD_H1, je l'aurais su aussi.

Je comprends maintenant que je dois convertir en secondes à partir du 1er janvier 1970.
Ok, merci.
 
RaptorUK:
Vous devez lire ce qui est écrit et vous débrouiller... Si vous ne comprenez pas une fonction, recherchez-la et lisez-la jusqu'à ce que vous la compreniez. Le code que WHR a posté est très simple en maths ... la seule chose que vous ne connaissez pas est le % ... il ne signifie pas pourcentage ... regardez-le, vous pouvez le trouver ici : https://docs.mql4.com/basis/operations/math
Je comprends que % ne signifie pas pourcentage.
Je n'ai pas compris le 86400 ni pourquoi il était utilisé.

Je viens juste de comprendre == combien de secondes dans une journée ?
 
Merci à tous.

J'ai continué à travailler sur ce sujet et à comprendre les différentes manières de conclure à minuit d'un jour particulier.

Puis, comme suggéré par d'autres méthodes, j'ai calculé 18 heures x 3600, ce qui correspond au nombre de secondes dans une heure multiplié par 18, ce qui me donne HR1800.

Je pense que je devrais être en mesure de créer divers codes horaires à partir de cela, y compris des codes horaires pour une heure particulière et pas seulement pour une plage.

Merci encore
 
Voici une partie de mes progrès, pour un temps et/ou une plage de temps sélectionnables.

Incomplet et grossier, mais au moins je comprends maintenant tous les messages, merci beaucoup.

//+------------------------------------------------------------------+
//|                                         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:
Voici une partie de mes progrès, pour un temps et/ou une plage de temps sélectionnables.

Incomplet et grossier, mais au moins je comprends maintenant tous les messages, merci beaucoup.


Et pourtant, Time_Select est incorrect.
 
Oui, merci, je vois ça
J'y ai pensé juste après l'avoir posté mais je suis parti manger le dîner lol

Time_Select = bod + extHour*3600 + extMinutes*60,
Je sais que je peux éventuellement trouver comment utiliser simplement une entrée utilisateur réelle pour 7:15 ou une autre heure, mais c'est toujours agréable de voir les résultats que je cherchais.

Je pense que je dois travailler sur la compréhension d'une fonction à la fois, j'ai probablement entassé trop d'informations dans l'apprentissage de la syntaxe et je n'ai pas assez travaillé sur chaque fonction et sujet du dictionnaire pour rendre les choses plus faciles pour moi.

Quoi qu'il en soit, après tout ce temps, j'ai finalement réussi à gérer mon temps, y compris le mien, pour pouvoir mieux apprendre MQL.

Merci encore à tous
 
Pourquoi ne puis-je pas l'utiliser simplement pour sélectionner une heure, ai-je rendu les choses plus compliquées qu'elles ne l'étaient ?

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

if(Time[1] == var1)
{
}
Y a-t-il un problème avec cette méthode ?
 
Agent86:
Oui, merci, je le vois.
J'y ai pensé juste après l'avoir posté mais je suis parti manger le dîner lol.

:-)
 
Quelqu'un voit-il des problèmes à utiliser StrToTime de cette façon pour les sélections de temps et de straddle ?

Merci de me conseiller.

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

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