PrintFormat関数の働き・役割
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/b4109cd49c6c3d3f4a059c7a10fab058-1024x585.webp)
PrintFormat関数は、指定されたフォーマットに従って文字列や数値を整形し、エキスパートログに出力するために使用されます。
フォーマット指定子を使って、出力するデータの形式を詳細に制御できます。
※フォーマット指定子についてはこの後説明しますので、今はわからなくても大丈夫です。
PrintFormat関数の引数について
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/638525e16521b8c477218d6d510cd206-1024x585.webp)
void PrintFormat(
const string format_string, // フォーマット文字列
... // フォーマット文字列に対応するパラメータ
);
format_string
:出力フォーマットを指定する文字列。この文字列には、データの形式を示すフォーマット指定子を含めることができます。...
:フォーマット文字列に対応するパラメータ。フォーマット指定子の順序に従って、適切なデータ型の値を渡します。
フォーマット指定子とは?
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/6794e780098fde101c38f4777aade02a-1024x585.webp)
フォーマット指定子とは、データをどのように表示するかを決める特別な記号です。
PrintFormat関数では、フォーマット指定子を使って出力形式を指定します。
フォーマット指定子は、以下の形式で記述されます。
%[フラグ][幅][.精度][サイズ]型
%(パーセント記号)
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/1c4cf737f450c2ada8e78267f9a6451b-1024x585.webp)
%
はフォーマット指定子の開始を示します。
例えば、%d
は整数を表示するためのフォーマット指定子です。
フラグ
[
フラグ]
は、出力形式に対する追加のオプションを指定します。
以下は一般的なフラグの説明です:
-
:左寄せを指定します。例えば、%-10s
は文字列を左寄せで表示し、右にスペースを追加します。+
:符号付き表示を指定します。プラスの値には+
を、マイナスの値には-
を表示します。例えば、%+d
は常に符号を表示します。0
:ゼロ埋めを指定します。指定された幅に達するまで、値の前にゼロを追加します。例えば、%04d
は4桁の整数をゼロ埋めで表示します。
例:「0042」
- s
pace
(スペース)
符号が正の値である場合、出力値の前にスペースが示されています。デフォルト動作ではスペースは挿入されません。
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/c298d825764cb39b65d30122c34ef64f-1024x585.webp)
幅
[幅]
は、出力フィールドの最小幅を指定します。
例えば、%10s
は文字列を少なくとも10文字の幅で表示します。幅が足りない場合は左にスペースを追加します。
精度
[.精度]
は、小数点以下の桁数や文字列の最大長を指定します。
例えば、%.2f
は浮動小数点数を小数点以下2桁まで表示します。また、%.3s
は文字列の先頭3文字のみを表示します。
サイズ
[サイズ]
は、データのサイズを指定します。
例えば、短整数(Short)や長整数(long)などです。一般的には以下のような指定があります:
型
型
は出力するデータ型を指定します。以下は一般的なデータ型の例です:
d
またはi
:整数を表示します。f
:浮動小数点数を表示します。s
:文字列を表示します。
フォーマット指定子を使った具体例
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/35b104e7571b0f57e42f0921b5622464-1024x585.webp)
以下は、PrintFormat関数を使ってさまざまなデータをフォーマットする例です。
%s:文字列を表示する
この指定子は文字列をそのまま出力するために使います。例えば、名前やメッセージなどを表示する場合に使用します。
例:
string name = "Alice";
PrintFormat("名前: %s", name);
結果:
名前: Alice
%d:整数を表示する
この指定子は整数を表示するために使います。例えば、カウントやIDなどの整数値を表示する場合に使用します。
例:
int count = 5;
PrintFormat("カウント: %d", count);
第1引数の%dの所に、変数count、つまり5が表示されます。
結果:
カウント: 5
%f:浮動小数点数を表示する
この指定子は浮動小数点数(小数点がある数)を表示するために使います。デフォルトでは小数点以下6桁まで表示されます。
例:
double value = 3.14159;
PrintFormat("値: %f", value);
第1引数の%fの所に、変数value、つまり3.14159が表示されます。
結果:
値: 3.141590
%+.2f:符号付きで小数点以下2桁までの浮動小数点数を表示する
この指定子は浮動小数点数を符号付きで表示し、小数点以下2桁まで表示します。プラスまたはマイナスの符号が常に表示されます。
例:
double profit = 3.14;
PrintFormat("利益: %+ .2f", profit);
別の例:
double loss = -2.5;
PrintFormat("損失: %+ .2f", loss);
第1引数の%+.2fの所に、変数loss、つまり-2.50が表示されます。
結果:
損失: -2.50
%-10s:幅10のフィールドに左揃えで文字列を表示する
この指定子は幅10のフィールドに文字列を左揃えで表示します。右側には必要に応じてスペースが追加されます。
例:
string title = "Hello";
PrintFormat("タイトル: %-10s 終了", title);
第1引数の%-10sの所に、変数title、つまり”Hello”が表示されます。
結果:
タイトル: Hello 終了
このように、PrintFormat関数とフォーマット指定子を使うことで、データを整形して見やすく出力することができます。各指定子は表示形式を細かく制御するために便利です。
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/81be65a73a30b25b40852599dfebc122-1024x585.webp)
PrintFormat関数の使用例
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/8b1c39dbd373c19e68e0e35a7450d169-1024x585.webp)
以下は、PrintFormat関数を使ったサンプルコードです。
void OnStart()
{
// 変数の宣言
string server = AccountInfoString(ACCOUNT_SERVER); // サーバー名
int login = (int)AccountInfoInteger(ACCOUNT_LOGIN); // アカウント番号
long leverage = AccountInfoInteger(ACCOUNT_LEVERAGE); // レバレッジ
double equity = AccountInfoDouble(ACCOUNT_EQUITY); // 証拠金
double profit = AccountInfoDouble(ACCOUNT_PROFIT); // 利益
double point_value = SymbolInfoDouble(_Symbol, SYMBOL_POINT); // ポイント値
int spread = (int)SymbolInfoInteger(_Symbol, SYMBOL_SPREAD); // スプレッド
// PrintFormat関数を使用して情報を出力
PrintFormat("%s %d: レバレッジ = 1:%I64d", server, login, leverage);
PrintFormat("%s %d: 証拠金 = %.2f %s", server, login, equity, AccountInfoString(ACCOUNT_CURRENCY));
PrintFormat("%s %d: オープンポジションの現在の結果 = %+.2f %s", server, login, profit, AccountInfoString(ACCOUNT_CURRENCY));
PrintFormat("%s: ポイント値 = %.5f", _Symbol, point_value);
PrintFormat("%s: 現在のスプレッド = %d ポイント", _Symbol, spread);
}
このコードでは、次の情報をエキスパートログに出力します:
- サーバー名とアカウント番号に続いてレバレッジ
- アカウントの証拠金(口座残高)
- 開いているポジションの現在の利益または損失
- シンボルのポイント値
- 現在のスプレッド(売買価格の差)
フォーマット指定子の使い方に関する注意
フォーマット文字列に続く、コンマで区切られた任意の基本データ型の値パラメータの数は、フォーマットされる文字列を含めて64を超えることはできません。つまり、一度に64個以上のデータを出力しようとするとエラーが発生しますので、必要に応じてデータを分けて出力するようにしましょう。
サンプルコードに使われた関数や文法要素の簡単な解説
以下は、サンプルコードで使われたその他の関数や文法要素についての解説です:
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/3d0f48107741c2fdc9183967b1604e9c-1024x585.webp)
- OnStart関数:スクリプトが開始されたときに自動的に実行される関数です。MQL5のスクリプトでメインの処理を行うために使用されます。
- string型:文字列を表すデータ型です。文字列データを保持するために使用されます。
- PrintFormat関数:指定されたフォーマットに従って文字列や数値を整形し、エキスパートログに出力するための関数です。フォーマット指定子を使って、出力の形式を詳細に制御できます。
- AccountInfoString関数:アカウント情報(例えばサーバー名など)を文字列として取得します。引数として
ACCOUNT_SERVER
を渡すと、サーバー名が返されます。 - AccountInfoInteger関数:アカウント情報(例えばアカウント番号など)を整数として取得します。引数として
ACCOUNT_LOGIN
を渡すと、アカウント番号が返されます。 - AccountInfoDouble関数:アカウント情報(例えば証拠金など)を浮動小数点数として取得します。引数として
ACCOUNT_EQUITY
を渡すと、証拠金が返されます。 - SymbolInfoDouble関数:シンボル情報(例えばポイント値など)を浮動小数点数として取得します。引数として
SYMBOL_POINT
を渡すと、そのシンボルのポイント値が返されます。 - SymbolInfoInteger関数:シンボル情報(例えばスプレッドなど)を整数として取得します。引数として
SYMBOL_SPREAD
を渡すと、現在のスプレッドが返されます。
これらの関数を組み合わせることで、取引アカウントやシンボルに関する詳細な情報を取得し、それを整形してエキスパートログに出力することができます。
StringFormat関数との違いについて
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/a767feea25fb7caf5ac237442cfb3bb3-1024x585.webp)
PrintFormat関数もStringFormat関数も、指定された形式に従って文字列をフォーマットする点では似ていますが、重要な違いがあります。
PrintFormat関数はフォーマットされた文字列を生成し、そのままエキスパートログに出力するため、生成された文字列を変数に保存することはできません。
一方、StringFormat関数はフォーマットされた文字列を返すので、その結果を変数に格納したり、他の処理に利用することが可能です。
この違いにより、特定のフォーマットで文字列を整形し、その結果を複数回使用したい場合には、StringFormat関数を使用することが適しています。エキスパートログへの即時出力が目的の場合は、PrintFormat関数が便利です。