Menulis instruksi pengelompokan dalam strategi perdagangan kuantitatif

Penulis:Kebaikan, Dibuat: 2019-07-10 09:55:13, Diperbarui: 2019-07-16 15:37:32

Mengapa Mengelompokkan Instruksi

Kebutuhan Pengembang Strategi

Untuk pasar yang berbeda, indikator yang berbeda diperlukan. Apakah saya dapat mengatur perbedaan harga stop loss yang berbeda sesuai dengan kondisi awal yang berbeda?

Misalnya, model tradisional menulis kondisi posisi tidak membedakan antara kondisi posisi yang berbeda.

Kode di bawah ini adalah strategi sederhana untuk tidak membedakan kondisi penyimpanan tradisional:

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;

Dan ini berbeda dengan menggunakan instruksi pengelompokan.

Instruksi pengelompokan dapat membagi n kelompok untuk kondisi penyebaran, posisi penyebaran kondisi suatu kelompok hanya dapat menyepakati kondisi penyebaran kelompok tertentu, kondisi penyebaran kelompok lain yang terpenuhi tidak akan ditandai, atau tidak akan ditugaskan.

Misalnya:

Kelompok pertama melakukan banyak hal

MA5^^MA(C,5);
MA10^^MA(C,10);
CROSS(MA5,MA10),BK;
CROSS(MA10,MA5),SP;

Kelompok kedua melakukan banyak hal

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 kondisi dari kelompok yang berbeda dalam model yang sama? Mari kita lakukan.

Cara menulis instruksi pembagian

Pertama, model dibagi menjadi model filter dan model non-filter:

  • Model penyaringan: Kondisi yang berbeda untuk membuka posisi ingin diseimbangkan dengan kondisi yang berbeda untuk menyeimbangkan posisi, yang dapat dilakukan dengan menggunakan instruksi pengelompokan.

  • Model non-filter: Strategi masuk pertama berbeda dari strategi kenaikan, ingin melakukan perimbangan dengan strategi perimbangan stop loss yang berbeda, yang dapat dilakukan dengan menggunakan pengelompokan instruksi.

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: Pengelompokan model filter membutuhkan pengelompokan setelah instruksi transaksi dan diikat dengan tanda kutip tunggal seperti BK (A).

Model tanpa 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: Pengelompokan model non-filter membutuhkan pengelompokan dan jumlah tangan setelah instruksi transaksi, dan pengelompokan harus diikat dengan tanda kutip tunggal. Seperti BK ((A, 2)

Mekanisme operasi instruksi pembagian

Model penyaringan: pertama penyaringan kelompok dan kemudian penyaringan sinyal

  • Filter kelompok adalah: jika sinyal K sebelumnya adalah sinyal buka dari kelompok A (BK SK BPK SPK) maka sinyal K saat ini hanya bisa menjadi sinyal buka dari kelompok A. Jika sinyal K sebelumnya adalah sinyal buka dari kelompok A (BP SP) maka sinyal K saat ini bisa menjadi sinyal buka dari kelompok manapun (BK SK BPK SPK).

  • Kondisi posisi yang tidak dikelompokkan hanya dapat terjadi pada kondisi posisi yang tidak dikelompokkan

Filter sinyal adalah: Filter sinyal terbuka

Prioritasnya adalah:

  • Garis K atas adalah BK, Garis K saat ini harus SPK atau SP (SPK lebih penting daripada SP, di bawah ini adalah simetris)
  • Garis K di atas adalah SK. Garis K sekarang harus menjadi BPK atau BP.
  • Garis K di atas adalah BP. Garis K sekarang harus BK atau SK.
  • Garis K atas adalah SP. Garis K sekarang harus BK atau SK.
  • Garis K atas adalah BPK. Garis K sekarang harus SPK atau SP.
  • Garis K di atas adalah SPK. Garis K sekarang harus BPK atau BP.

Model tanpa filter:

  • Jika sinyal sebelumnya adalah sinyal buka untuk kelompok A, maka sinyal berikutnya harus menjadi sinyal kenaikan atau sinyal penghentian untuk kelompok A.
  • Jika sinyal sebelumnya adalah sinyal posisi dari kelompok A dan kelompok A memegang posisi 0, sinyal berikutnya dapat menjadi sinyal posisi terbuka dari kelompok manapun.
  • Jika kelompok A memiliki posisi lebih besar dari 0, maka harus ada sinyal bukaan atau sinyal penghentian untuk kelompok A. Catatan: Kondisi bukaan yang tidak dikelompokkan hanya dapat digunakan untuk kondisi bukaan yang tidak dikelompokkan

Analisis kasus instruksi pembagian

Di sini, kita akan melihat beberapa contoh strategi untuk melihat bagaimana instruksi-instruksi ini dikelompokkan ketika kita menulis kode.

Model Filter

Ide trading: Menggunakan 20 siklus dan 60 siklus sebagai kriteria untuk menentukan tren.

  • Melakukan lebih banyak di atas garis rata-rata 20 siklus lebih besar dari garis rata-rata 60 siklus. Sebaliknya, lakukan kosong.
  • Dalam melakukan banyak tren, jika harga tertinggi membuat 10 garis k baru tinggi dan untuk garis matahari, tren lebih banyak. Ketika berdamai, dengan titik stop loss yang lebih besar atau terjadi berdamai.
  • Dalam melakukan overtrend, jika indikator KDJ adalah gold fork dan untuk garis matahari, bandingnya lebih banyak. Ketika berdamai, stop loss stop loss dengan titik yang lebih kecil atau stop loss stop loss dengan titik terendah k line stop loss stop loss.

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 tanpa filter

Ide perdagangan: dengan 5 siklus dan 10 siklus sebagai kondisi pertama untuk membuka posisi.

  • 5 siklus dan 60 siklus rata-rata golden fork penambahan posisi sebelum pertama kali membuka banyak posisi dan tidak berdamai; 5 siklus dan 60 siklus rata-rata mati garpu penambahan posisi sebelum pertama kali membuka kosong dan tidak berdamai.
  • Pada 5 siklus lebih besar dari 60 siklus, harga tertinggi membuat 10 dasar k baru tinggi, kemudian kedua kali lebih banyak posisi. Pada 5 siklus kurang dari 60 siklus tren, harga minimum membuat 10 dasar k baru rendah, kemudian kedua kali lebih kosong posisi.
  • Untuk posisi pertama kali setelah menambah, untuk membuat 5 garis k baru rendah atau lebih kecil stop loss leveling.
  • Untuk posisi kedua, setelah penambahan, perbaiki posisi dead fork linear dengan 5 siklus dan 60 siklus.

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 analisis kasus spesifik dari kedua model ini, dari mana pembaca dapat melihat bagaimana bahasa My menangani instruksi pengelompokan, setiap orang dapat membuat persyaratan pengelompokan yang berbeda sesuai dengan logika strategi mereka sendiri, sehingga mereka dapat mencoba untuk mengungkapkan logika strategi yang ingin mereka ungkapkan dalam kode dengan cara yang paling jelas dan paling sedikit kesalahan.


Lebih banyak