TesterStop
Đưa ra lệnh hoàn thành hoạt động chương trình khi kiểm tra.
void TesterStop();
Giá trị trả về
Không có giá trị trả về.
Ghi chú
Hàm TesterStop()
được thiết kế để tắt sớm một cách thường lệ EA trên một tác nhân kiểm tra – ví dụ, khi đạt đến số lượng giao dịch thua lỗ được chỉ định hoặc mức sụt giảm vốn định trước.
Việc gọi TesterStop()
được coi là hoàn thành kiểm tra bình thường, do đó hàm OnTester()
được gọi, và toàn bộ thống kê giao dịch tích lũy cùng giá trị tiêu chí tối ưu hóa được gửi đến trình kiểm tra chiến lược.
Việc gọi ExpertRemove()
trong trình kiểm tra chiến lược cũng có nghĩa là hoàn thành kiểm tra bình thường và cho phép thu thập thống kê giao dịch, nhưng EA sẽ bị gỡ khỏi bộ nhớ của tác nhân. Trong trường hợp này, việc thực hiện một lượt kiểm tra trên tập hợp tham số tiếp theo đòi hỏi thời gian để tải lại chương trình. Do đó, TesterStop()
là lựa chọn ưu tiên cho việc hoàn thành kiểm tra sớm theo cách thường lệ.
Ví dụ:
//--- định nghĩa
#define BALANCE_LOSS_STOP 100.0 // giá trị sụt giảm số dư, tại đó việc kiểm tra bị dừng
#define EQUITY_LOSS_STOP 100.0 // giá trị sụt giảm vốn, tại đó việc kiểm tra bị dừng
//--- tham số đầu vào
input double InpLots = 0.1; // lots
input uint InpStopLoss = 50; // Stop loss tính bằng điểm
input uint InpTakeProfit = 150; // Take Profit tính bằng điểm
sinput ulong InpMagic = 123; // MagicNumber
sinput ulong InpDeviation = 5; // độ lệch
//--- biến toàn cục
CTrade trade; // thể hiện lớp giao dịch
CSymbolInfo symb; // thể hiện lớp ký hiệu
CAccountInfo account; // thể hiện lớp tài khoản giao dịch
...
//+------------------------------------------------------------------+
//| Hàm khởi tạo Expert |
//+------------------------------------------------------------------+
int OnInit()
{
...
//--- khởi tạo thành công
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Hàm tick Expert |
//+------------------------------------------------------------------+
void OnTick()
{
//--- cập nhật báo giá hiện tại
if(!symb.RefreshRates())
return;
...
//--- nếu số dư hoặc vốn đã giảm quá mức được chỉ định trong macro BALANCE_LOSS_STOP và EQUITY_LOSS_STOP,
//--- kiểm tra được coi là không thành công và hàm TesterStop() được gọi
//--- kiểm tra mất mát số dư vượt quá BALANCE_LOSS_STOP
if(balance_prev!=account.Balance())
{
if(account.Balance()<balance_prev-BALANCE_LOSS_STOP)
{
PrintFormat("Số dư ban đầu %.2f %s giảm %.2f %s, và hiện có giá trị %.2f %s. Dừng kiểm tra.",balance_prev,account.Currency(),balance_prev-account.Balance(),account.Currency(),account.Balance(),account.Currency());
TesterStop();
/*
Kết quả:
Số dư ban đầu 10000.00 USD giảm 100.10 USD, và hiện có giá trị 9899.90 USD. Dừng kiểm tra.
TesterStop() được gọi tại 9% khoảng thời gian kiểm tra
*/
}
}
//--- kiểm tra mất mát vốn vượt quá EQUITY_LOSS_STOP
if(equity_prev!=account.Equity())
{
if(account.Equity()<equity_prev-EQUITY_LOSS_STOP)
{
PrintFormat("Vốn ban đầu %.2f %s giảm %.2f %s, và hiện có giá trị %.2f %s. Dừng kiểm tra.",equity_prev,account.Currency(),equity_prev-account.Equity(),account.Currency(),account.Equity(),account.Currency());
TesterStop();
/*
Kết quả:
Vốn ban đầu 10000.00 USD giảm 100.10 USD, và hiện có giá trị 9899.90 USD. Dừng kiểm tra.
TesterStop() được gọi tại 9% khoảng thời gian kiểm tra
*/
}
}
}
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Xem thêm
Program Running
, Testing Trading Strategies
, ExpertRemove
, SetReturnError