TesterWithdrawal
Hàm đặc biệt mô phỏng thao tác rút tiền trong quá trình kiểm tra. Có thể được sử dụng trong một số hệ thống quản lý tài sản.
cpp
bool TesterWithdrawal(
double money // số tiền cần rút
);
1
2
3
2
3
Tham số
money
[truyền vào] Số tiền cần rút (bằng loại tiền gửi).
Giá trị trả về
Nếu thành công, trả về true
, ngược lại - false
.
Ví dụ:
cpp
//--- định nghĩa
#define BALANCE_PROFIT_WITHDRAWAL 5 // giá trị lợi nhuận số dư, tại đó tiền được rút từ tài khoản trong trình kiểm tra
//--- 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; // Magic number
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
...
double balance_op_sum; // tổng số tiền của các thao tác số dư
uint balance_op_total; // số lần thực hiện thao tác số dư
//+------------------------------------------------------------------+
//| Hàm khởi tạo Expert |
//+------------------------------------------------------------------+
int OnInit()
{
...
//--- lưu giá trị số dư ban đầu
balance_prev=account.Balance();
balance_op_sum=0;
balance_op_total=0;
//--- 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 lợi nhuận số dư vượt quá số dư hiện tại theo giá trị được chỉ định trong macro BALANCE_PROFIT_WITHDRAWAL,
//--- cần rút số tiền này khỏi tài khoản. Gọi hàm TesterWithdrawal().
//--- kiểm tra lợi nhuận số dư vượt quá BALANCE_PROFIT_WITHDRAWAL
if(balance_prev!=account.Balance())
{
if(account.Balance()>balance_prev+BALANCE_PROFIT_WITHDRAWAL)
{
double profit=account.Balance()-balance_prev;
PrintFormat("Số dư tài khoản đã tăng %.2f %s. Cần rút số tiền này khỏi tài khoản.",profit,account.Currency());
if(TesterWithdrawal(profit))
{
balance_op_total++;
balance_op_sum+=profit;
balance_prev=account.Balance();
PrintFormat("Tiền đã được rút khỏi tài khoản. Số dư tài khoản: %.2f %s.",account.Balance(),account.Currency());
PrintFormat("Tổng số lần rút: %lu. Số tiền rút: %.2f %s.",balance_op_total,balance_op_sum,account.Currency());
}
/*
Kết quả:
Số dư tài khoản đã tăng 21.00 USD. Cần rút số tiền này khỏi tài khoản.
deal #13 balance -21.00 [withdrawal] done
Tiền đã được rút khỏi tài khoản. Số dư tài khoản: 10000.00 USD.
Tổng số lần rút: 1. Số tiền rút: 21.00 USD.
*/
}
}
}
//+------------------------------------------------------------------+
//| Hàm kiểm tra |
//+------------------------------------------------------------------+
double OnTester()
{
//--- đặt mức sụt giảm số dư tối đa bằng tiền làm giá trị đầu ra của trình xử lý
double ret=TesterStatistics(STAT_BALANCE_DD);
//--- hiển thị thông báo về mức sụt giảm, số lần rút và tổng số tiền rút trong nhật ký
PrintFormat("%s: Mức sụt giảm số dư tối đa bằng tiền: %.2f %s. Tổng số lần rút: %lu. Số tiền rút: %.2f %s.",__FUNCTION__,ret,account.Currency(),balance_op_total,balance_op_sum,account.Currency());
//--- trả về kết quả
return(ret);
/*
Kết quả:
OnTester: Mức sụt giảm số dư tối đa bằng tiền: 5188.50 USD. Tổng số lần rút: 2. Số tiền rút: 36.00 USD.
final balance 4867.50 USD
OnTester result 5188.5
*/
}
1
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Xem thêm