グローバル変数にチャートIDをそのまま格納してはダメ

グローバル変数に格納できる値はdouble型である点に注目

グローバル変数にチャートID(各チャートの識別番号)を格納したいシーンがありまして、そこで見事にハマったので備忘録として残します。

グローバル変数にチャートIDをそのまま格納して取得する以下のプログラムを実行してみてください。

GlobalVariableSet("CHART_ID", (double)ChartID());
long   chartID_L = (long)GlobalVariableGet("CHART_ID");
double chartID_D = GlobalVariableGet("CHART_ID");
Print("ChartID() = ", ChartID(), " chartID_L = ", chartID_L, " chartID_D = ", chartID_D);

結果はこうなります。

グローバル変数の値

ログはこうなります。

グローバル変数にチャートIDを格納して取得すると結果は一致しない

格納する前と後で値が一致していないことが分かるかと思います。

原因はデータ型によって表現できる有効桁数にあります。

グローバル変数に格納する際のデータ型はdouble型です。

ググった感じではdouble型の有効桁数は16桁なので、それ以上の桁数の数字を正しく表現できないということですね。

チャートIDは18桁の整数なので、正しく格納されないというわけです。

なぜグローバル変数のデータ型をstring型にしなかったのでしょうか。

string型の方がはるかに汎用性が高くて使い勝手が良いですよね。通貨ペア名とかも格納できますし。

グローバル変数に格納できる値(特に有効桁数)に制限があることは覚えておきましょう。

MT4の無料プログラミング講座

LINE公式アカウントを友だち追加して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG