PrintFormat
Hàm này định dạng và ghi các tập hợp ký hiệu và giá trị vào nhật ký của Expert Advisor theo một định dạng được thiết lập trước.
void PrintFormat(
string format_string, // chuỗi định dạng
... // các giá trị của kiểu đơn giản
);
2
3
4
Tham số
format_string
[truyền vào] Một chuỗi định dạng bao gồm các ký hiệu đơn giản, và nếu chuỗi định dạng được theo sau bởi các đối số, nó cũng chứa các đặc tả định dạng.
...
[truyền vào] Bất kỳ giá trị nào của các kiểu đơn giản được phân tách bằng dấu phẩy. Tổng số tham số không được vượt quá 64, bao gồm chuỗi định dạng.
Giá trị trả về
Chuỗi.
Ghi chú
Hàm PrintFormat()
không hoạt động trong quá trình tối ưu hóa trong Strategy Tester.
Số lượng, thứ tự và kiểu của các tham số phải khớp chính xác với tập hợp các bộ định dạng, nếu không kết quả in sẽ không xác định. Thay vì PrintFormat()
, bạn có thể sử dụng printf()
.
Nếu chuỗi định dạng được theo sau bởi các tham số, chuỗi này phải chứa các đặc tả định dạng biểu thị định dạng xuất của các tham số đó. Đặc tả định dạng luôn bắt đầu bằng dấu phần trăm (%).
Chuỗi định dạng được đọc từ trái sang phải. Khi gặp đặc tả định dạng đầu tiên (nếu có), giá trị của tham số đầu tiên sau chuỗi định dạng được chuyển đổi và xuất ra theo đặc tả đã đặt trước. Đặc tả định dạng thứ hai gọi chuyển đổi và xuất ra tham số thứ hai, và cứ tiếp tục như vậy cho đến khi chuỗi định dạng kết thúc.
Đặc tả định dạng có dạng sau:
%[flags][width][.precision][{h | l | ll | I32 | I64}]type
Mỗi trường của đặc tả định dạng là một ký hiệu đơn giản hoặc một số biểu thị tùy chọn định dạng đơn giản. Đặc tả định dạng đơn giản nhất chỉ chứa dấu phần trăm (%) và một ký hiệu xác định kiểu của tham số xuất (ví dụ: %s). Nếu cần xuất dấu phần trăm trong chuỗi định dạng, sử dụng đặc tả định dạng %%.
flags
Flag | Mô tả | Hành vi mặc định |
---|---|---|
– (minus) | Canh lề trái trong độ rộng đã đặt | Canh lề phải |
+ (plus) | Xuất dấu + hoặc - cho các giá trị của kiểu có dấu | Dấu chỉ hiển thị nếu giá trị âm |
0 (zero) | Thêm số 0 trước giá trị xuất trong độ rộng đã đặt. Nếu cờ 0 được chỉ định với định dạng số nguyên (i , u , x , X , o , d ) và đặc tả độ chính xác được đặt (ví dụ: %04.d), thì 0 bị bỏ qua | Không thêm gì |
space | Hiển thị một khoảng trắng trước giá trị xuất, nếu là giá trị có dấu và dương | Không chèn khoảng trắng |
# | Nếu dùng với định dạng o , x hoặc X , thì thêm 0, 0x hoặc 0X trước giá trị xuất tương ứng | Không thêm gì |
Nếu dùng với định dạng e , E , a hoặc A , giá trị luôn hiển thị với dấu chấm thập phân | Dấu chấm thập phân chỉ hiển thị nếu có phần thập phân khác 0 | |
Nếu dùng với định dạng g hoặc G , cờ xác định sự hiện diện của dấu chấm thập phân trong giá trị xuất và ngăn việc cắt bỏ các số 0 đầu. Cờ # bị bỏ qua khi dùng với định dạng c , d , i , u , s | Dấu chấm thập phân chỉ hiển thị nếu có phần thập phân khác 0. Các số 0 đầu bị cắt bỏ |
width
Một số thập phân không âm xác định số ký hiệu tối thiểu của giá trị được định dạng. Nếu số ký hiệu xuất ít hơn độ rộng đã chỉ định, số khoảng trắng tương ứng được thêm vào từ bên trái hoặc phải tùy thuộc vào căn lề (cờ –). Nếu có cờ số 0 (0
), số 0 tương ứng được thêm trước giá trị xuất. Nếu số ký hiệu xuất lớn hơn độ rộng đã chỉ định, giá trị xuất không bao giờ bị cắt bỏ.
Nếu một dấu sao (*) được chỉ định làm độ rộng, giá trị kiểu int
phải được chỉ ra ở vị trí tương ứng trong danh sách các tham số được truyền. Nó sẽ được sử dụng để chỉ định độ rộng của giá trị xuất.
precision
Một số thập phân không âm xác định độ chính xác xuất - số chữ số sau dấu chấm thập phân. Khác với đặc tả độ rộng, đặc tả độ chính xác có thể cắt bỏ phần của kiểu phân số với hoặc không làm tròn.
Việc sử dụng đặc tả độ chính xác khác nhau đối với các kiểu định dạng khác nhau.
Kiểu | Mô tả | Hành vi mặc định |
---|---|---|
a, A | Đặc tả độ chính xác đặt số chữ số sau dấu chấm thập phân | Độ chính xác mặc định – 6 |
c, C | Không sử dụng | |
d, i, u, o, x, X | Đặt số chữ số xuất tối thiểu. Nếu số chữ số trong tham số tương ứng ít hơn độ chính xác này, số 0 được thêm vào bên trái giá trị xuất. Giá trị xuất không bị cắt bỏ nếu số chữ số xuất lớn hơn độ chính xác đã chỉ định | Độ chính xác mặc định – 1 |
e, E, f | Đặt số chữ số xuất sau dấu chấm thập phân. Chữ số cuối cùng được làm tròn | Độ chính xác mặc định – 6. Nếu độ chính xác đặt là 0 hoặc phần thập phân không có, dấu chấm thập phân không hiển thị |
g, G | Đặt số lượng tối đa các số có nghĩa | 6 số có nghĩa được xuất |
s | Đặt số ký hiệu xuất của chuỗi. Nếu độ dài chuỗi vượt quá độ chính xác, chuỗi bị cắt bỏ | Toàn bộ chuỗi được xuất |
PrintFormat("1. %s", _Symbol);
PrintFormat("2. %.3s", _Symbol);
int length=4;
PrintFormat("3. %.*s", length, _Symbol);
/*
1. EURUSD
2. EUR
3. EURU
*/
2
3
4
5
6
7
8
9
h | l | ll | I32 | I64
Đặc tả kích thước dữ liệu, được truyền dưới dạng tham số.
Kiểu tham số | Tiền tố sử dụng | Bộ định dạng kiểu kết hợp |
---|---|---|
int | l (chữ L thường) | d, i, o, x, hoặc X |
uint | l (chữ L thường) | o, u, x, hoặc X |
long | ll (hai chữ L thường) | d, i, o, x, hoặc X |
short | h | d, i, o, x, hoặc X |
ushort | h | o, u, x, hoặc X |
int | I32 | d, i, o, x, hoặc X |
uint | I32 | o, u, x, hoặc X |
long | I64 | d, i, o, x, hoặc X |
ulong | I64 | o, u, x, hoặc X |
type
Bộ định dạng kiểu là trường bắt buộc duy nhất cho xuất định dạng.
Ký hiệu | Kiểu | Định dạng xuất |
---|---|---|
c | int | Ký hiệu kiểu short (Unicode) |
C | int | Ký hiệu kiểu char (ANSI) |
d | int | Số nguyên thập phân có dấu |
i | int | Số nguyên thập phân có dấu |
o | int | Số nguyên bát phân không dấu |
u | int | Số nguyên thập phân không dấu |
x | int | Số nguyên thập lục phân không dấu, sử dụng "abcdef" |
X | int | Số nguyên thập lục phân không dấu, sử dụng "ABCDEF" |
e | double | Giá trị thực trong định dạng [-] d.dddde[dấu] ddd, trong đó d - một chữ số thập phân, dddd - một hoặc nhiều chữ số thập phân, ddd - số ba chữ số xác định kích thước lũy thừa, dấu - cộng hoặc trừ |
E | double | Tương tự định dạng e, nhưng dấu của lũy thừa được xuất bằng chữ cái in hoa (E thay vì e) |
f | double | Giá trị thực trong định dạng [-] dddd.dddd, trong đó dddd - một hoặc nhiều chữ số thập phân. Số chữ số hiển thị trước dấu chấm thập phân phụ thuộc vào kích thước giá trị số. Số chữ số sau dấu chấm thập phân phụ thuộc vào độ chính xác yêu cầu |
g | double | Giá trị thực xuất ở định dạng f hoặc e tùy thuộc vào định dạng nào gọn hơn |
G | double | Giá trị thực xuất ở định dạng F hoặc E tùy thuộc vào định dạng nào gọn hơn |
a | double | Số thực trong định dạng [−]0xh.hhhh p ±dd, trong đó h.hhhh – mantissa dưới dạng chữ số thập lục phân, sử dụng "abcdef", dd - Một hoặc nhiều chữ số của lũy thừa. Số chữ số thập phân được xác định bởi đặc tả độ chính xác |
A | double | Số thực trong định dạng [−]0xh.hhhh P ±dd, trong đó h.hhhh – mantissa dưới dạng chữ số thập lục phân, sử dụng "ABCDEF", dd - Một hoặc nhiều chữ số của lũy thừa. Số chữ số thập phân được xác định bởi đặc tả độ chính xác |
s | string | Xuất chuỗi |
Thay vì PrintFormat()
, bạn có thể sử dụng printf()
.
Ví dụ:
void OnStart()
{
//--- tên máy chủ giao dịch
string server=AccountInfoString(ACCOUNT_SERVER);
//--- số tài khoản
int login=(int)AccountInfoInteger(ACCOUNT_LOGIN);
//--- xuất giá trị long
long leverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
PrintFormat("%s %d: leverage = 1:%I64d",
server,login,leverage);
//--- tiền tệ tài khoản
string currency=AccountInfoString(ACCOUNT_CURRENCY);
//--- xuất giá trị double với 2 chữ số sau dấu chấm thập phân
double equity=AccountInfoDouble(ACCOUNT_EQUITY);
PrintFormat("%s %d: account equity = %.2f %s",
server,login,equity,currency);
//--- xuất giá trị double với xuất bắt buộc dấu +/-
double profit=AccountInfoDouble(ACCOUNT_PROFIT);
PrintFormat("%s %d: current result for open positions = %+.2f %s",
server,login,profit,currency);
//--- xuất giá trị double với số chữ số sau dấu chấm thập phân biến đổi
double point_value=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
string format_string=StringFormat("%s: point value = %.%df",_Digits);
PrintFormat(format_string,_Symbol,point_value);
//--- xuất giá trị int
int spread=(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
PrintFormat("%s: current spread in points = %d ",
_Symbol,spread);
//--- xuất giá trị double trong định dạng khoa học (điểm nổi) với 17 chữ số có nghĩa sau dấu chấm thập phân
PrintFormat("DBL_MAX = %.17e",DBL_MAX);
//--- xuất giá trị double trong định dạng khoa học (điểm nổi) với 17 chữ số có nghĩa sau dấu chấm thập phân
PrintFormat("EMPTY_VALUE = %.17e",EMPTY_VALUE);
//--- xuất sử dụng PrintFormat() với độ chính xác mặc định
PrintFormat("PrintFormat(EMPTY_VALUE) = %e",EMPTY_VALUE);
//--- xuất đơn giản sử dụng Print()
Print("Print(EMPTY_VALUE) = ",EMPTY_VALUE);
/* kết quả thực thi
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
*/
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Xem thêm