3.2 Permulaan dengan bahasa M

Penulis:Kebaikan, Dicipta: 2019-04-19 14:18:38, Dikemas kini: 2019-04-27 11:54:30

Ringkasan

Apakah bahasa M? Bahasa M yang dipanggil adalah satu set fungsi pemrograman yang meluas dari indikator teknikal perdagangan saham awal. Mengekap algoritma ke dalam satu fungsi, pengguna hanya perlu memanggil fungsi tertentu seperti building blocks untuk melaksanakan logik strategi.

img

Ia menggunakan mod pembinaan "grammar kecil, fungsi besar", yang sangat meningkatkan kecekapan pengaturcaraan. Penulisan strategi lebih daripada 100 ayat dalam bahasa lain boleh disusun dengan hanya beberapa baris dalam bahasa M. Perpustakaan fungsi statistik kewangan dan struktur data bersama dengan alat FMZ Quant juga dapat menyokong beberapa logika perdagangan yang kompleks.

Strategi Lengkap

Untuk membantu anda dengan cepat memahami pengetahuan utama bahagian ini, sebelum memperkenalkan bahasa FMZ Quant M, mari kita mula-mula mempunyai pemahaman awal tentang konsep nama bahagian ini.

  • Posisi panjang terbuka: Jika pada masa ini tidak ada kedudukan, dan harga penutupan lebih besar daripada purata bergerak jangka pendek, dan harga penutupan lebih besar daripada purata bergerak jangka panjang, dan purata bergerak jangka pendek lebih besar daripada purata bergerak jangka panjang, dan purata bergerak jangka panjang meningkat.

  • Posisi pendek terbuka: Jika pada masa ini tidak ada kedudukan, dan harga penutupan lebih rendah daripada purata bergerak jangka pendek, dan harga penutupan lebih rendah daripada purata bergerak jangka panjang, dan purata bergerak jangka pendek lebih rendah daripada purata bergerak jangka panjang, dan purata bergerak jangka panjang menurun.

  • Penutupan Posisi Panjang: Jika kini memegang kedudukan panjang, dan harga penutupan adalah lebih rendah daripada purata bergerak jangka panjang, atau purata bergerak jangka pendek adalah lebih rendah daripada purata bergerak jangka panjang, atau purata bergerak jangka panjang menurun.

  • Posisi Pendek Tutup: Jika kedudukan pendek semasa dipegang, dan harga penutupan lebih besar daripada purata bergerak jangka panjang, atau purata bergerak jangka pendek lebih besar daripada purata bergerak jangka panjang, atau purata bergerak jangka panjang meningkat.

Jika anda menulis dengan bahasa M, ia akan menjadi:

MA10:=MA(CLOSE,10); // Get the 10-cycle moving average of the latest K-line and save the result in variable MA10
MA50:=MA(CLOSE,50); // Get the 50-cycle moving average of the latest K-line and save the result in variable MA50


MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling

CLOSE>MA10 AND CLOSE>MA50 AND MA10>MA50 AND MA50_ISUP,BK; //open long position
CLOSE<MA10 AND CLOSE<MA50 AND MA10<MA50 AND MA50_ISUP,SK; //open short position
CLOSE<MA50 OR MA10<MA50,SP;//close long position
CLOSE>MA50 OR MA10>MA50,BP;//close short position

Untuk menulis strategi perdagangan yang lengkap, anda akan memerlukan: pemerolehan data, pengiraan data, pengiraan logik, dan meletakkan pesanan. Seperti yang ditunjukkan di atas, dalam keseluruhan kod, hanya satu API untuk mendapatkan data asas digunakan, yang merupakan " CLOSE " di baris pertama dan kedua; kemudian baris pertama hingga kesembilan adalah bahagian pengiraan data; baris 11 hingga 14 adalah pengiraan logik dan meletakkan bahagian pesanan.

Perhatikan bahawa MA10, MA50, MA10_1, MA50_1, MA10_2, dan MA50_2 adalah pembolehubah; pada baris pertama hingga kesembilan, " := " adalah tanda penugasan, dan data di sebelah kanan tanda penugasan diberikan kepada pembolehubah di sebelah kiri tanda penugasan; MA adalah API, contohnya, pada baris pertama, memanggil MA (rata-rata bergerak) perlu lulus dalam dua parameter. Anda boleh memikirkan tetapan sebagai parameter masuk, iaitu, ketika memanggil MA, anda perlu menetapkan jenis MA ; " AND " " OR " adalah operator logik yang digunakan terutamanya untuk menyambungkan beberapa pengiraan logik dan sebagainya. Dengan konsep pengetahuan asas di atas, mari kita mula mempelajari pengetahuan bahasa M yang terperinci.

Data asas

Data asas (harga pembukaan, harga tertinggi, harga terendah, harga penutupan, jumlah) adalah bahagian penting dalam perdagangan kuantitatif. Untuk mendapatkan data asas terkini dalam strategi, anda hanya perlu memanggil API FMZ Quant. Jika anda ingin mendapatkan data asas harga sejarah, anda boleh menggunakan " REF ", seperti: REF (CLOSE, 1) adalah untuk mendapatkan harga penutupan semalam.

Variabel

Variabel boleh diubah. Nama pembolehubah boleh difahami sebagai nama kod. Namanya disokong oleh huruf, nombor, dan baris bahasa Inggeris. Walau bagaimanapun, panjangnya mesti dikawal dalam 31 aksara. Nama pembolehubah tidak boleh diulang dengan yang lain, tidak boleh diduplikasi dengan nama parameter, tidak boleh diulang dengan nama fungsi (API ), dan setiap pernyataan harus berakhir dengan titik koma. Menulis komen selepas " // ". Seperti yang ditunjukkan di bawah:

INT:=2; //Integer type
FLOAT:=3.1; //Floating point
ISTRUE:=CLOSE>OPEN; //Boolean type

Tugas pemboleh ubah

Penugasan pembolehubah bermaksud bahawa nilai di sebelah kanan tanda penugasan diberikan kepada pembolehubah di sebelah kiri. Terdapat empat jenis penugasan, yang boleh mengawal sama ada nilai dipaparkan pada carta atau kedudukan paparan. Mereka adalah " : ", " := ", " ^^ ", "... ", dan komen kod di bawah menerangkan maknanya secara terperinci.

CC1: C; //Assign the closing price to the variable CC1 and display it in the sub-chart
CC2:=C; //Assign the closing price to variable CC2, but not display in the status bar and chart
CC3^^C; //Assign the closing price to the variable CC3 and display it in the main chart
CC4..0; //Assign the closing price to the variable CC4 and display it in the status bar, but not in the chart

Jenis data

Terdapat beberapa jenis data dalam bahasa M, yang paling biasa ialah jenis numerik, jenis rentetan, dan jenis boolean. Jenis numerik adalah nombor, termasuk bilangan bulat, desimal, nombor positif dan negatif, dan lain-lain, seperti: 1, 2, 3, 1.1234, 2.23456...; jenis rentetan boleh difahami sebagai teks, Cina, Inggeris, nombor juga boleh menjadi rentetan, seperti: the FMZ Quant, CLOSEPRICE, 6000, jenis rentetan mesti dibungkus dengan tanda petikan berganda; Jenis Boolean adalah yang paling mudah, ia hanya mempunyai dua nilai yes dan No, seperti: 1 dengan wakil benar bermaksud yes dan 0 untuk palsu menunjukkan no.

Operator hubungan

Operator hubungan, seperti namanya, adalah operator yang digunakan untuk membandingkan hubungan dua nilai. Mereka sama dengan, lebih besar daripada, kurang daripada, lebih besar daripada atau sama dengan, kurang daripada atau sama dengan, tidak sama dengan, seperti yang ditunjukkan di bawah:

CLOSE = OPEN; //when closing price equals to opening price, return 1 (true), otherwise return 0 (false)
CLOSE > OPEN; //when closing price greater than opening price, return 1 (true), otherwise return 0 (false)
CLOSE < OPEN; //when closing price less than opening price, return 1 (true), otherwise return 0 (false)
CLOSE >= OPEN; //when closing price greater than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <= OPEN; //when closing price less than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <> OPEN; //when closing price is not equal to opening price, return 1 (true), otherwise return 0 (false)

Operator Logik

Operasi logik boleh menggabungkan pernyataan jenis Boolean yang berasingan ke dalam keseluruhan, yang paling biasa digunakan adalah "AND" dan "OR". Misalkan terdapat dua nilai jenis Boolean, Harga penutupan lebih besar daripada harga pembukaan dan Harga penutupan lebih besar daripada purata bergerak, kita boleh mengelompokkan mereka ke dalam nilai Boolean, sebagai contoh: Harga penutupan lebih besar daripada harga pembukaan dan (AND) harga penutupan lebih besar daripada purata bergerak , harga penutupan lebih besar daripada harga pembukaan atau (OR) harga penutupan lebih besar daripada purata bergerak.

AA:=2>1; //return true
BB:=4>3; //return true
CC:=6>5; //return true
DD:=1>2; //return false

Sila perhatikan:

  • " AND " ialah apabila semua syarat adalah true dan syarat akhir adalah true;

  • "ATAU" bermaksud dalam semua keadaan, selagi mana-mana syarat adalah betul, syarat akhir adalah betul.

  • " AND " boleh ditulis sebagai " && ", dan " OR " boleh ditulis sebagai ".

Operator aritmetik

Tidak ada perbezaan antara pengendali aritmatika (" + , " - , " * , " / ) yang digunakan dalam bahasa M dan matematik pembelajaran sekolah biasa, seperti yang ditunjukkan di bawah:

AA:=1+1; //the result is 2
BB:=2-1; //the result is 1
CC:=2*1; //the result is 2
DD:=2/1; //the result is 2

Keutamaan

Jika terdapat ungkapan 100*(10-1)/(10+5, langkah mana yang dihitung program pertama?

1, Jika ia adalah tahap operasi yang sama, ia biasanya dikira dari kiri ke kanan. 2, Jika terdapat penambahan dan pengurangan, dan penggandaan dan pembahagian, pertama mengira penggandaan dan pembahagian, kemudian penambahan dan pengurangan. 3, Jika terdapat kurung, pertama-tama mengira bahagian dalam kurung. 4, Jika undang-undang operasi mudah dipenuhi, undang-undang boleh digunakan untuk pengiraan.

Hal yang sama berlaku untuk bahasa M, seperti yang ditunjukkan di bawah:

100*(10-1)/(10+5)  //the result is 60
1>2 AND (2>3 OR 3<5)  //the result is false
1>2 AND 2>3 OR 3<5  //the result is true

Mod Pelaksanaan

Dalam bahasa M alat FMZ Quant, terdapat dua mod pelaksanaan program, iaitu mod harga penutupan dan mod harga masa nyata. Mod harga penutupan bermaksud bahawa apabila isyarat K-line semasa ditubuhkan, meletakkan pesanan pada K-line seterusnya. mod masa nyata dijalankan dengan segera apabila isyarat k-line semasa ditubuhkan.

Strategi intraday

Jika ia adalah strategi perdagangan intraday, anda perlu menggunakan fungsi masa " WAKTU " apabila anda perlu menutup kedudukan pada akhir. Fungsi ini di atas kitaran kedua dan di bawah kitaran hari, ditunjukkan dalam bentuk empat digit: HHMM (1450 - 14: 50).

CLOSE>OPEN && TIME<1450,BK; //if it is a positive k-line and the time is less than 14:50, opening position.
TIME>=1450,CLOSEOUT; //if the time is beyond 14:50, closing all position.

Klasifikasi model

Terdapat dua jenis klasifikasi model dalam bahasa M: model tanpa penapisan dan model penapisan. Ini sebenarnya sangat difahami: model tanpa penapisan membolehkan isyarat pembukaan atau penutupan berterusan, yang boleh digunakan untuk menambah dan mengurangkan kedudukan. Model penapisan tidak membenarkan isyarat pembukaan atau penutupan berterusan, iaitu apabila isyarat pembukaan muncul, isyarat pembukaan berikutnya akan disaring sehingga isyarat penutupan muncul. Urutan model tanpa penapisan adalah: kedudukan terbuka - kedudukan dekat - kedudukan terbuka - kedudukan dekat - kedudukan terbuka...

img

Ringkasnya

Di atas adalah kandungan permulaan cepat bahasa M, sekarang anda boleh memprogram strategi perdagangan anda sendiri sekarang. Jika anda perlu menulis yang lebih kompleks, anda boleh merujuk kepada dokumentasi API bahasa M platform FMZ Quant, atau terus berunding dengan perkhidmatan pelanggan rasmi untuk menulisnya untuk anda.

Pengumuman Bahagian Seterusnya

Perdagangan intraday juga merupakan mod perdagangan yang popular. Kaedah ini tidak memegang kedudukan semalaman. Oleh itu, ia tertakluk kepada risiko turun naik pasaran yang rendah. Sebaik sahaja keadaan pasaran yang tidak menguntungkan berlaku, ia boleh diselaraskan pada waktunya.

Latihan selepas sekolah

  1. Cuba gunakan alat FMZ Quant untuk mendapatkan tarikh asas dari API oleh bahasa M.
  2. Berapa banyak kaedah paparan untuk penugasan pembolehubah dalam carta?

Lebih lanjut