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

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

参量类型 使用前缀 类型共同说明符
int l (小写字母 L) d, i, o, x, or X
uint l (小写字母 L) o, u, x, or X
long ll (两个小写字母 L) d, i, o, x, or X
short h d, i, o, x, or X
ushort h o, u, x, or X
int I32 d, i, o, x, or X
uint I32 o, u, x, or X
long I64 d, i, o, x, or X
ulong I64 o, u, x, or X

类型

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

符号 类型 输出格式
c int 短型交易品种(统一码)
C int 图表型交易品种(ANSI)
d int 小数整数记号
i int 小数整数记号
o int 未标签的八进制整数
u int 未标签的小数整数
x int 未标签的十六进制整数,使用"abcdef"
X int 未标签的十六进制整数,使用 "ABCDEF"
e double 在 [-] d.dddde[sign] ddd, where d-十进制数字,dddd -一位或更多小数位, ddd -三位数字觉得类型大小 格式中真值,标志-正负号
E double 与e格式相同,除了典型标志通过大写字母标出(E代替e)
f double 格式中的真值[-] dddd.dddd,dddd -一位或更多小数位数,在小数点前显示数字的数量取决于符号值的大小,小数点后的数字数量取决于需求
g double f或者e格式的输出真值取决于输出量更紧密
G double F或者E的输出真值取决于输出量更紧密
a double 格式中的实数 [−]0xh.hhhh p±dd,h.hhhh –十六进制格式的尾数,使用"abcdef",dd -一个或者更多典型数字,小数位的数量由 精确度说明 决定。
A double 格式中的实数[−]0xh.hhhh P±dd, h.hhhh-十六进制格式的尾数,使用"ABSDEF",dd -一个或者更多典型数字,小数位的数量由 精确度说明 决定。
s string 路线输出

取代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真实类型(双精度,浮点)