Bagaimana untuk melaksanakan strategi dalam bahasa M
Dalam artikel sebelumnya, kami menerangkan premis mewujudkan strategi perdagangan dari aspek pengenalan bahasa M, tatabahasa asas, kaedah pelaksanaan model, dan klasifikasi model. Dalam artikel ini, kami akan meneruskan bahagian sebelumnya, dari modul dan teknologi strategi yang biasa digunakan.
Fikirkan tentangnya, bagaimana anda membina robot dengan keping Lego? Anda tidak boleh sentiasa dari atas ke bawah atau dari bawah ke atas, menyusun sekeping demi sekeping. Orang yang mempunyai sedikit akal sehat tahu bahawa mereka harus meletakkan kepala, lengan, kaki, sayap, dan lain-lain bersama-sama, dan kemudian menggabungkannya menjadi robot yang lengkap. Begitu juga untuk menulis program, menulis fungsi yang diperlukan ke dalam modul strategi tunggal, dan kemudian menggabungkan modul strategi individu ini ke dalam strategi perdagangan yang lengkap. Di bawah ini saya akan menyenaraikan beberapa modul strategi biasa:
Peningkatan peringkat adalah mengira peratusan harga penutupan garis K semasa berbanding dengan N tempoh sebelumnya perbezaan harga penutupan.
CLOSE_0:=CLOSE; //get the current K-line's closing price, and save the results to variable CLOSE_0.
CLOSE_10:=REF(CLOSE,10); //get the pervious 10 K-lines' closing price, and save the results to variable CLOSE_10
(CLOSE_0-CLOSE_10)/CLOSE_10*100;//calculating the percentage of current K line's closing price compare with previous N periods of closing price's difference.
Harga tertinggi baru dikira dengan sama ada garis K semasa lebih besar daripada harga tertinggi N kitaran. Sebagai contoh: mengira sama ada garis K semasa lebih besar daripada harga tertinggi 10 K-garis terkini
HHV_10:=HHV(HIGH,10); //Get the highest price of latest 10 K-lines, which includes the current K-line.
HIGH>REF(HHV_10,1); //Judge whether the current K-line's highest price is greater than pervious K-lines' HHV_10 value.
Sebagai contoh: Jika harga penutupan garis K semasa adalah 1.5 kali daripada harga penutupan 10 K-garis sebelumnya, yang bermaksud dalam 10 hari, harga telah meningkat 50%; dan jumlah dagangan juga meningkat lebih daripada 5 kali daripada 10 K-garis sebelumnya. boleh ditulis:
CLOSE_10:=REF(CLOSE,10); //get the 10th K-line closing price
IS_CLOSE:=CLOSE/CLOSE_10>1.5; //Judging whether the current K Line closing price is 1.5 times greater than the value of CLOSE_10
VOL_MA_10:=MA(VOL,10); //get the latest 10 K-lines' average trading volume
IS_VOL:=VOL>VOL_MA_10*5; //Judging whether the current K-line's trading volume is 5 times greater than the value of VOL_MA_10
IS_CLOSE AND IS_VOL; //Judging whether the condition of IS_CLOSE and IS_VOL are both true.
Pasaran kejutan sempit bermaksud bahawa harga dikekalkan dalam julat tertentu dalam tempoh baru-baru ini. Sebagai contoh: Jika harga tertinggi dalam 10 kitaran dikurangkan harga terendah dalam 10 kitaran, hasilnya dibahagikan dengan harga penutupan K-line semasa
HHV_10:=HHV(CLOSE,10); //Get the highest price in 10 cycles(including current K-line)
LLV_10:=LLV(CLOSE,10); //Get the lowest price in 10 cycles(including current K-line)
(HHV_10-LLV_10)/CLOSE<0.05; //Judging whether the difference between HHV_10 and LLV_10 divided by current k-line's closing price is less than 0.05.
Moving Average menunjukkan arah panjang dan pendek, garisan K disokong atau ditentang oleh garisan purata bergerak 5,10,20,30,60, Moving Average menunjukkan pasaran lembu atau pasaran beruang. boleh ditulis:
MA_5:=MA(CLOSE,5); //get the moving average of 5 cycle closing price.
MA_10:=MA(CLOSE,10);//get the moving average of 10 cycle closing price.
MA_20:=MA(CLOSE,20);//get the moving average of 20 cycle closing price.
MA_30:=MA(CLOSE,30);//get the moving average of 30 cycle closing price.
MA_5>MA_10 AND MA_10>MA_20 AND MA_20>MA_30; //determine wether the MA_5 is greater than MA_10, and MA_10 is greater than MA_20, and MA_20 is greater than MA_30.
Untuk mendapatkan lokasi harga tinggi sebelumnya dan lokasinya, anda boleh menggunakan FMZ Quant API secara langsung. boleh ditulis:
HHV_20:=HHV(HIGH,20); //get the highest price of 20 cycle(including current K line)
HHVBARS_20:=HHVBARS(HIGH,20); //get the number of cycles from the highest price in 20 cycles to current K line
HHV_60_40:REF(HHV_20,40); //get the highest price between 60 cycles and 40 cycles.
Jurang harga adalah kes di mana harga tertinggi dan terendah dari dua garis K tidak disambungkan. Ia terdiri daripada dua garis K, dan jurang harga adalah harga rujukan titik sokongan dan tekanan dalam pergerakan harga masa depan. Apabila jurang harga berlaku, boleh dianggap bahawa percepatan di sepanjang trend dengan arah asal telah bermula. boleh ditulis:
HHV_1:=REF(H,1); //get the pervious K line's highest price
LLV_1:=REF(L,1); //get the pervious K line's lowest price
HH:=L>HHV_1; //judging wether the current K line's lowest price is greater than pervious K line's highest price (jump up)
LL:=H<LLV_1; //judging wether the current K line's highest price is greater than pervious K line's lowest price (jump down)
HHH:=L/REF(H,1)>1.001; //adding additional condition, the bigger of the price gap, the stronger the signal (jump up)
LLL:=H/REF(L.1)<0.999; //adding additional condition, the bigger of the price gap, the stronger the signal (jump down)
JUMP_UP:HH AND HHH; //judging the overall condition, whether it is a jump up
JUMP_DOWN:LL AND LLL; //judging the overall condition, whether it is a jump down
Purata bergerak
Dari sudut pandang statistik, purata bergerak adalah purata aritmetik harga harian, yang merupakan lintasan harga trend. Sistem purata bergerak adalah alat teknikal yang biasa digunakan oleh kebanyakan penganalisis. Dari sudut pandang teknikal, ia adalah faktor yang mempengaruhi harga psikologi penganalisis teknikal. Faktor pengambilan keputusan perdagangan berfikir adalah alat rujukan yang baik untuk penganalisis teknikal. Alat FMZ Quant menyokong banyak jenis purata bergerak yang berbeza, seperti yang ditunjukkan di bawah:
MA_DEMO:MA(CLOSE,5); // get the moving average of 5 cycle
MA_DEMO:EMA(CLOSE,15); // get the smooth moving average of 15 cycle
MA_DEMO:EMA2(CLOSE,10);// get the linear weighted moving average of 10 cycle
MA_DEMO:EMAWH(CLOSE,50); // get the exponentially weighted moving average of 50 cycle
MA_DEMO:DMA(CLOSE,100); // get the dynamic moving average of 100 cycle
MA_DEMO:SMA(CLOSE,10,3); // get the fixed weight of 3 moving average of closing price in 10 cycle
MA_DEMO:ADMA(CLOSE,9,2,30); // get the fast-line 2 and slow-line 30 Kaufman moving average of closing price in 9 cycle.
Band Bollinger juga berdasarkan prinsip statistik. Rel tengah dikira mengikut purata bergerak N-hari, dan rel atas dan bawah dikira mengikut penyimpangan standard. Apabila saluran BOLL mula berubah dari lebar ke sempit, yang bermaksud harga akan secara beransur-ansur kembali ke purata. Apabila saluran BOLL berubah dari sempit ke lebar, ini bermakna pasaran akan mula berubah. Jika harga naik melintasi rel atas, ini bermakna kuasa beli meningkat. Jika harga turun melintasi rel bawah, ini menunjukkan bahawa kuasa jual meningkat.
Di antara semua penunjuk teknikal, kaedah pengiraan Bollinger Bands adalah salah satu yang paling rumit, yang memperkenalkan konsep penyimpangan standard dalam statistik, yang melibatkan trajektori tengah (MB ), trajektori atas (UP ) dan trajektori bawah (DN).
MID:MA(CLOSE,100); //calculating moving average of 100 cycle, call it Bollinger Bands middle trajectory
TMP2:=STD(CLOSE,100); //calculating standard deviation of closing price of 100 cycle.
TOP:MID+2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it upper trajectory
BOTTOM:MID-2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it lower trajectory
Indikator MACD adalah operasi penyelarasan berganda menggunakan purata bergerak pantas (jangka pendek) dan perlahan (jangka panjang) dan penggabungan dan pemisahan mereka. MACD yang dibangunkan mengikut prinsip purata bergerak menghilangkan kecacatan bahawa purata bergerak sering mengeluarkan isyarat palsu, dan juga mengekalkan kesan aspek baik yang lain. Oleh itu, indikator MACD mempunyai trend dan kestabilan purata bergerak. Ia digunakan untuk mengkaji waktu membeli dan menjual saham dan meramalkan perubahan harga saham. Anda boleh menggunakannya seperti berikut:
DIFF:EMA(CLOSE,10)-EMA(CLOSE,50); //First calculating the difference between short-term moving average and long-term moving average.
DEA:EMA(DIFF,10); //Then calculating average of the difference.
Di atas adalah modul strategi yang biasa digunakan dalam pembangunan strategi perdagangan kuantitatif. Di samping itu, terdapat lebih banyak lagi. Melalui contoh modul di atas, anda juga boleh melaksanakan beberapa modul perdagangan yang paling kerap anda gunakan dalam perdagangan subjektif. Kaedahnya sama. Seterusnya, kami mula menulis strategi perdagangan intraday yang berdaya maju.
Dalam pasaran spot Forex, terdapat strategi yang terkenal yang dipanggil HANS123. Logiknya pada dasarnya menilai sama ada harga memecahkan harga tertinggi atau terendah dari jumlah K baris selepas pembukaan pasaran
Bersedia untuk memasuki pasaran selepas 30 minit pembukaan;
Rel atas = 30 minit tinggi selepas pembukaan;
Rel bawah = 30 minit rendah selepas pembukaan;
Apabila harga melangkaui had atas, beli dan buka kedudukan;
Apabila harga jatuh di bawah rel bawah, penjual membuka kedudukan.
Strategi dagangan intraday, penutupan sebelum penutupan;
// Data Calculation
Q:=BARSLAST(DATA<>REF(DATA,1))+1; //Calculating the number of period from
the first K line of the current trading day to current k line, and assign the results to N
HH:=VALUEWHEN(TIME=0930,HHV(H,Q)); //when time is 9:30, get the highest price of N cycles, and assign the results to HH
LL:=VALUEWHEN(TIME=0930,LLV(L,Q)); //When time is 9:30, get the lowest price of N cycles, and assign the results to LL
//Placing Orders
TIME>0930 AND TIME<1445 AND C>HH,BK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is greater than HH, opening long position.
TIME>0930 AND TIME<1445 AND C<LL,SK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is lesser than LL, opening short position.
TIME>=1445,CLOSEOUT; //If the time is greater or equal to 14:45, close all position.
//Filtering the signals
AUTOFILTER; //opening the filtering the signals mechanism
Di atas kita telah belajar konsep modul strategi. Melalui beberapa kes modul strategi yang biasa digunakan, kita mempunyai idea umum tentang alat pengaturcaraan FMZ Quant, dapat dikatakan bahawa belajar menulis modul strategi dan meningkatkan pemikiran logik pengaturcaraan adalah langkah utama dalam perdagangan kuantitatif lanjutan. Akhirnya, kita menggunakan alat FMZ Quant untuk melaksanakan strategi perdagangan mengikut strategi perdagangan Forex klasik.
Mungkin masih ada beberapa kekeliruan bagi sesetengah orang, terutamanya kerana bahagian pengekodan. Jangan risau, kami sudah memikirkan itu untuk anda. Pada platform FMZ Quant, terdapat satu lagi alat pengaturcaraan yang lebih mudah untuk pemula. Ia adalah pengaturcaraan visual, mari kita pelajari segera!
Cuba untuk melaksanakan beberapa modul perdagangan yang anda gunakan paling kerap dalam perdagangan subjektif.
Cuba untuk melaksanakan algoritma indeks KDJ menggunakan bahasa M pada platform FMZ Quant.