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);
   /*
   1EURUSD
   2EUR
   3EURU
   /

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