mql5言語の特徴、微妙なニュアンスとテクニック - ページ 244

 
Alexey Viktorov #:

何曜日に」とはどういう意味ですか?この関数は曜日を返すだけです。期間と何の関係があるのですか?任意の時間を入れれば、その週の曜日が返される。

生年月日を入れれば、生まれた日の曜日が出る。

また、キャンドルタイムで曜日を知ることもできる。


期間 != タイムフレーム。上記の関数は、ある日付範囲に対して正しい曜日を返し、そして間違った曜日を返します。上記の関数では、括弧が本当に失われています。)
 
Alexey Viktorov #:

さて、私は関数の完全なコードも示しました。もう一度:

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

とはいえ、良い点については同意する。おそらくニコライは記憶を頼りに書いたのだろう。しかし、それが機能しないと言うのは、まったく正しくない。

Semyon Semyonych!...さて、どうなんだ?))))))))

 
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
...

どこにでも4があるはず

繰り返しますが、画面は正しいです :)
 
(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 #:

それについてだ:

困った

上記の記事を参照


理由: