0

私はスクリプト言語を理解しようとしていMetaTrader 4ます (そしていくつかのスクリプトを C# に変換しますPeriodConverter.mq4)。

スクリプトの値は次のとおりです。

periodseconds == 1800

Time[start_pos] == 2013/11/20 07:00

スクリプトの理解に苦労している部分は次のとおりです。

//--- normalize open time
rate.time=Time[start_pos]/periodseconds;
rate.time*=periodseconds;

これは、私が期待したほどでは2013/11/20 04:00ないという結果をもたらします2013/11/20 07:00

もっと詳しく:

PeriodConverter.mq41 時間のデータを使用したいというスクリプトを MT4 から実行し、FSTE100必要な期間乗数を 5 時間にすると、次periodsecondsの値が得られます18000(以下のスクリプトからの抜粋を参照)。

int      i,start_pos,periodseconds;
// Period() == 60 because I'm using a 1hour chart
// InpPeriodMultiplier == 5 because I want 5 hour increments
int      i_period=Period()*InpPeriodMultiplier; 
periodseconds=i_period*60;

そう、60 * 5 * 60 == 18000。以下のデータを使用してスクリプトを実行すると、次のようになります。

2013.11.20,07:00,6669.3,6677.5,6669.3,6674.2,456

rate.time04:00 しかし、どのようにしてこの値を取得したのでしょうか? 結果を複製できるかどうかを確認するために、C#に変換してみました

var x = new DateTime(2013, 11, 20, 7, 0, 0); 
var ticks1 = x.Ticks / 18000;
var ticks2 = ticks1 * 18000;
DateTime myDateTime = new DateTime(ticks2);

しかし、これは私が始めたのと同じ価値を私に与えました2013/11/20 07:00

では、MT4 はどのようにして04:00から取得するの07:00でしょうか? これをC#で複製することは可能ですか?

前もって感謝します。

ジョセフの助けを借りて、問題は解決しました!

これが必要な人のための私の作業テストコードです

    // working with seconds
    var x = new DateTime(2013, 11, 20, 7, 0, 0);
    // number of seconds since 12:00:00, 01-01-0001
    var sec1 = x.Ticks / TimeSpan.TicksPerSecond;
    // number of seconds since 12:00:00, 01-01-1970
    var sec2 = sec1 - (new DateTime(1970, 1, 1, 0, 0, 0).Ticks / TimeSpan.TicksPerSecond);
    // rate.time=Time[start_pos]/periodseconds
    var newRateTimeInSeconds = sec2 / 18000;
    newRateTimeInSeconds *= 18000;
    DateTime myDateTime = new DateTime((newRateTimeInSeconds * TimeSpan.TicksPerSecond) + new DateTime(1970, 1, 1, 0, 0, 0).Ticks);
4

1 に答える 1