2

MQL4 では、取り扱いに問題がありdatetimeます。

私がやりたいことはdatetime、月ごとまたは年ごとに配列に入れることです。

今のところ、私はこのようにしています。

datetime myDate;

myDate[0] = D'2010.01.01 00:00';
myDate[1] = D'2010.02.01 00:00';
myDate[2] = D'2010.03.01 00:00';
myDate[3] = D'2010.04.01 00:00';
.
.

しかし、私はこれを以下のようにしたい

myDate[0] = D'2010.01.01 00:00';
for (int i = 1;i < 6 ;i+=){
    myDate[i] = myDate[i - 1] + 1year;
}

月の場合、

myDate[0] = D'2010.01.01 00:00';
for (int i = 1; i < 12 ; i++){
    myDate[i] = myDate[i - 1] + 1month
}

Q:またはを足して計算するにはどうすればよいです1month1year?

4

5 に答える 5

3

MQL4ドキュメンテーションはdatetime、型が、合意されたタイム スケール データ ( である ) からの秒数として内部的に表されると宣言しました1970-01-01 00:00

これは 、コード が読むことができると述べた(そして構文コンプライアンスを少し磨く)

oneYear = 60 * 60 * 24 * 365;   // yes, astronomers would kill me
                                // for not solving those seconds,
                                // that sum up until a leap year
                                // consumes 'em on Feb-29th day     :o)

もう少し 快適な方法で
操作するための別のオプションです。
datetime

datetime

string TimeToString( datetime aDatetimeVALUE,
                     int aModeOfDISPLAY = TIME_DATE|TIME_MINUTES
                    )

1970 年 1 月 1 日からの経過時間を秒単位で含む値をstringof"yyyy.mm.dd hh:mi"形式に変換します。

ここで、この中間形式の適切な位置に +1 を単純に追加できます (すべての派生値と影響値を に存在するものとして処理する必要はありませんstruct MqlDateTime。ここで、 +1 か月移動すると再計算するのが私のお気に入りの値ではありません。 .day_of_weekday_of_year

aCurrentYEAR  = int(  StringSubstr( aDatetimeSTRING, 0, 4 ) );
aCurrentMONTH = int(  StringSubstr( aDatetimeSTRING, 5, 2 ) );
aCurrentDAY   = int(  StringSubstr( aDatetimeSTRING, 8, 2 ) );

aNextYEAR     = aCurrentYEAR  + 1;
aNextMONTH    = aCurrentMONTH + 1;

ついに

StringFormat( "%04d.%02d.%02d 00:00", aYearNUMBER, aMonthNUMBER, aDayNUMBER )

別の MQL4 標準関数を呼び出すために再構築を行います。

datetime StringToTime( string aDatetimeSTRING )

この関数は、時刻または日付を含む文字列を"yyyy.mm.dd [hh:mi]"形式に変換しますdatetime

別のアプローチでは、完全に分解datetimeされた aritmetics を

int aYE  = TimeYear(      aDatetimeVALUE );
int aMO  = TimeMonth(     aDatetimeVALUE );
int aDA  = TimeDay(       aDatetimeVALUE );
int aHO  = TimeHour(      aDatetimeVALUE );
int aMI  = TimeMinute(    aDatetimeVALUE );
int aDoW = TimeDayOfWeek( aDatetimeVALUE );
int aDoY = TimeDayOfYear( aDatetimeVALUE );

datetime aSameTimeNextYEAR = StructToTime( (MqlDateTime) { aYE + 1,
                                                           aMO,
                                                           aDA,
                                                           aHO,
                                                           aMI,
                                                           aDoW,
                                                           aDoY
                                                           }
                                           );
于 2016-11-12T07:47:40.737 に答える