Nhu cầu của các nhà phát triển chiến lược
Tôi có thể thiết lập chênh lệch giá dừng lỗ khác nhau cho các điều kiện mở vị trí khác nhau không?
Ví dụ, mô hình truyền thống viết các điều kiện đóng không phân biệt các điều kiện mở khác nhau.
Sau đây là một đoạn mã đơn giản cho một chiến lược mở kho không phân biệt các điều kiện cổ phiếu truyền thống:
MA5^^MA(C,5);
MA10^^MA(C,10);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K..SMA(RSV,3,1);
D..SMA(K,3,1);
CROSS(MA5,MA10)||CROSS(K,D),BK;
C>HV(H,10)||C<BKPRICE-5*MINPRICE,SP;
AUTOFILTER;
Nhưng việc sử dụng lệnh phân nhóm thì khác.
Chỉ thị phân nhóm có thể được chia thành n nhóm đối với điều kiện mở bằng, vị trí mở bằng của một nhóm chỉ có thể được điều kiện bằng của một nhóm tương ứng, điều kiện bằng của các nhóm khác sẽ không được báo hiệu và không được ủy thác.
Ví dụ:
Nhóm 1 làm nhiều điều kiện
MA5^^MA(C,5);
MA10^^MA(C,10);
CROSS(MA5,MA10),BK;
CROSS(MA10,MA5),SP;
Nhóm thứ hai làm nhiều điều kiện.
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K..SMA(RSV,3,1);
D..SMA(K,3,1);
CROSS(K,D),BK;
C>HV(H,10)||C<BKPRICE-5*MINPRICE,SP;
Làm thế nào để phân biệt các nhóm điều kiện khác nhau trong cùng một mô hình?
Đầu tiên, mô hình được chia thành mô hình lọc và không lọc:
Mô hình lọc: các điều kiện mở kho khác nhau muốn thanh toán bằng các điều kiện thanh toán khác nhau, có thể thực hiện bằng cách sử dụng nhóm chỉ thị.
Mô hình không lọc: Chiến lược nhập đầu tiên khác với chiến lược đặt cược, muốn thanh toán bằng chiến lược dừng lỗ khác nhau, có thể thực hiện bằng cách sử dụng nhóm chỉ thị.
Mô hình lọc
//A组指令
A组的开多条件,BK('A');
A组的开空条件,SK('A');
A组的平多条件,SP('A');
A组的平空条件,BP('A');
//B组指令
B组的开多条件,BPK('B');
B组的开空条件,SPK('B');
B组的平多条件,SP('B');
B组的平空条件,BP('B');
AUTOFILTER;//过滤函数
Lưu ý: Phân nhóm của mô hình lọc là cần phải tham gia nhóm sau lệnh giao dịch và gộp lại bằng dấu ngoặc kép đơn. Ví dụ: BK ((‘A’)
Mô hình không lọc
//A组指令
A组的开多条件1,BK('A',2);
A组的开空条件1,SK('A',2);
A组的加多条件2,BK('A',1);
A组的加空条件2,SK('A',1);
A组的平多条件,SP('A',GROUPBKVOL('A'));
A组的平空条件,BP('A',GROUPSKVOL('A'));
//B组指令
B组的加多条件,BK('B',1);
B组的加空条件,SK('B',1);
B组的平多条件1,SP('B',GROUPBKVOL('B'));
B组的平空条件1,BP('B',GROUPSKVOL('B'));
Lưu ý: Phân nhóm của mô hình không lọc cần được thêm vào nhóm và số lần sau lệnh giao dịch, nhóm cần được gộp lại bằng một dấu ngoặc kép. Ví dụ: BK ((‘A’,2)
Mô hình lọc: lọc nhóm và sau đó là lọc tín hiệu
Bộ lọc nhóm có nghĩa là: nếu tín hiệu K đầu tiên là tín hiệu mở kho của nhóm A ((BK SK BPK SPK) thì tín hiệu K hiện tại chỉ có thể là tín hiệu bán kho của nhóm A. Nếu tín hiệu K đầu tiên là tín hiệu bán kho của nhóm A ((BP SP) thì tín hiệu K hiện tại có thể là tín hiệu mở kho của bất kỳ nhóm nào. ((Lấy tín hiệu mở kho đầu tiên theo thứ tự tín hiệu xuất hiện))
Các điều kiện mở vị thế không phân nhóm chỉ có thể được mở các điều kiện mở vị thế không phân nhóm
Bộ lọc tín hiệu là bộ lọc tín hiệu phẳng.
Bước thứ tự là:
Mô hình không lọc:
Lưu ý: Các điều kiện đóng cửa không phân nhóm chỉ có thể mở cửa các điều kiện đóng cửa không phân nhóm
Tiếp theo, chúng ta sẽ sử dụng một số ví dụ để xem các lệnh này được sắp xếp như thế nào khi viết mã.
Mô hình lọc
Phương pháp giao dịch: Xác định xu hướng bằng 20 chu kỳ và 60 chu kỳ.
Mã số:
MA20^^MA(C,20);
MA60^^MA(C,60);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;
HH:=HV(H,10);
LL:=LV(L,10);
MA20>MA60&&H>HH&&C>O,BK('A');
MA20<MA60&&L<LL&&C<O,SK('A');
L<LV(L,5)||CROSSDOWN(MA20,MA60)||C<BKPRICE-5*MINPRICE,SP('A');
H>HV(H,5)||CROSSUP(MA20,MA60)||C>SKPRICE+5*MINPRICE,BP('A');//只平A组开仓
MA20>MA60&&CROSSUP(K,D)&&C>O,BK('B');
MA20<MA60&&CROSSDOWN(K,D)&&C<O,SK('B');
C>BKPRICE+5*MINPRICE||C<BKPRICE-2*MINPRICE||C<REF(L,BARSBK),SP('B');
C<SKPRICE-5*MINPRICE||C>SKPRICE+2*MINPRICE||C>REF(H,BARSSK),BP('B');//只平B组开仓
//不同的开仓条件开仓,用不同的平仓条件,有针对性的平仓。达到不同行情试用不同策略的目的。
AUTOFILTER;
Mô hình không lọc
Phương pháp giao dịch: Cài đặt lần đầu tiên với 5 chu kỳ và 10 chu kỳ.
Mã số:
MA5^^MA(C,5);
MA10^^MA(C,10);
MA20:=MA(C,20);
MA60^^MA(C,60);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;
HH:=HV(H,10);
LL:=LV(L,10);
CROSSUP(MA5,MA10)&&BKVOL=0&&C>=O,BK('A',2);
CROSSDOWN(MA5,MA10)&&SKVOL=0&&C<=O,SK('A',2);
CROSSUP(MA5,MA60)&&ISLASTBK&&BKVOL=2,BK('A',1);
CROSSDOWN(MA5,MA60)&&ISLASTSK&&SKVOL=2,SK('A',1);
MA5>MA60&&H>HH&&ISLASTSP&&REF(GROUPBKVOL('A'),BARSSP+1)>0,BK('B',1);
MA5<MA60&&L<LL&&ISLASTBP&&REF(GROUPSKVOL('A'),BARSBP+1)>0,SK('B',1);
L<LV(L,5)||C<REF(L,BARSBK)&&(C<BKPRICE-2*MINPRICE),SP('A',GROUPBKVOL('A'));
H>HV(H,5)||C>REF(H,BARSSK)&&(C>SKPRICE+2*MINPRICE),BP('A',GROUPSKVOL('A'));
C>BKPRICE+10*MINPRICE||CROSSDOWN(MA5,MA60),SP('B',BKVOL);
C<SKPRICE-10*MINPRICE||CROSS(MA5,MA60),BP('B',SKVOL);
Dưới đây là phân tích các trường hợp cụ thể của cả hai loại mô hình, từ đó người đọc có thể thấy cách ngôn ngữ của tôi xử lý các chỉ thị phân nhóm, bạn có thể tạo các yêu cầu phân nhóm khác nhau theo logic chính sách của mình, để có thể thể hiện logic chính sách muốn thể hiện trong mã theo cách rõ ràng nhất và ít lỗi nhất có thể.