私はスクリプト言語を理解しようとしてい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.mq4
1 時間のデータを使用したいというスクリプトを 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.time
04: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);