Hằng số giá
Việc tính toán các chỉ báo kỹ thuật yêu cầu giá trị giá và/hoặc giá trị khối lượng, dựa trên đó các phép tính sẽ được thực hiện. Có 7 định danh được định nghĩa sẵn từ liệt kê ENUM_APPLIED_PRICE
, được sử dụng để chỉ định cơ sở giá mong muốn cho các phép tính.
ENUM_APPLIED_PRICE
ID | Mô tả |
---|---|
PRICE_CLOSE | Giá đóng cửa |
PRICE_OPEN | Giá mở cửa |
PRICE_HIGH | Giá cao nhất trong kỳ |
PRICE_LOW | Giá thấp nhất trong kỳ |
PRICE_MEDIAN | Giá trung vị, (cao + thấp)/2 |
PRICE_TYPICAL | Giá điển hình, (cao + thấp + đóng)/3 |
PRICE_WEIGHTED | Giá trung bình, (cao + thấp + đóng + đóng)/4 |
Nếu khối lượng được sử dụng trong tính toán, cần chỉ định một trong hai giá trị từ liệt kê ENUM_APPLIED_VOLUME
.
ENUM_APPLIED_VOLUME
ID | Mô tả |
---|---|
VOLUME_TICK | Khối lượng tick |
VOLUME_REAL | Khối lượng giao dịch |
Chỉ báo kỹ thuật iStochastic() có thể được tính toán theo hai cách sử dụng:
- Hoặc chỉ sử dụng giá đóng cửa;
- Hoặc giá cao và thấp.
Để chọn một biến thể cần thiết cho tính toán, hãy chỉ định một trong các giá trị của liệt kê ENUM_STO_PRICE
.
ENUM_STO_PRICE
ID | Mô tả |
---|---|
STO_LOWHIGH | Tính toán dựa trên giá thấp/cao |
STO_CLOSECLOSE | Tính toán dựa trên giá đóng/đóng |
Nếu một chỉ báo kỹ thuật sử dụng dữ liệu giá để tính toán, loại dữ liệu được thiết lập bởi ENUM_APPLIED_PRICE
, thì handle của bất kỳ chỉ báo nào (được tích hợp trong terminal hoặc do người dùng viết) có thể được sử dụng làm chuỗi giá đầu vào. Trong trường hợp này, các giá trị của bộ đệm số không của chỉ báo sẽ được sử dụng cho các phép tính. Điều này giúp dễ dàng xây dựng giá trị của một chỉ báo bằng cách sử dụng giá trị của một chỉ báo khác. Handle của một chỉ báo tùy chỉnh được tạo bằng cách gọi hàm iCustom().
Ví dụ:
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 2
//--- input parameters
input int RSIperiod=14; // Chu kỳ để tính RSI
input int Smooth=8; // Chu kỳ làm mịn RSI
input ENUM_MA_METHOD meth=`MODE_SMMA`; // Phương pháp làm mịn
//---- plot RSI
#property indicator_label1 "RSI"
#property indicator_type1 `DRAW_LINE`
#property indicator_color1 `clrRed`
#property indicator_style1 `STYLE_SOLID`
#property indicator_width1 1
//---- plot RSI_Smoothed
#property indicator_label2 "RSI_Smoothed"
#property indicator_type2 `DRAW_LINE`
#property indicator_color2 `clrNavy`
#property indicator_style2 `STYLE_SOLID`
#property indicator_width2 1
//--- indicator buffers
double RSIBuffer[]; // Nơi lưu trữ giá trị của RSI
double RSI_SmoothedBuffer[]; // Nơi lưu trữ giá trị RSI đã được làm mịn
int RSIhandle; // Handle tới chỉ báo RSI
//+------------------------------------------------------------------+
//| Hàm khởi tạo chỉ báo tùy chỉnh |
//+------------------------------------------------------------------+
void OnInit()
{
//--- ánh xạ bộ đệm chỉ báo
`SetIndexBuffer`(0,RSIBuffer,`INDICATOR_DATA`);
`SetIndexBuffer`(1,RSI_SmoothedBuffer,`INDICATOR_DATA`);
`IndicatorSetString`(`INDICATOR_SHORTNAME`,"iRSI");
`IndicatorSetInteger`(`INDICATOR_DIGITS`,2);
//---
RSIhandle=`iRSI`(`NULL`,0,RSIperiod,`PRICE_CLOSE`);
//---
}
//+------------------------------------------------------------------+
//| Hàm lặp chỉ báo tùy chỉnh |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[]
)
{
//--- Đặt lại giá trị của lỗi cuối cùng
`ResetLastError`();
//--- Lấy dữ liệu chỉ báo RSI vào mảng RSIBuffer []
int copied=`CopyBuffer`(RSIhandle,0,0,rates_total,RSIBuffer);
if(copied<=0)
{
`Print`("Không thể sao chép giá trị của chỉ báo RSI. Lỗi = ",
`GetLastError`(),", copied =",copied);
return(0);
}
//--- Tạo chỉ báo giá trị trung bình bằng cách sử dụng giá trị của RSI
int RSI_MA_handle=`iMA`(`NULL`,0,Smooth,0,meth,RSIhandle);
copied=`CopyBuffer`(RSI_MA_handle,0,0,rates_total,RSI_SmoothedBuffer);
if(copied<=0)
{
`Print`("Không thể sao chép chỉ báo RSI đã làm mịn. Lỗi = ",
`GetLastError`(),", copied =",copied);
return(0);
}
//--- trả về giá trị của prev_calculated cho lần gọi tiếp theo
return(rates_total);
}
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