4.4 Bagaimana untuk melaksanakan strategi dalam bahasa Python

Penulis:Kebaikan, Dicipta: 2019-04-28 16:51:22, Dikemas kini:

Ringkasan

Dalam artikel sebelumnya, kita belajar tentang pengenalan bahasa Python, sintaks asas, kerangka strategi dan banyak lagi. Walaupun kandungannya membosankan, tetapi ia adalah kemahiran yang diperlukan dalam pembangunan strategi perdagangan anda. Dalam artikel ini, mari kita teruskan laluan Python dengan strategi yang mudah, langkah demi langkah untuk membantu anda mencapai strategi perdagangan kuantitatif yang layak.

Pengenalan Strategi

Di antara banyak strategi perdagangan, strategi saluran Donchian harus menjadi salah satu strategi terobosan klasik. Ia telah terkenal sejak tahun 1970. Pada masa itu, sebuah syarikat yang mengkhususkan diri dalam ujian simulasi dan penyelidikan mengenai strategi perdagangan berprogram utama. Dalam semua ujian strategi, strategi saluran Donchian adalah yang paling berjaya.

Kemudian, di Amerika Syarikat, acara latihan peniaga turtle yang terkenal berlaku, yang membuat kejayaan besar dalam sejarah perdagangan sekuriti. Pada masa itu, kaedah perdagangan Turtles bersifat sulit, tetapi selepas lebih dari satu dekad, Turtle Trading Law dibuat awam, dan orang mendapati bahawa Turtle Trading menggunakan versi yang lebih baik dari strategi saluran Donchian.

Strategi perdagangan terobosan disesuaikan dengan trend jenis perdagangan yang agak lancar. Cara yang paling biasa untuk terobosan adalah menggunakan hubungan kedudukan relatif antara sokongan harga dan rintangan untuk menentukan kedudukan perdagangan tertentu. Strategi saluran Donchian dalam bahagian ini juga berdasarkan prinsip ini.

Peraturan Strategi Saluran Donchian

Saluran Donchian adalah penunjuk berorientasikan trend, dan penampilannya dan isyaratnya agak serupa dengan penunjuk Bollinger Band. Walau bagaimanapun, saluran harganya dibina mengikut harga tertinggi dan terendah dalam tempoh tertentu. Sebagai contoh: rel atas dikira oleh harga tertinggi 50 k-line terbaru; rel bawah dikira oleh harga terendah 50 k-line terbaru.

img

seperti yang ditunjukkan di atas: penunjuk ini dengan kurva yang terdiri daripada tiga warna yang berbeza, tetapan lalai adalah harga tertinggi dan harga terendah dalam kitaran 20 untuk memaparkan turun naik harga. Ia akan menunjukkan turun naik yang kurang apabila harga berada dalam saluran yang sempit, dan sebaliknya.

Jika harga naik di atas rel atas, isyarat membeli akan muncul; sebaliknya, jika harga jatuh di bawah rel bawah, isyarat jualan akan muncul.

Kaedah pengiraan saluran Donchian

Pada platform FMZ Quant, pengiraan saluran Donchian adalah mudah, anda hanya boleh mengakses harga tertinggi atau terendah dalam kitaran yang diberikan, seperti yang ditunjukkan di bawah: baris 5 adalah untuk mendapatkan harga tertinggi 50 kitaran, baris 6 adalah untuk mendapatkan harga terendah 50 kitaran.

def main(): # program entry
    exchange.SetContractType("this_week") # set the variety type by using the weekly k-line 
    while True: # enter the loop
        records = exchange.GetRecords() # get the k line array
        upper = TA.Highest(record, 50, 'high') # get the highest price of 50 cycles
        lower = TA.Lowest(record, 50, 'low') # get the lowest price of 50 cycles
        middle = (upper + lower) / 2 # calculate the average value of upper and lower rails 
        Log("upper rail: ", upper) # print the upper rail value in the log
        Log("lower rail: ", lower) # print the lower rail value in the log
        Log("middle rail: ", middle) # print the middle rail value in the log

Logika Strategi

Terdapat banyak cara untuk menggunakan saluran Donchian, yang boleh digunakan sendiri atau digabungkan dengan penunjuk lain. Dalam bahagian ini kita akan menggunakannya dengan cara yang paling mudah. iaitu: apabila harga menembusi rel atas, yang bermaksud ia memecahkan di atas garis tekanan, kuasa beli adalah kuat, ia telah membentuk gelombang tenaga yang meningkat, isyarat membeli dihasilkan; apabila harga menembusi di bawah rel bawah, yang bermaksud ia memecahkan di bawah garis sokongan, isyarat jualan dihasilkan.

img

Jika harga jatuh semula ke rel tengah saluran selepas pembukaan kedudukan panjang, kita percaya bahawa kekuatan kuasa beli melemah, atau kekuatan kuasa jual menguat, dan isyarat pembukaan kedudukan pendek dihasilkan; prinsip yang sama berlaku untuk kedudukan pendek pembukaan

Syarat Perdagangan

  • Posisi panjang terbuka: Jika tidak ada kedudukan yang dipegang, dan harga penutupan lebih besar daripada rel atas

  • Posisi pendek terbuka: Jika tidak ada kedudukan yang dipegang, dan harga penutupan adalah lebih rendah daripada rel bawah

  • Penutupan kedudukan panjang: Jika kini memegang kedudukan panjang, dan harga penutupan adalah lebih rendah daripada rel tengah

  • Penutupan kedudukan pendek: Jika kini memegang kedudukan pendek, dan harga penutupan lebih besar daripada rel tengah

Pelaksanaan Kod Strategi

Langkah pertama dalam melaksanakan strategi adalah untuk mendapatkan data terlebih dahulu, kerana data adalah bahagian prasyarat strategi perdagangan.

Seterusnya adalah untuk mengira logik perdagangan berdasarkan data ini; langkah terakhir adalah untuk berdagang mengikut logik. langkah seperti berikut:

Langkah 1: Menggunakan perpustakaan kelas perdagangan

Anda boleh menganggap perpustakaan kelas dagangan sebagai modul fungsional. Kelebihan menggunakan perpustakaan kelas dagangan adalah ia membolehkan anda memberi tumpuan kepada menulis logik strategi. Sebagai contoh, apabila kita menggunakan perpustakaan kelas dagangan, untuk membuka atau menutup kedudukan, kita boleh menggunakan antara muka API secara langsung dalam perpustakaan kelas dagangan; tetapi jika kita tidak menggunakan perpustakaan kelas dagangan, kita perlu mendapatkan harga pasaran ketika membuka kedudukan. Perlu mempertimbangkan isu pesanan yang tidak dilaksanakan dan isu pesanan pengeluaran, dan sebagainya.

def main();
    wile true:
        obj = ext.NewPositionManager() # using the trading class library
        # followed by strategy logic and placing order part

Bahagian pengekodan di atas adalah kerangka strategi CTA menggunakan alat FMZ Quant. Ini adalah format pengekodan tetap, dan semua kod logik perdagangan akan bermula dari baris 4. Tiada perubahan lain diperlukan di tempat lain.

Langkah 2: Dapatkan semua jenis data

Dari logik perdagangan strategi kami, pertama-tama kita perlu mendapatkan status kedudukan semasa, dan kemudian bandingkan harga penutupan dengan rel atas, tengah dan bawah.

  • Dapatkan data garis K

Yang pertama adalah untuk mendapatkan array data K-garis dan harga penutupan K-garis semasa, dengan array K-garis, kita boleh mengira tempoh kitaran N harga tertinggi dan terendah melalui antara muka API. ia boleh ditulis seperti ini:

def main(): # main function
    exchange.SetContractType("this_week") # set the variety type by using the weekly k-line 
    while True: # enter the loop
        records = exchange.GetRecords() # get the k line array
        if len(records) < 50: continue # if the number of K line is less than 50, skip this loop.
        close = records[len(records) - 1].Close # get the closing price of the latest k-line

Seperti yang ditunjukkan di atas:

Baris 4: Dapatkan array garis K, yang merupakan format tetap.

Garis 5: Menapis panjang garis K, kerana parameter untuk mengira penunjuk saluran Donchian adalah 50, apabila bilangan garis K kurang daripada 50, mustahil untuk mengira. Jadi di sini kita perlu menapis bilangan garis K. Jika bilangan garis K kurang daripada 50, ia akan melangkau gelung semasa dan terus menunggu garis K seterusnya.

Baris 6: Kami menggunakan kod " rekod [ len (rekod) - 1 ] " untuk mendapatkan data terakhir array K-garis, yang merupakan data K-garis terkini. data ini adalah objek, yang mengandungi: harga pembukaan, harga tertinggi, terendah dan penutupan, juga jumlah dagangan, masa dan data lain, kerana ia adalah objek, jadi kita hanya menggunakan .Close untuk mendapatkan harga penutupan terkini K-garis.

  • Dapatkan data kedudukan

maklumat kedudukan adalah syarat yang sangat penting dalam strategi perdagangan kuantitatif. Apabila syarat perdagangan ditubuhkan, adalah perlu untuk menilai sama ada untuk meletakkan pesanan oleh status kedudukan dan bilangan kedudukan. Sebagai contoh, apabila syarat untuk membuka kedudukan panjang ditubuhkan, jika terdapat kedudukan memegang, tidak meletakkan pesanan; jika tidak ada kedudukan memegang, meletakkan pesanan. Kali ini kita langsung merangkum maklumat kedudukan ke dalam fungsi, kita hanya boleh memanggil fungsi ini untuk menggunakannya. seperti ini:

# get the position information function
def mp():
    positions = exchange.GetPosition() # get the holding position array
    if len(position) == 0: # if the holding position array is 0
        return 0 # meaning currently has no position holding, return 0
    for i in range(len(position)): # Traversing the position array
        if (position[i]['Type'] == PD_LONG): 
            return 1 # if there are long position holding, return 1
        elif (position[i]['Type'] == PD_SHORT):
            return -1 # if there are short position holding, return -1
        
def main(): # main function
    exchange.SetContractType("this_week") # set the variety type by using the weekly k-line
    while True: # enter the loop
        records = exchange.GetRecords() # get the k line array
        if len(records) < 50: continue # if the number of K line is less than 50, skip this loop.
        close = records[len(records) - 1].Close # get the closing price of the latest k-line
        position = mp() # get the position information function

Seperti yang ditunjukkan di atas:

Ini adalah fungsi yang mendapatkan maklumat kedudukan. Jika terdapat kedudukan panjang, nilainya adalah 1; jika terdapat kedudukan pendek, nilainya adalah -1; jika tidak ada kedudukan, nilainya adalah 0.

Barisan 2: Buat fungsi dengan nama mp. Fungsi ini tidak mempunyai parameter.

Barisan 3: Dapatkan array kedudukan, yang merupakan format tetap.

Baris 4: Tentukan panjang array kedudukan. Jika panjangnya sama dengan 0, ia bermakna ia tidak mempunyai kedudukan memegang, mengembalikan 0.

Baris 6 : Menggunakan gelung for, bermula merentasi array ini, logik berikut adalah sangat mudah, jika ia memegang kedudukan panjang, mengembalikan 1 ; jika ia memegang kedudukan pendek, mengembalikan -1.

Baris 18 : Panggil fungsi maklumat kedudukan mp.

  • Dapatkan harga tertinggi dan terendah 50 K-garis yang paling baru

Dalam alat perdagangan kuantitatif FMZ Quant, anda boleh menggunakan secara langsung fungsi " TA.Highest " dan " TA.Lowest " tanpa perlu menulis pengiraan logik anda sendiri. Dan fungsi TA.Highest dan TA.Lowest mengembalikan hasil nilai tertentu dan bukannya array. Ini sangat mudah. bukan sahaja itu, platform FMZ Quant mempunyai beratus-ratus fungsi penunjuk lain yang dibina secara rasmi.

# get the position information function
def mp():
    positions = exchange.GetPosition() # get the holding position array
    if len(position) == 0: # if the holding position array is 0
        return 0 # meaning currently has no position holding, return 0
    for i in range(len(position)): # Traversing the position array
        if (position[i]['Type'] == PD_LONG): 
            return 1 # if there are long position holding, return 1
        elif (position[i]['Type'] == PD_SHORT):
            return -1 # if there are short position holding, return -1
        
def main(): # main function
    exchange.SetContractType("this_week") # set the variety type by using the weekly k-line
    while True: # enter the loop
        records = exchange.GetRecords() # get the k line array
        if len(records) < 50: continue # if the number of K line is less than 50, skip this loop.
        close = records[len(records) - 1].Close # get the closing price of the latest k-line
        position = mp() # get the position information function
        upper = TA.Highest(record, 50, 'High') # get the highest price of 50 cycles
        lower = TA.Lowest(record, 50, 'Low') # get the lowest price of 50 cycles
        middle = (upper + lower) / 2 # calculate the average value of the upper and lower rail

Seperti yang ditunjukkan di atas:

Baris 19: panggil fungsi TA.Highest untuk mendapatkan harga tertinggi 50 kitaran

Baris 20 : panggilan TA.Lowest fungsi untuk mendapatkan harga terendah 50 kitaran

Baris 21: mengira nilai purata rel atas dan bawah mengikut harga tertinggi dan terendah 50 kitaran

Langkah 3: Penempatan pesanan dan perdagangan

Dengan data di atas, kita boleh menulis logik perdagangan dan meletakkan bahagian pesanan sekarang. Ia juga sangat mudah, yang paling biasa digunakan adalah pernyataan if, yang boleh digambarkan sebagai: jika syarat 1 dan syarat 2 benar, letakkan pesanan; jika syarat 3 atau syarat 4 benar, letakkan pesanan. Seperti yang ditunjukkan di bawah:

# get the position information function
def mp():
    positions = exchange.GetPosition() # get the holding position array
    if len(position) == 0: # if the holding position array is 0
        return 0 # meaning currently has no position holding, return 0
    for i in range(len(position)): # Traversing the position array
        if (position[i]['Type'] == PD_LONG): 
            return 1 # if there are long position holding, return 1
        elif (position[i]['Type'] == PD_SHORT):
            return -1 # if there are short position holding, return -1
        
def main(): # main function
    exchange.SetContractType("this_week") # set the variety type by using the weekly k-line
    while True: # enter the loop
        records = exchange.GetRecords() # get the k line array
        if len(records) < 50: continue # if the number of K line is less than 50, skip this loop.
        close = records[len(records) - 1].Close # get the closing price of the latest k-line
        position = mp() # get the position information function
        upper = TA.Highest(record, 50, 'High') # get the highest price of 50 cycles
        lower = TA.Lowest(record, 50, 'Low') # get the lowest price of 50 cycles
        middle = (upper + lower) / 2 # calculate the average value of the upper and lower rail
        obj = ext.NewPositionManager() # using the trading class library
        if position > 0 and close < middle: # If currently holding long position, and the closing price is less than the middle rail
            obj.CoverAll() # close all position
        if position < 0 and close > middle: # If currently holding short position, and the closing price is greater than the middle rail
            obj.CoverAll() # close all position
        if position == 0: # if currently holding no position
            if close > upper: # if the closing price is greater than the middle rail
                obj.OpenLong("this_week", 1) # open long position
            elif close < lower: # if the closing price is less than the middle rail
                obj.OpenShort("this_week", 1) # open short position

Seperti yang ditunjukkan di atas:

Barisan 22: Menggunakan perpustakaan kelas dagangan, ini adalah format tetap

Baris 23, 24: Ini adalah pernyataan kedudukan panjang penutupan yang menggunakan operator perbandingan dan operator logikal yang telah kita pelajari sebelum ini, yang bermaksud bahawa jika pegangan semasa adalah kedudukan panjang, dan harga penutupan adalah lebih rendah daripada rel tengah, tutup semua kedudukan.

Baris 25, 26: Ini adalah pernyataan kedudukan pendek penutupan yang menggunakan operator perbandingan dan operator logikal yang telah kita pelajari sebelum ini, yang bermaksud bahawa jika pesanan semasa adalah kedudukan pendek dan harga penutupan lebih besar daripada rel tengah, tutup semua kedudukan.

Baris 27: Tentukan status kedudukan semasa. Jika tidak ada kedudukan memegang, teruskan ke langkah seterusnya.

Baris 28, 29: Tentukan sama ada harga penutupan lebih tinggi daripada rel atas. Jika harga penutupan meningkat di atas rel atas, buka kedudukan panjang.

Baris 30, 31: Tentukan sama ada harga penutupan adalah lebih rendah daripada rel bawah. Jika harga penutupan jatuh di bawah rel bawah, buka kedudukan pendek.

Ringkasnya

Di atas kita telah belajar setiap langkah membangunkan strategi perdagangan kuantitatif yang lengkap dengan menggunakan Python, termasuk: pengenalan strategi, kaedah pengiraan saluran Donchian, logik strategi, syarat perdagangan, pelaksanaan kod strategi, dan lain-lain. Bahagian ini hanyalah strategi yang mudah. Sebagai kaedah inspirasi, terdapat lebih daripada satu cara untuk mencapainya.

Pengumuman Bahagian Seterusnya

Dalam pembangunan strategi perdagangan kuantitatif, dari perspektif kelajuan pelaksanaan bahasa pengaturcaraan, yang mana yang paling pantas? ia mesti C ++. Terutama dalam bidang derivatif kewangan dan perdagangan frekuensi tinggi. C ++ adalah unik dalam spesifisiti bahasa dan ia mempunyai kelebihan dalam pengiraan berangka. Berbanding dengan JavaScript dan Python, kelajuannya boleh meningkat dengan beberapa perintah besar. Jika anda ingin pergi ke bidang derivatif kewangan atau perdagangan frekuensi tinggi pada masa akan datang. Ini akan menjadi kursus yang tidak boleh anda lewatkan.

Latihan selepas sekolah

  1. Mulakan dari asas dan melaksanakan strategi bahagian ini.

  2. Cuba tambahkan penunjuk purata bergerak kepada strategi dalam bahagian ini untuk mengurangkan kekerapan perdagangan.


Lebih lanjut