如何指代一个特定的时间 - 页 4

 
Agent86:
你好
谢谢你的答复

我确实读了你关于时间范围或范围/过滤器的帖子,我理解了结论,但不完全理解方程式。

根据你的回答,我不得不假设我不明白如何创建一个表达式,以正确的形式比较类似if(Time[1] == 7:15)的东西,因为我不明白你发布的方程式。

你需要阅读所写的内容并弄清楚......如果你不理解一个函数,就去找它并阅读它,直到你理解它。 WHR 发布的代码是非常简单的数学 ......唯一你可能不熟悉的是% ......它并不意味着百分比 ......查一查,你可以在这里找到它。 https://docs.mql4.com/basis/operations/math
 
RaptorUK:

你真的需要开始学习你在文档中的方法 . .

进入任何使用TimeFrame的函数,你会看到timeframe枚举 . . . 它链接到这里。 时间框架枚举,这将告诉你Period_H1是一个60的值 . . . 换句话说,是60分钟 .. . 60分钟*60=秒 ...... 数据时间是以秒为单位的。


你的编码是行不通的 ......你的 time_select 不是 数据时间 ......记住,什么是数据时间? 从文档中 ......"数据时间类型(整数,代表从1970年1月1日午夜开始经过的秒数)。" 如果你想要一个表示早上7:15的数据时间,它必须是1970年1月1日到今天早上7:15所经过的秒数。

你所计算的是从午夜到今天早上7点15分的秒数,而这不是一个日期时间。


我知道这不是一个日期时间,我想如果我理解了PERIOD_H1的确切含义,我也会知道。

我现在明白了,我必须从1970年1月1日转换为秒。
好的,谢谢
 
RaptorUK:
你需要阅读所写的内容并弄清楚......如果你不理解一个函数,就去找它并阅读它,直到你理解它。 WHR 发布的代码是非常简单的数学 ......唯一你可能不熟悉的是% ......它并不意味着百分比 ......查一查,你可以在这里找到它。 https://docs.mql4.com/basis/operations/math
我确实明白,%并不意味着百分比。
我不明白86400,也不明白为什么要用这个。

我只是想明白了这一点==一天有多少秒,谢谢
 
谢谢大家

我继续研究这个问题,了解了得出某一天午夜的各种方法。

然后按照建议的一些其他方法来计算18小时x3600,我看到是一小时的秒数乘以18,得到HR1800。

我想我应该能够从这一点上做出一些不同的时间代码,包括一些特定时间的时间代码,而不仅仅是一个范围。

再次感谢
 
以下是我的一些进展,可选择的时间和/或时间范围

虽然不完整,也很粗糙,但至少我现在明白了所有的帖子,谢谢大家。

//+------------------------------------------------------------------+
//|                                         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:
以下是我的一些进展,可选择的时间和/或时间范围

虽然不完整,也很粗糙,但至少我现在明白了所有的帖子,谢谢大家。


然而,Time_Select 是不正确的。
 
是的,谢谢,我看到了
,我在发帖后马上想到了这个问题,但离开去吃晚饭了,

Time_Select = bod + extHour*3600 + extMinutes*60,
我知道我最终可以弄清楚如何简单地使用一个实际的用户输入的7:15或一些这样的时间,但看到我所寻找的结果还是很高兴。

一次一个函数 的理解,我想我需要努力,我可能在学习语法时塞进了太多的信息,没有很好地通过每一个字典函数和主题来真正使事情变得简单。

总之经过这段时间的努力,我终于掌握了时间,包括管理自己的时间,能够更好地学习mql。

再次感谢大家
 
为什么我不能只用这个来选择时间,我是不是把它搞得更复杂了?

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

if(Time[1] == var1)
{
}
这有什么问题吗?
 
Agent86:
是的,谢谢,我看到了
我发完帖子后马上就想到了,但我去吃晚饭了,笑。

:-)
 
有人认为以这种方式使用StrToTime进行时间和跨期选择有什么问题吗?

请指教,谢谢

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

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