TesterDeposit
Hàm đặc biệt mô phỏng việc nạp tiền trong quá trình kiểm tra. Nó có thể được sử dụng trong một số hệ thống quản lý tiền.
cpp
bool TesterDeposit(
double money // số tiền nạp
);
1
2
3
2
3
Tham số
money
[truyền vào] Số tiền được nạp vào tài khoản bằng loại tiền gửi.
Giá trị trả về
Trả về true
nếu thành công, ngược lại - false
.
Ví dụ:
cpp
//--- định nghĩa
#define BALANCE_LOSS_DEPOSIT 100.0 // giá trị sụt giảm số dư, tại đó tiền sẽ được nạp vào 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_dep_summ; // tổng số tiền nạp bổ sung vào số dư
uint balance_dep_total; // số lần nạp bổ sung vào số dư
//+------------------------------------------------------------------+
//| Hàm khởi tạo Expert |
//+------------------------------------------------------------------+
int OnInit()
{
...
//--- lưu giá trị số dư ban đầu
balance_prev=account.Balance();
balance_dep_summ=0;
balance_dep_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 số dư giảm quá mức được chỉ định trong macro BALANCE_LOSS_DEPOSIT,
//--- cần nạp tiền vào tài khoản và gọi hàm TesterDeposit()
//--- kiểm tra mất mát số dư vượt quá BALANCE_LOSS_DEPOSIT
if(balance_prev!=account.Balance())
{
if(account.Balance()<balance_prev-BALANCE_LOSS_DEPOSIT)
{
double loss=balance_prev-account.Balance();
PrintFormat("Số dư ban đầu %.2f %s giảm %.2f %s. Cần nạp tiền vào tài khoản %.2f %s.",balance_prev,account.Currency(),loss,account.Currency(),loss,account.Currency());
if(TesterDeposit(loss))
{
balance_dep_total++;
balance_dep_summ+=loss;
balance_prev=account.Balance();
PrintFormat("Tiền đã được nạp vào tài khoản. Số dư tài khoản: %.2f %s.",account.Balance(),account.Currency());
PrintFormat("Tổng số lần nạp: %lu. Số tiền nạp: %.2f %s.",balance_dep_total,balance_dep_summ,account.Currency());
}
/*
Kết quả:
Số dư ban đầu 10000.00 USD giảm 116.00 USD. Cần nạp tiền vào tài khoản 116.00 USD.
deal #45 balance 116.00 [deposit] done
Tiền đã được nạp vào tài khoản. Số dư tài khoản: 10000.00 USD.
Tổng số lần nạp: 1. Số tiền nạp: 116.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 nạp và tổng số tiền nạp 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 nạp: %lu. Số tiền nạp: %.2f %s.",__FUNCTION__,ret,account.Currency(),balance_dep_total,balance_dep_summ,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 nạp: 46. Số tiền nạp: 5128.50 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