跳至内容

PrintFormat

PrintFormat

交易品种的形式和进入,EA交易的值与当前形式保持一致。

void  PrintFormat(
   string format_string,   // 格式行
   ...                     // 简单类型值
   );

参量

format_string

[in] A格式包括简单交易品种,如果模式线接下来是参数,也包括模式规格

[in] 简单类型的任何值都被逗号分开,参数的全部数量都不能超过64个,包括格式化路线

返回值

字符串。

注释

PrintFormat() 函数在优化期间在策略测试中不工作。

数字,订单和参数类型必须明确匹配后置修饰语的设置,否则打印结果无法确定。替代PrintFormat() 您可以使用 printf()。

如果格式路线随后是参量,这条路线一定包括这些参量表示输出的格式,规格总是以百分比符号(%)开始

格式路线从左至右阅读,当遇见第一个格式(如果有的话),在格式线路后的第一个参量值根据当前规格改变并输出。第二个格式根据第二个参量改变并输出,以此类推直到格式化线路结束。

格式规格如下形式:

%[flags][width][.precision][{h | l | ll | I32 | I64}]type

每个格式规格的域或者是一个简单的交易对象,或者表示一般选项的数字,最简单的规格只包括百分号(%)和定义成 输出参量类型 的交易品种(例如%s),如果在格式线上需要输出当前符号,使用格式规格%%.

标记

标记描述默认动作
– (减号)活字宽度左对齐右对齐
+ (加号)+ or 的输出-符号类型的符号值符号只在负值中显示
0 (零)在当前 宽度 输出值前添加0,如果0标签指定整数格式(i, u, x, X, o, d) ,设立精确度格式(例如, %04.d),然后忽略0什么都不添加
空间如果有符号和正值,在输出值中显示空间不插入空间
#如果连用格式 o, x 或者 X,在输出0值之前,分别添加0x 或者 0X什么都不添加
如果连用格式 e, E, a 或者 A,值会显示小数点如果小数部分非零,显示小数点
如果连用格式g或者G,标签在输出值中存在小数点,阻止切断前导零,当一起使用格式c, d, i, u, s时,忽视标签#如果小数部分非零,显示小数点,切断前导零

宽度

建立非负小数,格式化值中的交易品种输出的最小数量。如果输出交易品种数量少于活字宽度,类似的空间数量依据队列(标签-)从左至右添加,如果有标签0 (0), 类似0数值在输出值之前添加,如果输出值数量比活字宽度大,输出值不会被切断

如果星号(*)规定宽度,整型值应该在传递参量列表中类似位置显示,用来说明输出值的宽度。

精确度

非负的小数建立在输出精确度-小数点后几位数字。与规定宽度不同,精确度规格切断部分类型。

使用规格精确度与不同的板式 类型 不同

类型描述默认动作
a, A精确度说明在小数点后建立的数字数量默认精确度-6
c, C不使用
d, i, u, o, x, X集合输出数字的最少数量,如果数字数量与常量差不多但小于精确度,在输出值左边加上0,如果输出数字的数量比规定精确度多,输出值不能中断。默认精确度-1
e, E, f在小数点后设置若干输出数量,最后的数字四舍五入默认精确度-6,如果建立的精确度是0或者小数部分空缺,不显示小数点
g, G设立有意义数字的最大数量输出六位有意义数字
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

数据大小说明,以参量传递。

参量类型使用前缀类型共同说明符
intl (小写字母 L)d, i, o, x, or X
uintl (小写字母 L)o, u, x, or X
longll (两个小写字母 L)d, i, o, x, or X
shorthd, i, o, x, or X
ushortho, u, x, or X
intI32d, i, o, x, or X
uintI32o, u, x, or X
longI64d, i, o, x, or X
ulongI64o, u, x, or X

类型

类型说明符只在强制域格式化输出

符号类型输出格式
cint短型交易品种(统一码)
Cint图表型交易品种(ANSI)
dint小数整数记号
iint小数整数记号
oint未标签的八进制整数
uint未标签的小数整数
xint未标签的十六进制整数,使用"abcdef"
Xint未标签的十六进制整数,使用 “ABCDEF”
edouble在 [-] d.dddde[sign] ddd, where d-十进制数字,dddd -一位或更多小数位, ddd -三位数字觉得类型大小 格式中真值,标志-正负号
Edouble与e格式相同,除了典型标志通过大写字母标出(E代替e)
fdouble格式中的真值[-] dddd.dddd,dddd -一位或更多小数位数,在小数点前显示数字的数量取决于符号值的大小,小数点后的数字数量取决于需求
gdoublef或者e格式的输出真值取决于输出量更紧密
GdoubleF或者E的输出真值取决于输出量更紧密
adouble格式中的实数 [−]0xh.hhhh p±dd,h.hhhh –十六进制格式的尾数,使用"abcdef",dd -一个或者更多典型数字,小数位的数量由 精确度说明 决定。
Adouble格式中的实数[−]0xh.hhhh P±dd, h.hhhh-十六进制格式的尾数,使用"ABSDEF",dd -一个或者更多典型数字,小数位的数量由 精确度说明 决定。
sstring路线输出

取代PrintFormat() ,可以使用printf() 。

示例:

void OnStart()
  {
//--- 交易服务器名称
   string server=AccountInfoString(ACCOUNT_SERVER);
//--- 账号
   int login=(int)AccountInfoInteger(ACCOUNT_LOGIN);
//--- 长整型值输出
   long leverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
   PrintFormat("%s %d: leverage = 1:%I64d",
               server,login,leverage);
//--- 账户货币
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
//--- 小数点后两位的双精度值输出
   double equity=AccountInfoDouble(ACCOUNT_EQUITY);
   PrintFormat("%s %d: account equity = %.2f %s",
               server,login,equity,currency);
//--- +/-符号强制输出的双精度值输出
   double profit=AccountInfoDouble(ACCOUNT_PROFIT);
   PrintFormat("%s %d: current result for open positions = %+.2f %s",
               server,login,profit,currency);
//--- 小数点后可变数位的双精度值输出
   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个有意义数位的科学(浮点)格式双精度值输出
   PrintFormat("DBL_MAX = %.17e",DBL_MAX);
//--- 小数点后17个有意义数位的科学(浮点)格式双精度值输出
   PrintFormat("EMPTY_VALUE = %.17e",EMPTY_VALUE);
//--- 以默认精度使用PrintFormat()输出
   PrintFormat("PrintFormat(EMPTY_VALUE) = %e",EMPTY_VALUE);
//--- 使用Print()简单输出
   Print("Print(EMPTY_VALUE) = ",EMPTY_VALUE);
/* 执行结果
   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真实类型(双精度,浮点)