0
fokus pada
78
Pengikut

Menulis instruksi pengelompokan dalam strategi perdagangan kuantitatif

Dibuat di: 2019-07-10 09:55:13, diperbarui pada: 2019-07-16 15:37:32
comments   0
hits   2376

Mengapa Perintah Kelompok?

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.

Cara menulis perintah pengelompokan

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)

Mekanisme operasi perintah pengelompokan

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:

  • Garis K di atas adalah BK Garis K saat ini harus menjadi SPK atau SP (SPK diutamakan dari SP, berikut sinonimnya)
  • Garis K di atas adalah SK Garis K saat ini harus BPK atau BP
  • Garis K di atas adalah BP Garis K saat ini harus BK atau SK
  • Garis K di atas adalah SP dan garis K saat ini harus BK atau SK.
  • Garis K di atas adalah BPK Garis K saat ini harus SPK atau SP
  • Garis K di atas adalah SPK Garis K saat ini harus BPK atau BP

Model non-filter:

  • Jika sinyal sebelumnya adalah sinyal pembukaan posisi yang dikeluarkan oleh kelompok A, maka sinyal berikutnya harus menjadi sinyal kenaikan posisi atau sinyal penurunan posisi dari kelompok A.
  • Jika sinyal sebelumnya adalah sinyal posisi tertutup dari kelompok A dan kelompok A memegang posisi 0, sinyal berikutnya dapat menjadi sinyal terbuka untuk kelompok manapun.
  • Jika kelompok A memegang posisi lebih besar dari 0, maka harus ada sinyal buka posisi atau sinyal tutup posisi untuk kelompok A.

Catatan: Kondisi posisi kosong tanpa pengelompokan hanya dapat kondisi posisi terbuka tanpa pengelompokan

Analisis kasus dari perintah 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.

  • Pada 20 periode rata-rata lebih besar dari 60 periode rata-rata di atas lebih banyak. Sebaliknya, kosong.
  • Dalam melakukan beberapa tren, jika harga tertinggi mencapai 10 k garis tinggi dan adalah garis matahari, tren melakukan lebih. Ketika posisi terjal, dengan titik stop loss yang lebih besar untuk menghentikan posisi terjal atau muncul rata-rata posisi terjal. melakukan shorting sebaliknya.
  • Dalam melakukan beberapa tren, jika KDJ indikator Goldfork dan Sunline, gelombang melakukan lebih. Ketika posisi terjal, dengan stop loss yang lebih kecil stop loss posisi terjal atau jatuh dari gelombang membuka posisi terendah titik stop loss posisi terjal k line.

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.

  • 5 siklus dan 60 siklus rata-rata garpu linear ditambah 5 siklus dan 60 siklus rata-rata garpu linear ditambah 5 siklus dan 60 siklus rata-rata garpu linear ditambah 5 siklus dan 60 siklus garpu linear ditambah 5 siklus dan 60 siklus rata-rata garpu linear ditambah
  • Dalam 5 siklus lebih besar dari 60 siklus tren, harga tertinggi mencapai 10 akar k garis tinggi, dan kedua kali menambah posisi. Dalam 5 siklus kurang dari 60 siklus tren, harga terendah mencapai 10 akar k garis rendah, dan kedua kali mengosongkan posisi.
  • Untuk pertama kali menambah posisi, dengan membuat 5 akar k garis baru rendah atau lebih kecil titik stop loss meratakan posisi ≠ kosong kosong sebaliknya ≠
  • Untuk kedua kali menambah posisi, dengan 5 siklus dan 60 siklus rata-rata, posisi mati dan rata-rata.

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.