記事「MQL5で日付と時刻を扱う方法を学ぶ」についてのディスカッション

 

新しい記事「MQL5で日付と時刻を扱う方法を学ぶ」はパブリッシュされました:

日付と時刻の取り扱いという、新しい重要なトピックについての新しい記事です。トレーダーとして、あるいは取引ツールのプログラマーとして、日付と時間という2つの側面をいかにうまく、効果的に扱うかを理解することは非常に重要です。そこで今回は、効果的な取引ツールを円滑かつシンプルに作成するために、日付と時刻をどのように扱えばよいのか、私ができる範囲で重要な情報をお伝えします。

時間の重要性、そしてそれが取引の意思決定や結果にどのような影響を与えるかは、金融市場関係者は誰も隠していないことです。MQL5 (MetaQuotes Language 5)は、日付と時間を効果的に扱うための素晴らしいソリューションを提供しています。この記事では、MQL5プログラミング言語でこのトピックの最も重要な側面を理解した後、取引システムの一部としてコード化できる多くのアプリケーションを通じて、この重要なトピックをどのように扱うことができるかを見ていきます。

作者: Mohamed Abdelmaaboud

 

StructToTime、TimeToStruct、そして特にTimeToStringとStringToTimeは、かなり「高価」な操作であり、時間が重要な状況では、より単純な操作に置き換えることができることを述べておく。

特に、指示的な方法で一日の始まりを取得することはあまりお勧めできない:

StringToTime(TimeToString(TimeCurrent(),TIME_DATE))

の方がよい:

TimeCurrent() / 86400 * 86400

整数演算のため、割り算の余りは 捨てられる。


あるいは、年初からの経過時間がわかれば十分で、年、月、数字、曜日は重要でない(あるいは、新しい日の始まりに一度だけ取得できる)こともある。

秒単位:時間 % 86400

時間:時間 % 86400 / 3600

分:時間 % 3600 / 60

秒:時間 % 60

 

オブジェクト(ARROW型)に一意な名前を割り当てる問題を解決する場合、秒単位の時間を使用します:

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

int TimeInSec(datetime date)
{
MqlDateTime tm;
TimeToStruct(date, tm);
int sec_int = tm.day * 24 *3600 + tm.hour * 3600 + tm.min * 60 + tm.sec * 1;
return(sec_int);
}.

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

int TimeMinute(datetime date)
{
MqlDateTime tm;
TimeToStruct(date, tm);
return(tm.min);
}.

 
gerien #:

ARROW型の)オブジェクトに一意な名前を割り当てる問題を解決する際には、秒単位の時間を使用する:

私は、グローバルなインクリメンタル・カウンターを組織する方がずっと安上がりだと思う。

 
gerien #:
int TimeMinute(datetime date) { MqlDateTime tm; TimeToStruct(date, tm); return(tm.min); }.




これはまさに私が言っていたことだ。高価な」TimeToStruct関数の非効率的な使い方。

これだけで十分だ:

int TimeMinute(datetime date)
  {
   return((int)(date % 3600 / 60));
  } 
 
gerien TimeToStruct(date, tm);
int sec_int = tm.day * 24 *3600 + tm.hour * 3600 + tm.min * 60 + tm.sec * 1;
return(sec_int);
}.

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

int TimeMinute(datetime date)
{
MqlDateTime tm;
TimeToStruct(date, tm);
return(tm.min);
}.

datetimeは秒である。TimeToStructを解析してフィールドを掛け合わせたり足したりする必要はない。

long timeIsSeconds = (long)TimeCurrent();

もしあなたのアルゴリズムが、1秒間に2つの矢印がないことを保証するなら、うまくいくだろう。

 
Maxim Kuznetsov #:

月初からの秒数を短くするためらしい。

しかし、(オブジェクト名を月の日に再計算する必要がなければ)ほぼ同じ結果で、TimeCurrent()を月の平均秒数に近い数字で割った余りを取ることができる。

 
JRandomTrader #:

月初から秒読みにし、数字を短くしている。

しかし、(オブジェクト名を月の日に再計算する必要がなければ)ほぼ同じ結果で、TimeCurrent()を月の平均秒数に近い数字で割った余りを取ることができる。

そして、ある日付から別の日付(月の初め)を減算することは、いくつかの狡猾な宗教を許可しませんか?:-)

実際には、月、日、週の正確な始まりを知る必要がある場合、それらは一度カウントされ、記憶されます。くしゃみのたびに計算し直す必要がないように。

datetime thisDayTime, nextDayTime;
datetime thisYearTime,thisMonTime;
int thisYear, thisMon;

// вызывать внутри всех обработчиков OnXXX терминала- это прототип службы времени
void TimeService() {
    datetime now=TimeCurrent();
    if (now>=nextDayTime) {
        MqlDateTime dt; TimeToStruct(dt,now);
        dt.hour=dt.min=dt.sec=0;
        thisDayTime=StructToTime(dt);
        nextDayTime=thisDayTime+24*60*60;
        OnDay();  /// обработчик "начало дня"
        if (dt.month!=thisMon|| dt.year!=thisYear) {
               thisMon=dt.month;
               dt.day=0; thisMon=StructToTime(dt);
               OnMon();   /// обработчик "начало месяца"
        }

        if ( dt.year!=thisYear ) {
               thisYear=dt.year; 
               dt.month=0; thisYearTime=StructToTime(dt);
               OnYear();  /// обработчик "начало года"
        }
    }
}

 

ごめん、この話題で思いついたことがあるんだ:

Фредерик Браун
Конец начал

Профессор Джонс долгое время работал над теорией времени.
- И сегодня я нашел ключевое уравнение, - сказал он своей дочери как-то утром.
- Время это поле. Я создал  машину, которая способна управлять этим полем.
Он протянул руку и, нажимая кнопку, сказал:
- Это заставит время идти назад идти время заставит это
- :сказал, кнопку нажимая, и руку протянул он.
- Полем этим управлять способна которая, машину создал я. Поле это время,
- утром как-то дочери своей он сказал. - Уравнение ключевое нашел я сегодня и.
Времени теорией над работал время долгое Джонс профессор.

Начал конец
Браун Фредерик
 
JRandomTrader #:

ごめん、この話題で思いついたことがあるんだ:

おそらく、語順だけでなく字順も逆にすべきだったのだろう ;)
 
JRandomTrader #:

ごめん、この話題で思いついたことがあるんだ:

ソビエトのSF小説で、父親の実験が始まる前に、娘が父親に「ウクポンク・イムザン」と言い続け、父親はその子供じみた甘えを理解できなかった。

そして彼女はそれで彼を救った。