Kebutuhan dari pengembang strategi
Apakah saya dapat mengatur perbedaan harga stop loss berdasarkan kondisi pembukaan yang berbeda?
Misalnya, model tradisional menulis kondisi posisi kosong tanpa membedakan antara kondisi posisi terbuka yang berbeda.
Kode di bawah ini adalah strategi sederhana untuk membuka posisi tanpa membedakan kondisi:
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;
Ini berbeda dengan menggunakan perintah pengelompokan
Instruksi grup dapat dibagi menjadi n kelompok untuk kondisi pembukaan, posisi terbuka untuk suatu kelompok hanya dapat diatasi oleh kondisi posisi yang sama dari kelompok tertentu, dan tidak ada sinyal atau komisi untuk memenuhi kondisi posisi yang sama dari kelompok lain.
Misalnya:
Kelompok pertama melakukan beberapa kondisi.
MA5^^MA(C,5);
MA10^^MA(C,10);
CROSS(MA5,MA10),BK;
CROSS(MA10,MA5),SP;
Kelompok kedua melakukan beberapa kondisi.
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;
Bagaimana cara membedakan kelompok kondisi yang berbeda dalam model yang sama? Mari kita implementasikan mereka.
Pertama, model dibagi menjadi model filter dan model non-filter:
Filter model: kondisi pembukaan posisi yang berbeda dengan kondisi posisi yang berbeda, dapat dilakukan dengan mengelompokkan instruksi.
Model non-filter: Strategi masuk pertama berbeda dengan strategi penambahan posisi, ingin melakukan posisi terdepan dengan strategi stop loss yang berbeda, dapat dilakukan dengan menggunakan instruksi pengelompokan.
Model filter
//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;//过滤函数
Catatan: Kelompok dalam model penyaringan perlu dimasukkan ke dalam kelompok setelah instruksi perdagangan dan dibungkus dengan tanda kutip tunggal. Misalnya BK ((‘A’)
Model non-filter
//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'));
Catatan: Kelompok dalam model non-filter perlu ditambahkan setelah instruksi perdagangan, dan kelompok harus dibungkus dengan tanda petik tunggal. Seperti BK ((‘A’,2)
Filter model: Filter kelompok dan filter sinyal
Filter kelompok adalah: jika sinyal K baris sebelumnya adalah sinyal pembukaan dari kelompok A (((BK SK BPK SPK) K baris saat ini hanya dapat menjadi sinyal penutupan dari kelompok A. Jika sinyal K baris sebelumnya adalah sinyal penutupan dari kelompok A (((BP SP) K baris saat ini dapat menjadi sinyal penutupan dari kelompok mana pun. (((Pilih sinyal penutupan pertama dalam urutan munculnya sinyal)
Kondisi posisi yang tidak terbagi hanya dapat terbagi dengan kondisi posisi terbuka yang tidak terbagi
Filter sinyal berarti: Filter sinyal yang terbuka
Urutan prioritasnya adalah:
Model non-filter:
Catatan: Kondisi posisi kosong tanpa pengelompokan hanya dapat kondisi posisi terbuka tanpa pengelompokan
Selanjutnya, kita akan melihat bagaimana perintah-perintah ini dikelompokkan ketika kita menulis kode, dengan beberapa contoh strategi.
Model filter
Metode perdagangan: dengan 20 siklus dan 60 siklus rata-rata forks linear dan forks mati sebagai kriteria untuk menilai tren.
Kode:
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;
Model non-filter
Strategi perdagangan: dengan 5 siklus dan 10 siklus rata-rata forks linear sebagai kondisi untuk pertama kali membuka posisi.
Kode:
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);
Di atas adalah analisa kasus khusus dari kedua jenis model ini, pembaca dapat melihat bagaimana bahasa saya menangani perintah pengelompokan, dan Anda dapat membuat persyaratan pengelompokan yang berbeda sesuai dengan logika kebijakan Anda sendiri, sehingga Anda dapat mengekspresikan logika kebijakan yang Anda inginkan dalam kode dengan cara yang paling jelas dan paling sedikit kesalahan.