Hạn chế và ưu điểm của chỉ số
Tất cả các hàm chuyên dụng được thảo luận trong chương này chỉ khả dụng trong mã nguồn của chỉ số. Việc sử dụng chúng trong các loại chương trình MQL khác là vô nghĩa: chúng sẽ trả về lỗi.
Có các hàm khác bị cấm trong chỉ số:
OrderCalcMargin
OrderCalcProfit
OrderCheck
OrderSend
SendFTP
WebRequest
Socket***
Sleep
MessageBox
ExpertRemove
Một số trong số chúng (có tiền tố Order
-) liên quan đến các tính toán giao dịch và chỉ được phép trong Expert Advisors và scripts. Những hàm khác được thiết kế để thực hiện các yêu cầu chặn luồng thực thi cho đến khi kết quả được trả về, trong khi điều này không được phép đối với các chỉ số vì chúng được thực thi trong luồng giao diện của terminal. Vì lý do tương tự, các hàm Sleep
và MessageBox
cũng bị cấm.
Các chỉ số chủ yếu chịu trách nhiệm trực quan hóa dữ liệu và, kỳ lạ thay, không phù hợp cho các tính toán lớn. Đặc biệt, nếu bạn quyết định tạo một chỉ số huấn luyện mạng nơ-ron hoặc cây quyết định trong quá trình này, điều này rất có thể sẽ ảnh hưởng tiêu cực đến hoạt động bình thường của terminal.
Hiệu ứng của một tính toán kéo dài được thể hiện qua chỉ số IndBarIndex.mq5
, trong chế độ bình thường được thiết kế để hiển thị số thứ tự thanh trong các phần tử của bộ đệm của nó. Tuy nhiên, sử dụng tham số đầu vào SimulateCalculation
, được đặt thành true
, bạn có thể khởi động một vòng lặp vô hạn trên bộ đếm thời gian.
// Đặt thành true sẽ làm đóng băng việc vẽ các chỉ số
// trên các biểu đồ của cùng ký hiệu đang hoạt động
// Chú ý! Đừng quên xóa chỉ số sau thí nghiệm!
input bool SimulateCalculation = false;
void OnInit()
{
...
if(SimulateCalculation)
{
EventSetTimer(1);
}
}
...
void OnTimer()
{
Comment("Calculation started at ", TimeLocal());
while(!IsStopped())
{
// vòng lặp vô hạn để mô phỏng tính toán
}
Comment("");
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Trong chế độ này, như dự đoán, chỉ số bắt đầu chiếm hoàn toàn 1 lõi xử lý, nhưng một tác dụng phụ khác cũng xuất hiện. Bất kỳ chỉ số nào trên cùng ký hiệu mà IndBarIndex
được đặt sẽ ngừng cập nhật. Ví dụ, chúng ta có thể chạy IndBarIndex
trên EURUSD (bất kỳ khung thời gian nào), và sau đó trên bất kỳ biểu đồ EURUSD nào khác, bạn có thể thử áp dụng một đường trung bình động thông thường: nó sẽ không được hiển thị cho đến khi bạn xóa IndBarIndex
khỏi biểu đồ đầu tiên.
Về vấn đề này, tất cả các tính toán kéo dài nên được đặt trong các luồng riêng biệt, tức là scripts hoặc Expert Advisors không giao dịch, và chỉ kết quả của chúng nên được sử dụng trong các chỉ số. API MQL5 cho phép tạo các biểu đồ mới hoặc đối tượng với biểu đồ, trong đó có thể áp dụng mẫu tpl với Expert Advisor hoặc script cần thiết.