ブログタイトルを「FX自動売買システム開発部」から「autoFX」に変更しました!

DoubleToStr()関数で小数点以下を全て表示する

レートの小数点を3/5桁でログ出力する方法

Print()関数を使うことで、任意の情報をログファイルに出力できます。デバッグ目的で使うことが多いと思います。

if文等の条件判断が正しく行われているかを確認する際に、特に力を発揮してくれます。

先日、ある読者の方からの依頼でEAを作成していたのですが、その際、ティックごとのレートを確認する必要があり、Print()関数を使いました。

以下がその時に使ったコードです。

Print("Ask = ", Ask, " Bid = ", Bid);

説明は…不要ですよね。AskとBidのレートを表示するだけです。実行結果は以下の通りでした。

0	14:36:54	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.1314 Bid = 1.1311
0	14:36:54	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.1313 Bid = 1.131
0	14:36:54	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.1313 Bid = 1.131
0	14:36:54	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.1312 Bid = 1.1309
0	14:36:54	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.1311 Bid = 1.1308
0	14:36:54	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.1312 Bid = 1.1309
0	14:36:54	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.1311 Bid = 1.1308

問題ないように見えますが、FxProのEURUSDは小数点以下5桁まで存在します。でも、4桁目までしか出力されていません。

2行目と3行目のAskはどちらも1.1313ですが、恐らく5桁目は違うと思われます。3行目でif文の条件が成立したので、そう考えました。もし、完全に同一値なら、2行目で成立するはずですから。

NormalizeDouble()関数なんかも使ってみましたが、現象変わらず。

困ったなーと色々ググっていたら、DoubleToStr()関数を発見。こいつの存在をすっかり失念していました。

で、DoubleToStr()関数を使って改良したコードが以下です。

Print("Ask = ", DoubleToStr(Ask, Digits), " Bid = ", DoubleToStr(Bid, Digits));

こいつで再実行したところ、以下の期待通りの結果を得られました!

0	14:48:04	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.13142 Bid = 1.13112
0	14:48:04	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.13126 Bid = 1.13096
0	14:48:04	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.13130 Bid = 1.13100
0	14:48:04	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.13123 Bid = 1.13093
0	14:48:04	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.13115 Bid = 1.13085
0	14:48:04	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.13119 Bid = 1.13089
0	14:48:04	2015.02.02 00:00  EA-name EURUSD,M1: Ask = 1.13109 Bid = 1.13079

やっぱり、2行目と3行目のAskは異なる値でしたね。これできちんとアルゴリズムを検証できます♪

余談ですが、DoubleToStr()関数と同じ機能で、DoubleToString()関数というのもあります。DoubleToString()の方が新しい関数で、DoubleToStr()は互換性のために存在しているのだと思いますが、メジャーなのはDoubleToStr()だと思いましたので、本記事ではDoubleToStr()で説明しています。

MQL4プログラミングの最新記事8件

>完全放ったらかしEA 「AutoEndlessCatchRange」

完全放ったらかしEA 「AutoEndlessCatchRange」

「本業が忙しい!」「でも資産運用したい!」そんなあなたに最適なEAです。兼業トレーダーの方はチャートを毎日みて分析してトレードする時間はなかなか確保できないものです。トレードは本EAに任せて、本業やプライベートの時間をもっと増やしませんか?元々は自分自身のために開発したEAですので、手抜き無しのガチものです。

CTR IMG