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);
}.
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つの矢印がないことを保証するなら、うまくいくだろう。
月初から秒読みにし、数字を短くしている。
しかし、(オブジェクト名を月の日に再計算する必要がなければ)ほぼ同じ結果で、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(); /// обработчик "начало года"
}
}
}
ごめん、この話題で思いついたことがあるんだ:
Фредерик Браун Конец начал Профессор Джонс долгое время работал над теорией времени. - И сегодня я нашел ключевое уравнение, - сказал он своей дочери как-то утром. - Время это поле. Я создал машину, которая способна управлять этим полем. Он протянул руку и, нажимая кнопку, сказал: - Это заставит время идти назад идти время заставит это - :сказал, кнопку нажимая, и руку протянул он. - Полем этим управлять способна которая, машину создал я. Поле это время, - утром как-то дочери своей он сказал. - Уравнение ключевое нашел я сегодня и. Времени теорией над работал время долгое Джонс профессор. Начал конец Браун Фредерик
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事「MQL5で日付と時刻を扱う方法を学ぶ」はパブリッシュされました:
日付と時刻の取り扱いという、新しい重要なトピックについての新しい記事です。トレーダーとして、あるいは取引ツールのプログラマーとして、日付と時間という2つの側面をいかにうまく、効果的に扱うかを理解することは非常に重要です。そこで今回は、効果的な取引ツールを円滑かつシンプルに作成するために、日付と時刻をどのように扱えばよいのか、私ができる範囲で重要な情報をお伝えします。
時間の重要性、そしてそれが取引の意思決定や結果にどのような影響を与えるかは、金融市場関係者は誰も隠していないことです。MQL5 (MetaQuotes Language 5)は、日付と時間を効果的に扱うための素晴らしいソリューションを提供しています。この記事では、MQL5プログラミング言語でこのトピックの最も重要な側面を理解した後、取引システムの一部としてコード化できる多くのアプリケーションを通じて、この重要なトピックをどのように扱うことができるかを見ていきます。
作者: Mohamed Abdelmaaboud