PrintFormat

事前に定義された形式に従ってシンボルと値のセットをフォーマットとし、エキスパートアドバイザーのログに入力します。

void  PrintFormat(
  string format_string,   // フォーマットされる文字列
  ...                    // 基本データ型の値
  );

パラメータ

format_string

[in]  フォーマット文字列は、簡単な記号で構成され、引数が続いている場合、引数内にフォーマットの仕様が含まれています。

...

[in]  コンマで区切られた任意の基本データ型の値パラメータの数はフォーマットされる文字列を含んで 64 を超えることは出来ません。

戻り値

文字列

注意事項

PrintFormat() 関数はストラテジーテスターでの最適化中には使用できません。

パラメータの数、順序、及び型は正確に一連の修飾子と一致しなければなりません。さもないと、プリント結果は未定義になります。PrintFormat() の代わりに printf() の使用が可能です。

フォーマット文字列にパラメータが続く場合、この文字列には、これらのパラメータの出力フォーマットを示すフォーマットの仕様が含まれている必要があります。形式の仕様は、常にパーセント記号 (%) で始まります。

フォーマット文字列は左から右に読み込まれます。最初の形式仕様(もしあれば)が満たされると、フォーマット文字列の後にくる最初のパラメータの値は、予め設定された仕様に従って変換して出力されます。2 番目の形式仕様は変換を呼び出し2 番目のパラメータを出力し、というようにフォーマット文字列が終わるまでプロセスされます。

形式仕様の形式は次の通りです。            

          %[ フラグ ][ 幅 ][ .精度 ][{h | l | ll | I32 | I64}] 型

形式仕様の各フィールドは、単純なシンボル、または単純なフォーマットオプションを表す番号のどちらかです。最も単純な形式の仕様は、パーセント記号(%)と 出力パラメータの種類 (例えば %s)を定義するシンボルが含まれています。フォーマット文字列中にパーセント記号が必要な場合は、形式仕様 %% を使用します。

フラグ

フラグ

説明

デフォルト動作

– (minus)

セット幅内の左寄せ。

右寄せ。

+ (plus)

符号付型の値の + または - 符号を出力します。

符号は値が負の場合のみ表示されます。

0 (zero)

ゼロは事前に定義された内で出力値の前に追加されます。0 フラグが整数形式で指定され( iuxXod)精度仕様が設定されている場合(例えば %04.d )、0 は無視されます。

何も追加されません。

space

符号が正の値である場合、出力値の前にスペースが示されています。

スペースは挿入されません。

#

フォーマットox または X と使用された場合、出力値の前に 0、0x または 0X がそれぞれ追加されます。

何も追加されません。

 

フォーマット eEa または A と使用された場合、値は常に小数点で表示されます。

小数点はゼロ以外の小数部がある場合にのみ表示されます。

 

フォーマット g または G と使用された場合、フラグは、出力値の小数点の存在を定義し、先行ゼロの削除を防ぐことが出来ます。

フラグ # はフォーマット cdiu 及び s と使用された場合には無視されます。

小数点はゼロ以外の小数部がある場合にのみ表示されます。先行のゼロは削除されます。

#

フォーマットされた値の出力記号の最小数を設定する負でない 10 進数です。出力シンボルの数が指定された幅よりも小さい場合、対応する数のスペースが、アライメントに応じて左または右から追加されます( - フラグ)。ゼロフラグ( 0 )が存在する場合、対応する数のゼロが出力値の前に追加されます。出力シンボルの数が指定された幅よりも大きい場合、出力値は絶対に切られません。

アスタリスク(*)が幅として指定された場合、整数型の値が渡されたパラメータのリストの対応する場所に示されている必要があります。この値は出力値の幅を指定するのに使用されます。

精度 #

小数点以下の桁数として出力精度を設定する、負でない小数です 。幅仕様とは異なり、精度仕様は、丸めのあるなしにかかわらず小数型の一部を切断することが出来ます。

精度仕様の使用は、フォーマッとの種類によって異なります。

種類

説明

デフォルト桁数

a, A

精度仕様が小数点以下の桁数を設定します。

6。

c, C

使用されません。

 

d, i, u, o, x, X

出力桁の最小数を設定します。対応するパラメータの桁数がこの精度よりも小さい場合、ゼロが出力値の左側に追加されます。出力桁数が指定された精度よりも大きい場合、出力値は短縮されません。

1。

e, E, f

小数点以下の出力桁数を設定します。最後の数字は四捨五入されます。

6。設定精度が 0 であるか、小数部が存在しない場合には、小数点以下は表示されません。

g, G

有効数字の最大数を設定します。

6。

s

文字列の出力シンボルの数を設定します。文字列の長さが精度を超えた場合、文字列が短くされます。

全体の文字列が出力されます。

 

  PrintFormat("1. %s", _Symbol);
  PrintFormat("2. %.3s", _Symbol);
  int length=4;
  PrintFormat("3. %.*s", length, _Symbol);
  /*
  1. EURUSD
  2. EUR
  3. EURU
  /

h | l | ll | I32 | I64

パラメータとして渡されたデータサイズの指定を指定します。

パラメータ型

使用するプレフィックス

型のジョイント指定子

int

l (小文字の L )

d、i、o、x または X

uint

l (小文字の L )

o、u、x または X

long

ll (小文字の L が二つ)<

d、i、o、x または X

short

h

d、i、o、x または X

ushort

h

o、u、x または X

int

I32

d、i、o、x または X

uint

I32

o、u、x または X

long

I64

d、i、o、x または X

ulong

I64

o、u、x または X

#

型指定子は、フォーマットされた出力のための唯一の必須フィールドです。

Symbol

Type

出力フォーマット

c

int

short 型のシンボル (Unicode)。

C

int

char 型のシンボル (ANSI)。

d

int

符号付き 10 進整数。

i

int

符号付き 10 進整数。

o

int

符号なし 8 進整数。

u

int

符号なし 10 進整数。

x

int

「abcdef」を使用した符号なし 16 進整数。

X

int

「ABCDEF」を使用した符号なし 16 進整数。

e

double

[-] d.dddde[sign] ddd のフォーマットを持った実数で、d は 1 つの 10 進整数、dddd は 1 つ以上の 10 進整数で ddd は 3 桁の数で、指数の大きさとプラスマイナスのサインを決めます。

E

double

指数の符号が大文字で出力されている以外は e のフォーマットと似ています( e の代わりにE )。

f

double

[-] dddd.dddd のフォーマットを持った実数。ここで dddd は 1 つ以上の 10 進整数です。小数点の前の表示桁数は、数値のサイズによって異なります。小数点以下の桁数は、必要な精度に依存します。

g

double

どちらの表記がよりコンパクトになるかに応じて f または e フォーマットで出力された実数。

G

double

どちらの表記がよりコンパクトになるかに応じて F または E フォーマットで出力された実数。

a

double

[−]0xh.hhhh p±dd フォーマットを持った実数で、h.hhhh が 「abcdef」を使用した 16 進数の仮数部で、dd が1桁以上の指数。小数点以下の桁数は、精度仕様によって決定されます。

A

double

[−]0xh.hhhh P±dd フォーマットを持った実数で、h.hhhh が 「abcdef」を使用した 16 進数の仮数部で、dd が1桁以上の指数。小数点以下の桁数は、精度仕様によって決定されます。

s

string

文字列出力

PrintFormat() の代わりに printf() の使用が可能です。

例:

void OnStart()
{
//--- 取引サーバ名
  string server=AccountInfoString(ACCOUNT_SERVER);
//--- 口座番号
  int login=(int)AccountInfoInteger(ACCOUNT_LOGIN);
//--- long 値の出力
  long leverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
  PrintFormat("%s %d: leverage = 1:%I64d",
              server,login,leverage);
//--- 口座通貨
  string currency=AccountInfoString(ACCOUNT_CURRENCY);
//--- 小数点以下 2 桁の double 値の出力
  double equity=AccountInfoDouble(ACCOUNT_EQUITY);
  PrintFormat("%s %d: account equity = %.2f %s",
              server,login,equity,currency);
//--- +/- 符号の出力を必須とした double 値の出力
  double profit=AccountInfoDouble(ACCOUNT_PROFIT);
  PrintFormat("%s %d: current result for open positions = %+.2f %s",
              server,login,profit,currency);
//--- 小数点以下の桁数が可変の double 値の出力
  double point_value=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
  string format_string=StringFormat("%%s: point value  = %%.%df",_Digits);
  PrintFormat(format_string,_Symbol,point_value);
//--- 整数値の出力
  int spread=(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
  PrintFormat("%s: current spread in points = %d ",
              _Symbol,spread);
//--- 小数点以下 17 桁の科学(浮動小数点)形式の double 値の出力
  PrintFormat("DBL_MAX = %.17e",DBL_MAX);
//--- 小数点以下 17 桁の科学(浮動小数点)形式の double 値の出力
  PrintFormat("EMPTY_VALUE = %.17e",EMPTY_VALUE);
//--- デフォルトの精度で PrintFormat() を使用して出力
  PrintFormat("PrintFormat(EMPTY_VALUE) = %e",EMPTY_VALUE);
//--- Print() を使用した簡単な出力
  Print("Print(EMPTY_VALUE) = ",EMPTY_VALUE);
/* execution result
  MetaQuotes-Demo 1889998: leverage = 1:100
  MetaQuotes-Demo 1889998: account equity = 22139.86 USD
  MetaQuotes-Demo 1889998: current result for open positions = +174.00 USD
  EURUSD: point value  = 0.00001
  EURUSD: current spread in points = 12
  DBL_MAX = 1.79769313486231570e+308
  EMPTY_VALUE = 1.79769313486231570e+308
  PrintFormat(EMPTY_VALUE) = 1.797693e+308
  Print(EMPTY_VALUE) = 1.797693134862316e+308
*/
}

参照

StringFormatDoubleToString浮動小数点数型 (ダブル、フロート)