mql5语言的特点、微妙之处以及技巧 - 页 244

 
Alexey Viktorov #:

什么叫"在什么时间段"?函数只是返回星期几。周期与它有什么关系?输入任何时间都能得到星期几。

输入你的出生日期,就能得到你出生时的星期几。

下面是按蜡烛时间计算的星期


Period != timeframe。上述函数在某些日期范围内返回正确的星期,然后又返回错误的星期。在上述函数中,括号确实丢失了--你应该更加小心...... ))))))))
 
Alexey Viktorov #:

好吧,我也展示了函数的完整代码。再来一次:

uchar WhatWeekDay(datetime t)
 {
  return uchar(t/(PeriodSeconds(PERIOD_D1))+4)%7;
 }

不过,我同意你的观点。也许尼古拉是凭记忆写的,有不准确的地方。但说它不起作用也不太对。

谢苗-谢苗尼奇!......嗯,怎么说呢?......嗯,可以用,但并不总是这样))))))))

 
Mikola_2 #:

不,没有用。

是的,对不起。我不知道自己怎么会搞砸。谢谢。

这当然是正确的方法:

uchar WhatWeekDay(datetime t) {
   return uchar((t/(24*60*60)+4 )%7);
}
 
Alexey Viktorov #:

好吧,我也展示了函数的完整代码。再来一次:

不过,我同意你的观点。也许尼古拉是凭记忆写的,有不准确的地方。但说它不起作用也不太对。

void OnStart()
  {
   for(int i1=0; i1<100; i1++)
      Print(WhatWeekDay(i1*7*24*60*60));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
uchar WhatWeekDay(datetime t)
  {
   return uchar(t/(PeriodSeconds(PERIOD_D1))+4)%7;
  }

它并不总是有效,这是一个测试代码。结果:

2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4

... 
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0

... 
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   3
2024.02.10 17:51:47.584 2 (EURUSD,H1)   3
2024.02.10 17:51:47.584 2 (EURUSD,H1)   3
...

应该到处都是四

同样,屏幕是正确的:)
 
(uchar)((t/86400+4)%7)
 
amrali #
(uchar)((t/86400+4)%7)
😂
即使在预编译阶段,24*60*60 编译器也会将 24*60*60 转换为 86400。
因此这不会影响性能。
从逻辑概念的角度来看,24*60*60 的记录更易于阅读。
 

关于交易、自动交易系统和交易策略测试的论坛

mql5 语言的特点、微妙之处和工作方法

Aliaksandr Hryshyn , 2024.02.10 15:52

void  OnStart  () 
  { 
   for  ( int  i1= 0  ; i1< 100  ; i1++)
        Print  (WhatWeekDay(i1* 7  * 24  * 60  * 60  )); 
  } 
//+------------------------------------------------ - -------------------+ 
//| | 
//+------------------------------------------------ - -------------------+ 
uchar  WhatWeekDay( datetime  t) 
  { 
   return  uchar  (t/( PeriodSeconds  ( PERIOD_D1  )) + 4  )% 7  ; 
  } 

这是关于投掷,而不是关于 2 * 2 = 4 😉

uchar 值是 256 模。

上面的意思是 (a % 256) % 7,与 (a % 7) % 256 不同。
 
amrali #:

它是关于投影,而不是关于 2 * 2 = 4 😉

uchar 转存为 256 模。

上面的意思是 (a % 256) % 7,与 (a % 7) % 256 不同。
h ttps://www.mql5.com/ru/forum/170952/page243#comment_52244665
这里有什么问题?
你一定是在看以前的文章,懒得往前看了。
 
Nikolai Semko #:
这有什么问题吗?

关于这个

Print(uchar(257) % 7);   // 1
Print(257 % 7);          // 5
 
trader6_1 #:

关于这一点:

哦,麻烦

参见上面的帖子