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
数据大小说明,以参量传递。
| 参量类型 | 使用前缀 | 类型共同说明符 |
|---|---|---|
| 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
*/
}