Sistem perdagangan garisan buaya versi Python

Penulis:Kebaikan, Dicipta: 2020-05-07 14:33:19, Dikemas kini: 2023-11-06 19:40:42

img

Ringkasan

Orang yang telah melakukan perdagangan kewangan mungkin mempunyai pengalaman. Kadang-kadang turun naik harga adalah biasa, tetapi lebih kerap ia menunjukkan keadaan tidak stabil berjalan secara rawak. Ini adalah ketidakstabilan yang mana risiko dan peluang pasaran terletak. Ketidakstabilan juga bermakna tidak dapat diramalkan, jadi bagaimana untuk membuat pulangan lebih stabil dalam persekitaran pasaran yang tidak dapat diramalkan juga merupakan masalah bagi setiap peniaga.

Apakah garis buaya?

img

Garis buaya sebenarnya adalah tiga purata bergerak khas, yang sepadan dengan dagu garis biru, gigi garis merah, dan bibir atas garis hijau. dagu adalah purata bergerak 13 tempoh dan bergerak 8 bar ke masa depan. gigi adalah purata bergerak 8 tempoh dan bergerak 5 bar ke masa depan. bibir atas adalah purata bergerak 5 tempoh dan bergerak 3 bar ke masa depan.

Prinsip garis buaya

Garis buaya adalah satu set kaedah analisis teknikal yang disimpulkan berdasarkan geometri dan dinamik bukan linear. Apabila dagu, gigi dan bibir atas buaya ditutup atau terjerat, ini bermakna buaya sedang tidur. Pada masa ini, kita biasanya tinggal di luar pasaran sehingga serpihan muncul, dan hanya mengambil bahagian dalam pasaran trend yang jelas.

Apabila seekor buaya tidur lebih lama, ia akan lebih lapar apabila ia bangun, jadi apabila ia bangun, ia akan membuka mulutnya dengan lebar. Jika bibir atas berada di atas gigi dan gigi berada di atas dagu, ia menunjukkan bahawa pasaran telah memasuki pasaran lembu dan buaya akan makan daging lembu. Jika bibir atas berada di bawah gigi dan gigi berada di bawah dagu, ia menunjukkan bahawa pasaran telah memasuki pasaran beruang dan buaya akan makan daging beruang. Sehingga ia penuh, ia akan menutup mulutnya lagi (tahan dan membuat keuntungan).

Formula pengiraan garisan buaya

Bibir atas = REF(SMA(VAR1,5,1),3) Gigi = REF(SMA(VAR1,8,1),5) Chin = REF(SMA(VAR1,13,1)

Komposisi strategi buaya

Langkah 1: Menulis kerangka strategi

# Strategy main function
def onTick():
     pass

# Program entry
def main ():
     while True: # Enter infinite loop mode
         onTick() # execute strategy main function
         Sleep(1000) # sleep for 1 second

FMZ menggunakan mod pengundian, satu adalah fungsi onTick, dan yang lain adalah fungsi utama, di mana fungsi onTick dijalankan dalam gelung tanpa akhir dalam fungsi utama.

Langkah 2: Memimport Perpustakaan Python

import talib
import numpy as np

Fungsi SMA digunakan dalam strategi kami. SMA adalah purata aritmatika. Terdapat fungsi SMA siap sedia di perpustakaan talib, jadi langsung import perpustakaan talib Python dan kemudian memanggilnya secara langsung. Kerana ketika memanggil fungsi ini, anda perlu lulus parameter format numpy, jadi kita perlu menggunakan import untuk mengimport dua perpustakaan Python ini pada awal strategi.

Langkah 3: Mengubah data array K-line

# Convert the K-line array into an array of highest price, lowest price, and closing price, for conversion to numpy.array
def get_data(bars):
    arr = []
    for i in bars:
        arr.append(i['Close'])
    return arr

Di sini kita mencipta fungsi get_data, tujuan fungsi ini adalah untuk memproses susunan K-garis biasa ke dalam data format numpy. parameter input adalah susunan K-garis, dan hasil output adalah data yang diproses dalam format numpy.

Langkah 4: Dapatkan data kedudukan

# Get the number of positions
def get_position ():
     # Get position
     position = 0 # The number of assigned positions is 0
     position_arr = _C (exchange.GetPosition) # Get array of positions
     if len (position_arr)> 0: # If the position array length is greater than 0
         for i in position_arr:
             if i ['ContractType'] == 'rb000': # If the position symbol is equal to the subscription symbol
                 if i ['Type']% 2 == 0: # If it is long position
                     position = i ['Amount'] # Assigning a positive number of positions
                 else:
                     position = -i ['Amount'] # Assigning a negative number of positions
     return position

Status kedudukan melibatkan logik strategi. Sepuluh pelajaran pertama kami sentiasa menggunakan kedudukan maya, tetapi dalam persekitaran perdagangan sebenar adalah yang terbaik untuk menggunakan fungsi GetPosition untuk mendapatkan maklumat kedudukan sebenar, termasuk: arah kedudukan, keuntungan dan kerugian kedudukan, bilangan kedudukan, dll.

Langkah 5: Dapatkan data

exchange.SetContractType('rb000') # Subscribe the futures varieties
     bars_arr = exchange.GetRecords() # Get K line array
     if len(bars_arr) < 22: # If the number of K lines is less than 22
         return

Sebelum memperoleh data, anda mesti terlebih dahulu menggunakan fungsi SetContractType untuk melanggan pelbagai niaga hadapan yang berkaitan. FMZ menyokong semua jenis niaga hadapan komoditi Cina. Selepas melanggan simbol niaga hadapan, anda boleh menggunakan fungsi GetRecords untuk mendapatkan data K-line, yang mengembalikan array.

Langkah 6: Hitung data

np_arr = np.array (get_data (bars_arr)) # Convert closing price array
sma13 = talib.SMA (np_arr, 130) [-9] # chin
sma8 = talib.SMA (np_arr, 80) [-6] # teeth
sma5 = talib.SMA (np_arr, 50) [-4] # upper lip
current_price = bars_arr [-1] ['Close'] # latest price

Sebelum mengira SMA menggunakan perpustakaan talib, anda perlu menggunakan perpustakaan numpy untuk memproses array K-line biasa ke dalam data numpy. Kemudian dapatkan dagu, gigi dan bibir atas garis buaya secara berasingan. Di samping itu, parameter harga perlu diteruskan ketika meletakkan pesanan, jadi kita boleh menggunakan harga penutupan dalam array K-line.

Langkah 7: Buat pesanan

position = get_position ()
if position == 0: # If there is no position
     if current_price> sma5: # If the current price is greater than the upper lip
         exchange.SetDirection ("buy") # Set the trading direction and type
         exchange.Buy (current_price + 1, 1) # open long position order
     if current_price <sma13: # If the current price is less than the chin
         exchange.SetDirection ("sell") # Set the trading direction and type
         exchange.Sell (current_price-1, 1) # open short position order
    
if position> 0: # If you have long positions
     if current_price <sma8: # If the current price is less than teeth
         exchange.SetDirection ("closebuy") # Set the trading direction and type
         exchange.Sell (current_price-1, 1) # close long position

if position <0: # If you have short position
     if current_price> sma8: # If the current price is greater than the tooth
         exchange.SetDirection ("closesell") # Set the trading direction and type
         exchange.Buy (current_price + 1, 1) # close short position

Sebelum meletakkan pesanan, anda perlu mendapatkan kedudukan sebenar. Fungsi get_position yang kita tentukan sebelumnya akan mengembalikan bilangan sebenar kedudukan. Jika kedudukan semasa panjang, ia akan mengembalikan nombor positif. Jika kedudukan semasa pendek, ia akan mengembalikan nombor negatif. Jika tidak ada kedudukan, kembali 0. Akhirnya, fungsi beli dan jual digunakan untuk meletakkan pesanan mengikut logik perdagangan di atas, tetapi sebelum ini, arah dan jenis perdagangan juga perlu ditetapkan.

Strategi Lengkap

'' 'backtest
start: 2019-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1h
exchanges: [{"eid": "Futures_CTP", "currency": "FUTURES"}]
'' '

import talib
import numpy as np


# Convert the K-line array into an array of highest price, lowest price, and closing price, used to convert to numpy.array type data
def get_data (bars):
    arr = []
    for i in bars:
        arr.append (i ['Close'])
    return arr


# Get the number of positions
def get_position ():
    # Get position
    position = 0 # The number of assigned positions is 0
    position_arr = _C (exchange.GetPosition) # Get array of positions
    if len (position_arr)> 0: # If the position array length is greater than 0
        for i in position_arr:
            if i ['ContractType'] == 'rb000': # If the position symbol is equal to the subscription symbol
                if i ['Type']% 2 == 0: # If it is long
                    position = i ['Amount'] # Assign a positive number of positions
                else:
                    position = -i ['Amount'] # Assign a negative number of positions
    return position
    
    

# Strategy main function
def onTick ():
    # retrieve data
    exchange.SetContractType ('rb000') # Subscribe to futures varieties
    bars_arr = exchange.GetRecords () # Get K line array
    if len (bars_arr) <22: # If the number of K lines is less than 22
        return
    
    # Calculation
    np_arr = np.array (get_data (bars_arr)) # Convert closing price array
    sma13 = talib.SMA (np_arr, 130) [-9] # chin
    sma8 = talib.SMA (np_arr, 80) [-6] # teeth
    sma5 = talib.SMA (np_arr, 50) [-4] # upper lip
    current_price = bars_arr [-1] ['Close'] # latest price

    position = get_position ()
    if position == 0: # If there is no position
        if current_price> sma5: # If the current price is greater than the upper lip
            exchange.SetDirection ("buy") # Set the trading direction and type
            exchange.Buy (current_price + 1, 1) # open long position order
        if current_price <sma13: # If the current price is less than the chin
            exchange.SetDirection ("sell") # Set the trading direction and type
            exchange.Sell (current_price-1, 1) # open short position order
        
    if position> 0: # If you have long positions
        if current_price <sma8: # If the current price is less than teeth
            exchange.SetDirection ("closebuy") # Set the trading direction and type
            exchange.Sell (current_price-1, 1) # close long position

    if position <0: # If you have short positions
        if current_price> sma8: # If the current price is greater than the tooth
            exchange.SetDirection ("closesell") # Set the trading direction and type
            exchange.Buy (current_price + 1, 1) # close short position

            
# Program main function
def main ():
    while True: # loop
        onTick () # execution strategy main function
        Sleep (1000) # sleep for 1 second

Klik terus pada pautan di bawah untuk menyalin strategi lengkap tanpa konfigurasi:https://www.fmz.com/strategy/199025

Akhir

Peranan terbesar peraturan perdagangan buaya adalah untuk membantu kita mengekalkan arah yang sama dengan pasaran semasa berdagang, tidak kira bagaimana perubahan harga pasaran semasa, dan terus mendapat keuntungan sehingga pasaran penyatuan muncul.


Berkaitan

Lebih lanjut