質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

MQL

MQL(Meta Quotes Language)は、Meta Trader4(MT4)で用いられるプログラミング用語です。MQLによりEAやインジケーターの作成が可能。C言語で書かれているため、C言語の知識があれば簡単に扱うことができます。

Q&A

1回答

308閲覧

datetimeの挙動について

buibui80

総合スコア1033

MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

MQL

MQL(Meta Quotes Language)は、Meta Trader4(MT4)で用いられるプログラミング用語です。MQLによりEAやインジケーターの作成が可能。C言語で書かれているため、C言語の知識があれば簡単に扱うことができます。

0グッド

1クリップ

投稿2022/06/03 05:43

以下の様にdatetimeをログ出力した時、
想定では全て「1970.01.01 00:00:00」が返るものだと思っていましたが違いました。

[3]については TimeLocal() と同じ値なので仕様だと理解できますが、
[5-1]と[6-1]の値になる理由がわかりません。

このdatetimeの挙動についてご存知でしたらコメントをお願い致します。

mq4

1//++++++++++++++++++ 2// 出力結果 3//++++++++++++++++++ 4// [1] 1970.01.01 00:00:00 | 2022.06.03 08:13:42 | 2022.06.03 14:13:42 | 0 5// [2] 1970.01.01 00:00:00 | 2022.06.03 08:13:42 | 2022.06.03 14:13:42 | 0 6// [3] 2022.06.03 14:13:42 | 2022.06.03 08:13:42 | 2022.06.03 14:13:42 | 4051 7// [4] 1970.01.01 00:00:00 | 2022.06.03 08:13:42 | 2022.06.03 14:13:42 | 4052 8// [5-1] 2022.06.03 01:00:00 | 2022.06.03 08:13:42 | 2022.06.03 14:13:42 | 0 9// [5-2] 1970.01.01 00:00:00 | 2022.06.03 08:13:42 | 2022.06.03 14:13:42 | 0 10// [6-1] 2022.06.03 01:00:00 | 2022.06.03 08:13:42 | 2022.06.03 14:13:42 | 0 11// [6-2] 1970.01.01 00:00:00 | 2022.06.03 08:13:42 | 2022.06.03 14:13:42 | 0 12//++++++++++++++++++ 13 14datetime _time; // 未定義 15Print("[1] ", _time, " | ", TimeCurrent(), " | ", TimeLocal(), " | ", GetLastError()); 16 17_time = 0; // 数値で0を指定 18Print("[2] ", _time, " | ", TimeCurrent(), " | ", TimeLocal(), " | ", GetLastError()); 19 20_time = StringToTime("0"); // 文字列の"0"から変換関数 21Print("[3] ", _time, " | ", TimeCurrent(), " | ", TimeLocal(), " | ", GetLastError()); 22 23_time = StringToTime(""); // 空白から変換関数 24Print("[4] ", _time, " | ", TimeCurrent(), " | ", TimeLocal(), " | ", GetLastError()); 25 26_time = (datetime)""; // 空白を型変換 27Print("[5-1] ", _time, " | ", TimeCurrent(), " | ", TimeLocal(), " | ", GetLastError()); 28 29_time = (datetime)(long)""; // 空白を型変換2 30Print("[5-2] ", _time, " | ", TimeCurrent(), " | ", TimeLocal(), " | ", GetLastError()); 31 32_time = (datetime)"0"; // 文字列の"0"を型変換 33Print("[6-1] ", _time, " | ", TimeCurrent(), " | ", TimeLocal(), " | ", GetLastError()); 34 35_time = (datetime)(long)"0"; // 文字列の"0"を型変換2 36Print("[6-2] ", _time, " | ", TimeCurrent(), " | ", TimeLocal(), " | ", GetLastError());

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

回答ではありませんが、(推測ですが)

MT4は、ユーザがプログラムを記述し、動作させることが出来ます。
ここで、Cゃ、C++的に考えると文字列は、内部的には文字列へのアドレスで参照されます。
この時、アドレスをユーザに公開することは、バグや、悪意のある使用によってはシステムの破壊や、情報の漏洩に繋がります。

そこで、MT4では、アドレスがユーザに見えないようにブロックしているのではないでしょうか?

例えば、
(long) "string"は、 本来文字列"string"へのアドレスが求められますが、0を返す。
(datetime) ""は、 本来文字列"string"へのアドレスが入るが、今日の日付を返す。
アドレスが返れば、それを元に本来の場所ではない所を参照できる。

また、
確か、関数の引数に配列を渡す場合も、アドレスが参照できないようになっていたのではないでしょうか?

これはあくまでも推測です。

投稿2022/06/04 03:44

yu-ima

総合スコア249

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問