Thuộc tính của ký hiệu tùy chỉnh
Các ký hiệu tùy chỉnh có cùng thuộc tính như các ký hiệu do nhà môi giới cung cấp. Các thuộc tính được đọc bởi các hàm tiêu chuẩn đã được thảo luận trong chương về công cụ tài chính.
Các thuộc tính của ký hiệu tùy chỉnh có thể được thiết lập bởi một nhóm đặc biệt của các hàm CustomSymbolSet
, một hàm cho mỗi loại cơ bản (số nguyên, số thực, chuỗi).
bool CustomSymbolSetInteger(const string name, ENUM_SYMBOL_INFO_INTEGER property, long value)
bool CustomSymbolSetDouble(const string name, ENUM_SYMBOL_INFO_DOUBLE property, double value)
bool CustomSymbolSetString(const string name, ENUM_SYMBOL_INFO_STRING property, string value)
Các hàm này thiết lập cho một ký hiệu tùy chỉnh có tên name
một giá trị của property
thành value
. Tất cả các thuộc tính hiện có được nhóm lại thành các liệt kê ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE, ENUM_SYMBOL_INFO_STRING, đã được xem xét từng phần tử trong các phần của chương đã đề cập.
Các hàm trả về chỉ báo thành công (true
) hoặc lỗi (false
). Một vấn đề có thể xảy ra đối với lỗi là không phải tất cả các thuộc tính đều được phép thay đổi. Khi cố gắng thiết lập một thuộc tính chỉ đọc, chúng ta nhận được lỗi CUSTOM_SYMBOL_PROPERTY_WRONG (5307). Nếu bạn cố gắng ghi một giá trị không hợp lệ vào thuộc tính, bạn sẽ nhận được lỗi CUSTOM_SYMBOL_PARAMETER_ERROR (5308).
Xin lưu ý rằng lịch sử phút và tick của một ký hiệu tùy chỉnh sẽ bị xóa hoàn toàn nếu bất kỳ thuộc tính nào sau đây được thay đổi trong thông số kỹ thuật của ký hiệu:
- SYMBOL_CHART_MODE — loại giá được sử dụng để xây dựng các thanh (
Bid
hoặcLast
) - SYMBOL_DIGITS — số chữ số thập phân trong giá trị giá
- SYMBOL_POINT — giá trị của một điểm
- SYMBOL_TRADE_TICK_SIZE — giá trị của một tick, thay đổi giá tối thiểu cho phép
- SYMBOL_TRADE_TICK_VALUE — chi phí thay đổi giá mỗi tick (xem thêm SYMBOL_TRADE_TICK_VALUE_PROFIT, SYMBOL_TRADE_TICK_VALUE_LOSS)
- SYMBOL_FORMULA — công thức tính giá
Nếu một ký hiệu tùy chỉnh được tính toán bằng công thức, thì sau khi xóa lịch sử của nó, terminal sẽ tự động cố gắng tạo một lịch sử mới bằng các thuộc tính đã cập nhật. Tuy nhiên, đối với các ký hiệu được tạo lập trình, chính chương trình MQL phải đảm nhận việc tính toán lại.
Việc chỉnh sửa các thuộc tính riêng lẻ được yêu cầu nhiều nhất để sửa đổi các ký hiệu tùy chỉnh đã được tạo trước đó (sau khi chỉ định tham số thứ ba origin
trong hàm CustomSymbolCreate
tại đây).
Trong các trường hợp khác, việc thay đổi hàng loạt thuộc tính có thể gây ra các hiệu ứng tinh vi. Vấn đề là các thuộc tính được liên kết nội bộ và việc thay đổi một trong số chúng có thể yêu cầu trạng thái nhất định của các thuộc tính khác để thao tác hoàn thành thành công. Hơn nữa, việc thiết lập một số thuộc tính dẫn đến thay đổi tự động trong các thuộc tính khác.
Trong ví dụ đơn giản nhất, sau khi thiết lập thuộc tính SYMBOL_DIGITS, bạn sẽ thấy rằng thuộc tính SYMBOL_POINT cũng đã thay đổi. Dưới đây là trường hợp ít rõ ràng hơn: việc gán SYMBOL_CURRENCY_MARGIN hoặc SYMBOL_CURRENCY_PROFIT không có hiệu quả đối với các ký hiệu Forex, vì hệ thống giả định tên tiền tệ chiếm 3 chữ cái đầu tiên và 3 chữ cái tiếp theo của tên ("XXXYYY[suffix]"), tương ứng. Xin lưu ý rằng ngay sau khi tạo một ký hiệu "trống", nó được mặc định coi là ký hiệu Forex, và do đó các thuộc tính này không thể được thiết lập cho nó mà không thay đổi thị trường trước.
Khi sao chép hoặc thiết lập các thuộc tính ký hiệu, hãy lưu ý rằng nền tảng ngụ ý một số đặc thù. Đặc biệt, thuộc tính SYMBOL_TRADE_CALC_MODE có giá trị mặc định là 0 (ngay sau khi ký hiệu được tạo, nhưng trước khi bất kỳ thuộc tính nào được thiết lập), trong khi 0 trong liệt kê ENUM_SYMBOL_CALC_MODE tương ứng với thành viên SYMBOL_CALC_MODE_FOREX. Đồng thời, các quy tắc đặt tên đặc biệt được ngụ ý cho các ký hiệu Forex dưới dạng XXXYYY (nơi XXX và YYY là mã tiền tệ) cộng với một hậu tố tùy chọn. Do đó, nếu bạn không thay đổi SYMBOL_TRADE_CALC_MODE sang chế độ yêu cầu khác trước, các chuỗi con của tên ký hiệu đã chỉ định (ba ký tự đầu tiên và thứ hai) sẽ tự động rơi vào các thuộc tính của tiền tệ cơ bản (SYMBOL_CURRENCY_BASE) và tiền tệ lợi nhuận (SYMBOL_CURRENCY_PROFIT). Ví dụ, nếu bạn chỉ định tên "Dummy", nó sẽ được chia thành 2 tiền tệ giả "Dum" và "my".
Một sắc thái khác là trước khi thiết lập giá trị của SYMBOL_POINT với độ chính xác N chữ số thập phân, bạn cần đảm bảo rằng SYMBOL_DIGITS ít nhất là N.
Cuốn sách đi kèm với tập lệnh CustomSymbolProperties.mq5
, cho phép bạn thử nghiệm với việc tạo bản sao của ký hiệu của biểu đồ hiện tại và nghiên cứu các hiệu ứng kết quả trong thực tế. Đặc biệt, bạn có thể chọn tên của ký hiệu, đường dẫn của nó, và hướng đi qua (thiết lập) tất cả các thuộc tính được hỗ trợ, trực tiếp hoặc ngược lại theo số thứ tự thuộc tính trong ngôn ngữ. Tập lệnh sử dụng một lớp đặc biệt CustomSymbolMonitor
, là một trình bao bọc cho các hàm tích hợp sẵn ở trên: chúng ta sẽ mô tả nó sau.