Trong bài viết trước, chúng tôi đã giới thiệu cho bạn quy trình chuyển đổi chỉ báo tùy chỉnh thành chức năng iCustom, đây là bước cần thiết đầu tiên trước khi triển khai nó lên Expert Advisor. Chúng tôi xác định 6 tham số khác nhau của hàm iCustom, đặc biệt chú ý đến ba tham số cuối: tham số chỉ báo, chế độ và Shift.
Chúng tôi đã sử dụng ví dụ về chuyển đổi chỉ báo tùy chỉnh phức tạp NonLagMA_7.1 thành hàm chỉ báo iCustom và chỉ cho bạn cách tìm các tham số và mẫu chỉ báo của nó Quá trình khám phá suy diễn .
Trước đây, trong cuộc thảo luận Khi thực hiện một số công việc thám tử để khám phá các tham số chế độ (đường/tín hiệu) cho tính năng iCustom, tôi đã chỉ ra rằng biểu dữ liệu được đánh dấu màu đỏ cung cấp manh mối trực quan. Chúng tôi suy ra rằng NonLagMA là chế độ đầu tiên được biểu thị bằng chính đường đó (mode=0), Up là chế độ thứ hai được biểu thị bằng đường màu xanh lam (mode =1) và Dn là chế độ thứ ba được biểu thị bằng (mode = 2) Đường màu đỏ . Chế độ thứ tư của xu hướng (mode = 3) không được thể hiện trực quan ở đây, nhưng nó được thể hiện trong chính mã, logic là nếu xu hướng == 1 thì xu hướng tăng, nếu xu hướng = -1 thì xu hướng giảm .
Bây giờ bạn đã có cái nhìn tổng quan NonLagMA Bốn chế độ chỉ báo tùy chỉnh, bạn có thể tạo ít nhất ba loại chuyên gia cố vấn theo các chế độ khác nhau:
Với chính dòng MA ( Mode=0) Các EA làm việc cùng nhau, giống như hình chữ thập.
EA được sử dụng kết hợp với đường màu xanh hướng lên (Mode=1) và đường màu đỏ Dn (Mode=2) mua khi NonLagMA chuyển sang màu xanh. khi nó chuyển sang màu đỏ.
Sử dụng EA có tín hiệu xu hướng (Chế độ=3) để mua khi xu hướng tăng và bán khi xu hướng giảm.
Cả ba EA sẽ có chung các biến bên ngoài:
Giá bên ngoài = 0 ;
Độ dài bên ngoài = 150;
Độ dịch chuyển int bên ngoài = 0; //DispLace hoặc Shift
PctFilter kép bên ngoài = 0; //Bộ lọc động thập phân< /p>
Màu bên ngoài = 1; //Chuyển đổi chế độ màu (1 màu)
Int bên ngoài ColorBarBack = 1; //Quay lại chế độ màu
Độ lệch kép bên ngoài = 0; //Độ lệch trên/dưới
Chế độ cảnh báo bên ngoài = 0; //Công tắc cảnh báo bằng âm thanh (0 tắt, 1 bật)
External int WarningMode = 0 ; // Công tắc cảnh báo âm thanh (0-off, 1-on)
Chuyển đổi bên ngoài = 1;
Tôi đã ở bài viết trước Quá trình Việc khám phá các thông số chỉ báo trên đã được xem xét trong bài viết, nhưng tôi sẽ quay lại vấn đề đó. Cách đơn giản nhất là sao chép và dán các biến bên ngoài từ mã nguồn chỉ báo vào Expert Advisor, sau đó điền vào chỉ báo chức năng iCustom các mã định danh ở trên để chúng nằm sau tham số thứ ba (tên chỉ báo) và hai tham số cuối cùng (chế độ và dịch chuyển).
Vì vậy, bạn sẽ chuyển đổi chỉ báo iCustom của mình từ:
Double ma = iCustom (NULL,0,"NonLagMA_v7.1",0 ,0,Shift );
Đối với điều này:
double ma = iCustom ( NULL, 0, "NonLagMA_v7.1", Giá, Độ dài, Dịch chuyển, PctFilter, Màu sắc, ColorBarBack, Độ lệch, AlertMode, WarningMode, 0, Shift).
Lưu ý: Mặc dù chỉ báo cụ thể này có 9 thông số chỉ báo, nhưng cần lưu ý rằng thông số quan trọng nhất là độ dài. Giống như đường trung bình động, việc thay đổi độ dài sẽ thay đổi cấu trúc cơ bản của NonLagMA. Các tham số khác có thể để ở giá trị mặc định là 0.
NonLagMA EA #1: Sử dụng tín hiệu đường MA (mode = 0)
Giao nhau giữa các đường trung bình động không trễ
Ý định //Mua: Khi giá đóng cửa vượt quá NonLagMA
//Bán: Khi giá đóng cửa thấp hơn NonLagMA
Chỉ báo< /p>
Gọi dòng điện kép = iCustom(NULL, 0, “NonLagMA_v7.1”, Giá, Độ dài, Dịch chuyển, PctFilter, Màu sắc, ColorBarBack, Độ lệch, AlertMode, WarningMode, 0,Shift).
double maprevious = iCustom(NULL, 0, "NonLagMA_v7.1", Price,FastLen,Displace, PctFilter, Color, ColorBarBack, Độ lệch, AlertMode, WarningMode, 0,Shift+1).
Double close_current = iClose (NULL,0,Shift);
double close_previous = iClose (NULL,0,Shift+1) ;
BuyCond if (close_current >= macurrent && close_previous <= maprevious)
SellCond if (close_current < = macurrent && close_previous >= maprevious)
Giải thích:
Đây rồi là Không còn lời giải thích nào nữa. Chúng tôi sử dụng điểm giao nhau NonLagMA này giống như cách chúng tôi thực hiện điểm giao nhau MA. Người ta có thể biểu thị mức NonLagMA nhanh vượt qua/dưới NonLagMA chậm, nhưng vì mục đích minh họa, tôi sẽ chỉ biểu thị mức đóng hiện tại bên dưới/trên NonLagMA. Kết quả cuối cùng sẽ ít nhiều giống nhau.
Trong lệnh gọi chỉ báo, xin lưu ý rằng tham số chế độ của chức năng chỉ báo iCustom của tôi (từ giây đến cuối) được đặt thành 0. Như chúng ta đã thấy ở trên, 0 đề cập đến chính dòng NonLagMA.
Xin lưu ý rằng khi tôi biểu thị giá đóng hiện tại và giá đóng trước đó, tôi sử dụng chức năng iClose. Hàm iClose rất hữu ích nếu bạn muốn sử dụng giá đóng cửa với phạm vi thời gian, ký hiệu tiền tệ hoặc giá trị bù đắp khác. Nếu bạn sử dụng Đóng hoặc Giá thầu, bạn chỉ đề cập đến giá hiện tại của biểu tượng hiện tại. Trong trường hợp của tôi, tôi muốn sử dụng các giá trị dịch chuyển khác nhau, giá đóng cửa hiện tại (Shift) và giá đóng cửa trước đó (Shift+1), vì vậy tôi cần xây dựng một phương thức có tên là biến close_current = iClose (NULL,0,Shift) và một biến biến có tên close_previous = iClose (NULL,0,Shift+1).
NonLagMA EA #2: Thay đổi màu xanh UP và đỏ Dn (chế độ 1 và 3)
Màu đường NonLagMA thay đổi
Ý định // Mua: Khi dòng hiện tại Khi đường màu xanh và đường trước màu đỏ
//Bán: Khi đường hiện tại giảm và đường màu đỏ và đường trước đó tăng và đường màu xanh
Chỉ báo
< p >Gọi gấp đôi buy_macurrent = iCustom(NULL, 0, "NonLagMA_v7.1", Price, FastLen, Displace, PctFilter, Color, ColorBarBack, Độ lệch, AlertMode, WarningMode, 1, Shift).double buy_maprevious = iCustom(NULL, 0, "NonLagMA_v7.1", Price, FastLen, Displace, PctFilter, Color, ColorBarBack, Độ lệch, AlertMode, WarningMode, 1, Shift+1).
double sell_macurrent = iCustom(NULL, 0, “NonLagMA_v7.1”, Giá, FastLen, Displace, PctFilter, Color, ColorBarBack, Độ lệch, AlertMode, WarningMode , 2, Ca).
double sell_maprevious = iCustom(NULL, 0, “NonLagMA_v7.1”, Giá, FastLen, Displace, PctFilter, Color, ColorBarBack, Độ lệch, AlertMode, WarningMode , 2,Shift+1).
BuyCond nếu (sell_maprevious!=EMPTY_VALUE && sell_macurrent==EMPTY_VALUE && buy_macurrent!=EMPTY_VALUE)
SellCond if(buy_maprevious!=EMPTY_VALUE && buy_macurrrent==EMPTY_VALUE && sell_macurrent!=EMPTY_VALUE)
Giải thích:
Trong phần gọi chỉ báo, bạn sẽ thấy các biến được tạo cho buy_ma (đường màu xanh) và sell_ma (đường màu đỏ), với phiên bản hiện tại và trước đó của từng biến được tạo bằng cách đặt chênh lệch trong tham số cuối cùng Shift:current (Shift ) và trước đó (Shift+1). Sự khác biệt giữa buy_ma và sell_ma là tham số áp chót, là tham số chế độ. Chế độ của buy_ma là 1, như chúng tôi thấy đó là đường (UP) màu xanh lam, trong khi chế độ của sell_ma là 2, như chúng tôi thấy đó là đường (Dn) màu đỏ.
Điều đầu tiên khiến bạn thấy kỳ lạ khi nhìn thấy điều kiện đầu vào là những từ EMPTY_VALUE này và dấu chấm than. Bạn có thể gãi đầu thắc mắc tôi đã làm gì với tất cả EMPTY_VALUE.
Chà, trong nội bộ, theo cách nói của người đam mê công nghệ, EMPTY_VALUE đề cập đến một hàm:
p>
void SetIndexEmptyValue(int chỉ mục, giá trị kép)
Hàm này đặt đường vẽ thành giá trị null. Giá trị null không được vẽ hoặc hiển thị trong cửa sổ dữ liệu. Theo mặc định, giá trị trống là EMPTY_VALUE.
Trong tiếng Anh đơn giản, EMPTY_VALUE có nghĩa là cửa sổ dữ liệu không hiển thị bất kỳ thứ gì cho dòng/tín hiệu/mũi tên đó. Trong trường hợp NonLagMA, bất cứ khi nào đường có màu xanh lam, hàng UP trong cửa sổ dữ liệu hiển thị các giá trị dữ liệu chỉ báo, trong khi hàng Dn trong cửa sổ dữ liệu không hiển thị gì, giá trị trống. Ngược lại, khi dòng màu đỏ, hàng Dn trong cửa sổ dữ liệu hiển thị các giá trị dữ liệu chỉ báo, trong khi hàng Lên không hiển thị gì và trống.
Bây giờ, khi chúng tôi nói buy_macurrent = EMPTY_VALUE, chúng tôi đang cố gắng nói rằng chúng tôi hoàn toàn không cần đường màu xanh lam (chúng tôi muốn nó không có giá trị). Nếu chúng tôi nói buy_macurrent! = EMPTY_VALUE, thì dấu chấm than (!) có nghĩa là "không bắt buộc"; do đó, chúng tôi không muốn đường màu xanh lam không có giá trị, hay nói cách khác, chúng tôi muốn đường màu xanh lam được thể hiện, để có một giá trị.
Nếu chúng ta xem xét các điều kiện mua bằng tiếng Anh đơn giản, chúng ta đang nói: chúng ta sẽ mua khi đường màu đỏ trước đó thực sự tồn tại (sell_maprevious!=EMPTY_VALUE ) và bây giờ nó không tồn tại (sell_macurrent=EMPTY_VALUE) và đường màu xanh lam tồn tại (buy_macurrent!=EMPTY_VALUE).
Ngược lại, đối với điều kiện bán, chúng tôi đang nói: chúng tôi sẽ mua (buy_maprevious!=EMPTY_VALUE) khi đường màu xanh lam trước đó thực sự tồn tại và bây giờ Nó không tồn tại (buy_macurrent=EMPTY_VALUE), nhưng đường màu đỏ tồn tại (sell_macurrent!=EMPTY_VALUE).
NonLagMA EA #3: Thay đổi xu hướng (Chế độ 4)
Xu hướng trung bình di chuyển không trễ
Ý định // Mua: Khi xu hướng hiện tại tăng và xu hướng trước đó giảm
//Bán: Khi xu hướng hiện tại tăng và xu hướng trước đó giảm
Chỉ báo
Gọi double Trend_macurrent = iCustom(NULL, 0,”NonLagMA_v7 .1”, Giá,FastLen,Displace, PctFilter, Color, ColorBarBack, Độ lệch, AlertMode, WarningMode, 3,Shift).
double xu hướng_maprevious = iCustom(NULL, 0, NonLagMA_v7.1",Price,FastLen,Displace, PctFilter, Color, ColorBarBack, Độ lệch, AlertMode, WarningMode, 3,Shift+1).
BuyCond if (trend_macurrent==1 && Trend_maprevious==-1)
SellCond if (trend_macurrent==-1 && Trend_maprevious==1)
Giải thích
trend_ma và các loại trước đó trong hai EA trên Sự khác biệt giữa các phiên bản là tham số áp chót, chế độ. Chế độ là 3 và như chúng tôi đã phát hiện, nó đề cập đến tín hiệu xu hướng. Tín hiệu xu hướng không xuất hiện trong cửa sổ dữ liệu, giống như chế độ trước đó, nhưng nó sẽ xuất hiện trong mã chỉ báo:
Trend[shift]=Trend[shift+1];
< /p>
If (MABuffer[shift]-MABuffer[shift+1] > Filter) xu hướng[shift]= 1;
If (MABuffer[shift+1]-MABuffer[shift] > Bộ lọc ) xu hướng[shift]=-1;
Mã này tính toán xu hướng được hình thành như thế nào. Trong tiếng Anh đơn giản, nếu xu hướng = 1 , xu hướng dài, nếu xu hướng = -1 thì xu hướng đang ở trạng thái bán.
Việc đặt nội dung trên vào điều kiện vào lệnh là rất đơn giản. Để mua Đối với các điều kiện, tôi chỉ cần nói rằng tôi muốn xu hướng hiện tại tăng lên (trend_current==1) và xu hướng trước đó giảm xuống (trend_previous==-1). Về điều kiện bán, tôi chỉ cần nói rằng tôi muốn xu hướng hiện tại giảm (trend_current== -1) và xu hướng trước đó là tăng (trend_previous==1).