Print
Hàm này ghi một thông điệp vào nhật ký của Expert Advisor. Các tham số có thể thuộc bất kỳ loại nào.
void Print(
argument, // giá trị đầu tiên
... // các giá trị tiếp theo
);
2
3
4
Tham số
...
[truyền vào] Bất kỳ giá trị nào được phân tách bằng dấu phẩy. Số lượng tham số không được vượt quá 64.
Ghi chú
Mảng không thể được truyền vào hàm Print()
. Mảng phải được nhập từng phần tử một.
Dữ liệu kiểu double
được hiển thị với độ chính xác lên đến 16 chữ số sau dấu chấm thập phân và có thể được xuất ra theo định dạng truyền thống hoặc định dạng khoa học, tùy thuộc vào cách nhập nào sẽ gọn hơn. Dữ liệu kiểu float
được xuất ra với 5 chữ số sau dấu chấm thập phân. Để xuất số thực với độ chính xác khác hoặc theo định dạng đã xác định trước, hãy sử dụng hàm PrintFormat()
.
Dữ liệu kiểu bool
được xuất ra dưới dạng chuỗi "true" hoặc "false". Ngày tháng được hiển thị dưới dạng YYYY.MM.DD HH:MI:SS. Để hiển thị dữ liệu theo định dạng khác, hãy sử dụng TimeToString()
. Dữ liệu kiểu color
được trả về dưới dạng chuỗi R,G,B hoặc tên màu, nếu màu đó có trong tập hợp màu.
Hàm Print()
không hoạt động trong quá trình tối ưu hóa trong Strategy Tester.
Ví dụ:
void OnStart()
{
//--- Xuất DBL_MAX bằng Print(), điều này tương đương với PrintFormat(%.16G,DBL_MAX)
Print("---- DBL_MAX trông như thế nào -----");
Print("Print(DBL_MAX)=",DBL_MAX);
//--- Bây giờ xuất số DBL_MAX bằng PrintFormat()
PrintFormat("PrintFormat(%.16G,DBL_MAX)=%.16G",DBL_MAX);
//--- Xuất ra nhật ký Experts
// Print(DBL_MAX)=1.797693134862316e+308
// PrintFormat(%.16G,DBL_MAX)=1.797693134862316E+308
//--- Xem cách xuất float
float c=(float)M_PI; // Chúng ta cần ép kiểu rõ ràng sang kiểu đích
Print("c=",c, " Pi=",M_PI, " (float)M_PI=",(float)M_PI);
// c=3.14159 Pi=3.141592653589793 (float)M_PI=3.14159
//--- Hiển thị điều gì có thể xảy ra với các phép toán số học với kiểu thực
double a=7,b=200;
Print("---- Trước khi thực hiện phép toán số học");
Print("a=",a," b=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- Chia a cho b (7/200)
a=a/b;
//--- Bây giờ mô phỏng khôi phục giá trị trong biến b
b=7.0/a; // Dự kiến b=7.0/(7.0/200.0)=>7.0/7.0*200.0=200 - nhưng nó khác
//--- Xuất giá trị mới tính toán của b
Print("----- Sau khi thực hiện phép toán số học");
Print("Print(b)=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- Xuất ra nhật ký Experts
// Print(b)=200.0
// Print(DoubleToString(b,16))=199.9999999999999716 (thấy rằng b không còn bằng 200.0 nữa)
//--- Tạo một giá trị rất nhỏ epsilon=1E-013
double epsilon=1e-13;
Print("---- Tạo một giá trị rất nhỏ");
Print("epsilon=",epsilon); // Nhận epsilon=1E-013
//--- Bây giờ trừ epsilon khỏi b và lại xuất giá trị ra nhật ký Experts
b=b-epsilon;
//--- Sử dụng hai cách
Print("---- Sau khi trừ epsilon khỏi biến b");
Print("Print(b)=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- Xuất ra nhật ký Experts
// Print(b)=199.9999999999999 (bây giờ giá trị của b sau khi trừ epsilon không thể được làm tròn thành 200)
// Print(DoubleToString(b,16))=199.9999999999998578
// (bây giờ giá trị của b sau khi trừ epsilon không thể được làm tròn thành 200)
}
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