Strategi R-Breaker Komoditi Hadapan

Penulis:Kebaikan, Dicipta: 2020-06-02 08:57:10, Dikemas kini: 2023-11-02 19:52:44

img

Ringkasan

Strategi R-Breaker telah dibangunkan oleh Richard Saidenberg dan diterbitkan pada tahun 1994. Ia telah dipilih sebagai salah satu daripada sepuluh strategi perdagangan yang paling menguntungkan oleh majalah Futures Truth di Amerika Syarikat selama 15 tahun berturut-turut. Berbanding dengan strategi lain, R-Breaker adalah strategi perdagangan yang menggabungkan trend dan pembalikan trend.

Ketahanan dan sokongan

Secara ringkasnya, strategi R-Breaker adalah strategi sokongan dan rintangan harga. Ia mengira tujuh harga berdasarkan harga tertinggi, terendah dan penutupan semalam: harga pusat (pivot) dan tiga tahap sokongan (s1 s2, s3), tiga tahap rintangan (r1, r2, r3). Kemudian mengikut hubungan kedudukan antara harga semasa dan tahap sokongan dan rintangan ini, untuk membentuk keadaan pencetus untuk membeli dan menjual, dan melalui penyesuaian algoritma tertentu, sesuaikan jarak antara tujuh harga ini, ubah nilai pencetus urus niaga.

  • Harga beli pecah (tahap rintangan r3) = harga tertinggi semalam + 2 * (harga pusat - harga terendah semalam) / 2

  • Harga jualan yang diperhatikan (tahap rintangan r2) = harga pusat + (harga tertinggi semalam - harga terendah semalam)

  • Harga jual terbalik (tahap rintangan r1) = 2 * Harga pusat - harga terendah semalam

  • Harga pusat (pivot) = (harga tertinggi semalam + harga penutupan semalam + harga terendah semalam) / 3

  • Harga beli terbalik (tahap sokongan s1) = 2 * Harga pusat - harga tertinggi semalam

  • Harga pembelian yang diperhatikan (tahap sokongan s2) = harga pusat - (harga tertinggi semalam - harga terendah semalam)

  • Harga jualan pecah (tahap sokongan s3) = harga terendah semalam - 2 * (harga tertinggi semalam - harga pusat)

Dari sini kita dapat melihat bahawa strategi R-Breaker menarik garis harga seperti grid berdasarkan harga semalam, dan mengemas kini garis harga ini sekali sehari. Dalam analisis teknikal, tahap sokongan dan rintangan, dan peranan keduanya dapat ditukar satu sama lain. Apabila harga berjaya memecahkan tahap rintangan, tahap rintangan menjadi tahap sokongan; apabila harga berjaya memecahkan tahap sokongan, tahap sokongan menjadi tahap rintangan.

Dalam perdagangan sebenar, tahap sokongan dan rintangan ini menunjukkan kepada peniaga arah pembukaan dan penutupan kedudukan dan titik perdagangan yang tepat. Pedagang dengan syarat pembukaan dan penutupan tertentu dapat menyesuaikan dengan fleksibel mengikut harga intraday, harga pusat, tahap rintangan, dan tahap sokongan, dan juga boleh menguruskan kedudukan berdasarkan garis harga grid ini.

Logik strategi

Kemudian, mari kita lihat bagaimana strategi R-Breaker menggunakan tahap sokongan dan rintangan ini. Logiknya sama sekali tidak rumit. Jika tidak ada kedudukan pegangan, masukkan mod trend. Apabila harga lebih besar daripada harga pembelian terobosan, buka kedudukan panjang; apabila harga kurang daripada harga penjualan terobosan, buka kedudukan pendek.

  • Mod trend

Posisi panjang terbuka: jika tidak ada kedudukan pegangan dan harga lebih tinggi daripada harga pembelian terobosan

Posisi pendek terbuka: jika tidak ada kedudukan pegangan dan harga adalah lebih rendah daripada harga jualan terobosan

tutup kedudukan panjang: jika anda memegang kedudukan panjang, dan harga tertinggi hari ini adalah lebih besar daripada harga jualan pemerhatian dan harga adalah lebih rendah daripada harga jualan terbalik

close short position: jika anda memegang kedudukan pendek, dan harga terendah hari ini adalah lebih rendah daripada harga pembelian yang diperhatikan dan harga lebih besar daripada harga pembelian terbalik

  • Mod belakang

kedudukan panjang terbuka: jika anda memegang kedudukan pendek, dan harga terendah hari ini adalah kurang daripada harga pembelian pemerhatian dan harga adalah lebih besar daripada harga pembelian terbalik

kedudukan pendek terbuka: jika anda memegang kedudukan panjang, dan harga tertinggi hari ini adalah lebih besar daripada harga jualan pemerhatian dan harga adalah lebih rendah daripada harga jualan terbalik

Posisi panjang ditutup: jika kedudukan panjang dipegang dan harga adalah lebih rendah daripada harga jualan terobosan

Posisi pendek yang ditutup: jika kedudukan pendek dipegang dan harga lebih tinggi daripada harga pembelian terobosan

Jika terdapat kedudukan memegang, ia memasuki mod pembalikan. Apabila terdapat kedudukan memegang panjang, dan harga tertinggi pada hari itu lebih besar daripada harga jualan pemerhatian, dan harga jatuh di bawah harga jualan terbalik, kedudukan panjang akan ditutup dan kedudukan pendek akan dibuka secara serentak. Apabila memegang kedudukan pendek, dan harga terendah hari ini adalah kurang daripada harga pembelian pemerhatian, dan harga memecahkan harga pembelian terbalik, kedudukan pendek akan ditutup dan kedudukan panjang akan dibuka.

Menulis strategi

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

# Strategy main function
def onTick():
    # retrieve data
    exchange.SetContractType(contract_type)   # Subscribe to futures products
    bars_arr = exchange.GetRecords(PERIOD_D1)  # Get daily K line array
    if len(bars_arr) < 2:  # If the number of K lines is less than 2
        return
    yesterday_open = bars_arr[-2]['Open']     # Yesterday's opening price
    yesterday_high = bars_arr[-2]['High']     # Yesterday's highest price
    yesterday_low = bars_arr[-2]['Low']       # Yesterday's lowest price
    yesterday_close = bars_arr[-2]['Close']   # Yesterday's closing price

    # Calculation
    pivot = (yesterday_high + yesterday_close + yesterday_low) / 3 # Pivot point
    r1 = 2 * pivot - yesterday_low # Resistance level 1
    r2 = pivot + (yesterday_high - yesterday_low) # Resistance level 2
    r3 = yesterday_high + 2 * (pivot - yesterday_low) # Resistance level 3
    s1 = 2 * pivot - yesterday_high  # Support level 1
    s2 = pivot - (yesterday_high - yesterday_low)  # Support level 2
    s3 = yesterday_low - 2 * (yesterday_high - pivot)  # Support level 3

    today_high = bars_arr[-1]['High'] # Today's highest price
    today_low = bars_arr[-1]['Low'] # Today's lowest price
    current_price = _C(exchange.GetTicker).Last # Current price

    # Get positions
    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'] == contract_type:  # If the position variety equals the subscription variety
                if i['Type'] % 2 == 0:  # If it is long position
                    position = i['Amount']  # The number of assigned positions is positive
                else:
                    position = -i['Amount']  # The number of assigned positions is negative
                profit = i['Profit']  # Get position profit and loss
    else:
        position = 0  # The number of assigned positions is 0
        profit = 0  # The value of the assigned position is 0
        
    if position == 0:  # If there is no position
        if current_price > r3:  # If the current price is greater than Resistance level 3
            exchange.SetDirection("buy")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # open long position
        if current_price < s3:  # If the current price is less than Support level 3
            exchange.SetDirection("sell")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # open short position
        
    if position > 0:  # if holding long position
        if today_high > r2 and current_price < r1 or current_price < s3:  # If today's highest price is greater than Resistance level 2, and the current price is less than Resistance level 1
            exchange.SetDirection("closebuy")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # close long position
            exchange.SetDirection("sell")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # open short position

    if position < 0:  # if holding short position
        if today_low < s2 and current_price > s1 or current_price > r3:  # If today's lowest price is less than Support level 2, and the current price is greater than Support level 1
            exchange.SetDirection("closesell")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # close short position
            exchange.SetDirection("buy")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # open long position

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

Salin strategi lengkap

Strategi lengkap telah diterbitkan di platform FMZ (FMZ.COM), klik pautan di bawah untuk menyalin secara langsung, dan anda boleh backtest tanpa konfigurasi:https://www.fmz.com/strategy/187009

Ringkasan

Strategi R-Breaker popular kerana ia bukan semata-mata strategi pengesanan trend, tetapi merupakan strategi gabungan untuk memperoleh kedua-dua pendapatan trend alpha dan alpha terbalik. Strategi dalam artikel ini hanya untuk demonstrasi, tanpa mengoptimumkan parameter dan varieti yang sesuai. Di samping itu, strategi lengkap juga mesti merangkumi fungsi stop loss, dan rakan-rakan yang berminat dapat memperbaikinya.


Berkaitan

Lebih lanjut