Sistem perdagangan garis buaya versi Python

Penulis:Kebaikan, Dibuat: 2020-05-07 14:33:19, Diperbarui: 2023-11-06 19:40:42

img

Ringkasan

Orang-orang yang telah melakukan perdagangan keuangan mungkin akan memiliki pengalaman. Kadang-kadang fluktuasi harga adalah teratur, tetapi lebih sering menunjukkan keadaan tidak stabil dari berjalan acak. Ini adalah ketidakstabilan di mana risiko dan peluang pasar terletak. Ketidakstabilan juga berarti tidak dapat diprediksi, jadi bagaimana membuat pengembalian lebih stabil dalam lingkungan pasar yang tidak dapat diprediksi juga merupakan masalah bagi setiap pedagang. Artikel ini akan memperkenalkan strategi aturan perdagangan buaya, dengan harapan menginspirasi semua orang.

Apa itu garis buaya

img

Garis buaya sebenarnya adalah tiga rata-rata bergerak khusus, yang sesuai dengan dagu garis biru, gigi garis merah, dan bibir atas garis hijau. dagu adalah rata-rata bergerak 13 periode dan bergerak 8 bar di masa depan. gigi adalah rata-rata bergerak 8 periode dan bergerak 5 bar di masa depan. bibir atas adalah rata-rata bergerak 5 periode dan bergerak 3 bar di masa depan.

Prinsip garis buaya

Garis buaya adalah seperangkat metode analisis teknis yang diringkas berdasarkan geometri dan dinamika nonlinear. Ketika dagu buaya, gigi dan bibir atas tertutup atau terjerat, itu berarti buaya sedang tidur. Pada saat ini, kita biasanya tinggal di luar pasar sampai fragmen muncul, dan hanya berpartisipasi dalam pasar tren yang jelas.

Semakin lama buaya tidur, semakin laparnya saat bangun, jadi begitu ia bangun, ia akan membuka mulutnya lebar-lebar. Jika bibir atas berada di atas gigi dan gigi berada di atas dagu, itu menunjukkan bahwa pasar telah memasuki pasar banteng dan buaya akan makan daging sapi. Jika bibir atas berada di bawah gigi dan gigi berada di bawah dagu, itu menunjukkan bahwa pasar telah memasuki pasar beruang dan buaya akan makan daging beruang. Sampai penuh, maka ia akan menutup mulutnya lagi (tahan dan dapatkan keuntungan).

Rumus perhitungan garis 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 mode polling, satu adalah fungsi onTick, dan yang lainnya adalah fungsi utama, di mana fungsi onTick dijalankan dalam loop tak terbatas dalam fungsi utama.

Langkah 2: Impor Perpustakaan Python

import talib
import numpy as np

Fungsi SMA digunakan dalam strategi kami. SMA adalah rata-rata aritmatika. Ada fungsi SMA yang sudah siap di perpustakaan talib, jadi langsung impor perpustakaan talib Python dan kemudian panggil langsung. Karena saat memanggil fungsi ini, Anda perlu melewati parameter format numpy, jadi kita perlu menggunakan import untuk mengimpor dua perpustakaan Python ini di awal strategi.

Langkah 3: Mengkonversi 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 membuat fungsi get_data, tujuan dari fungsi ini adalah untuk memproses array K-line biasa menjadi data format numpy. parameter input adalah array K-line, dan hasil output adalah data diproses dalam format numpy.

Langkah 4: Dapatkan data posisi

# 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 posisi melibatkan logika strategi. sepuluh pelajaran pertama kami selalu menggunakan posisi virtual, tetapi dalam lingkungan perdagangan nyata yang terbaik adalah menggunakan fungsi GetPosition untuk mendapatkan informasi posisi nyata, termasuk: arah posisi, keuntungan posisi dan kerugian, jumlah posisi, 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 harus terlebih dahulu menggunakan fungsi SetContractType untuk berlangganan varietas berjangka yang relevan. FMZ mendukung semua varietas berjangka komoditas Cina. Setelah berlangganan simbol berjangka, Anda dapat menggunakan fungsi GetRecords untuk mendapatkan data K-line, yang mengembalikan array.

Langkah 6: Perhitungkan 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 menghitung SMA menggunakan perpustakaan talib, Anda perlu menggunakan perpustakaan numpy untuk memproses array K-line biasa menjadi data numpy. Kemudian dapatkan dagu, gigi dan bibir atas garis buaya secara terpisah. Selain itu, parameter harga perlu diteruskan saat melakukan pesanan, sehingga kita dapat 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 menempatkan order, Anda perlu mendapatkan posisi yang sebenarnya. Fungsi get_position yang kami tentukan sebelumnya akan mengembalikan jumlah posisi yang sebenarnya. Jika posisi saat ini panjang, akan mengembalikan angka positif. Jika posisi saat ini pendek, akan mengembalikan angka negatif. Jika tidak ada posisi, akan mengembalikan 0. Akhirnya, fungsi beli dan jual digunakan untuk menempatkan order sesuai dengan logika 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 langsung link di bawah ini untuk menyalin strategi lengkap tanpa konfigurasi:https://www.fmz.com/strategy/199025

Akhir

Peran terbesar dari aturan perdagangan buaya adalah untuk membantu kita mempertahankan arah yang sama dengan pasar saat berdagang, terlepas dari bagaimana perubahan harga pasar saat ini, dan terus mendapatkan keuntungan sampai pasar konsolidasi muncul.


Berkaitan

Lebih banyak