Komoditas Futures R-Breaker Strategy

Penulis:Kebaikan, Dibuat: 2020-06-02 08:57:10, Diperbarui: 2023-11-02 19:52:44

img

Ringkasan

Strategi R-Breaker dikembangkan oleh Richard Saidenberg dan diterbitkan pada tahun 1994. Strategi ini dipilih sebagai salah satu dari sepuluh strategi perdagangan paling menguntungkan oleh majalah Futures Truth di Amerika Serikat selama 15 tahun berturut-turut. Dibandingkan dengan strategi lain, R-Breaker adalah strategi perdagangan yang menggabungkan tren dan pembalikan tren.

Resistensi dan dukungan

Secara sederhana, strategi R-Breaker adalah strategi dukungan dan resistensi harga. Strategi ini menghitung tujuh harga berdasarkan harga tertinggi, terendah dan penutupan kemarin: harga pusat (pivot) dan tiga tingkat dukungan (s1 s2, s3), tiga tingkat resistensi (r1, r2, r3). Kemudian sesuai dengan hubungan posisi antara harga saat ini dan tingkat dukungan dan resistensi ini, untuk membentuk kondisi pemicu untuk membeli dan menjual, dan melalui penyesuaian algoritma tertentu, sesuaikan jarak antara tujuh harga ini, lebih lanjut ubah nilai pemicu transaksi.

  • Breakthrough harga beli (level resistance r3) = harga tertinggi kemarin + 2 * (harga tengah - harga terendah kemarin) / 2

  • Mengamati harga jual (level resistance r2) = harga pusat + (harga tertinggi kemarin - harga terendah kemarin)

  • Harga jual terbalik (level resistance r1) = 2 * Harga pusat - harga terendah kemarin

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

  • Harga pembelian terbalik (tingkat dukungan s1) = 2 * Harga pusat - harga tertinggi kemarin

  • Harga pembelian yang diamati (tingkat dukungan s2) = harga pusat - (harga tertinggi kemarin - harga terendah kemarin)

  • Break through selling price (level support s3) = harga terendah kemarin - 2 * (harga tertinggi kemarin - harga tengah)

Dari sini kita dapat melihat bahwa strategi R-Breaker menggambar garis harga seperti kisi berdasarkan harga kemarin, dan memperbarui garis harga ini sekali sehari. Dalam analisis teknis, level support dan resistance, dan peran keduanya dapat dikonversi satu sama lain. Ketika harga berhasil memecahkan level resistance, level resistance menjadi level support; ketika harga berhasil memecahkan level support, level support menjadi level resistance.

Dalam perdagangan yang sebenarnya, level support dan resistance ini menunjukkan kepada trader arah posisi pembukaan dan penutupan dan titik perdagangan yang tepat. Pedagang dengan kondisi pembukaan dan penutupan tertentu dapat menyesuaikan secara fleksibel sesuai dengan harga intraday, harga pusat, level resistance, dan level support, dan juga dapat mengelola posisi berdasarkan garis harga grid ini.

Logika strategi

Selanjutnya, mari kita lihat bagaimana strategi R-Breaker menggunakan level support dan resistance ini. Logikanya sama sekali tidak rumit. Jika tidak ada posisi holding, masukkan ke mode trend. Ketika harga lebih besar dari harga beli breakthrough, buka posisi long; ketika harga kurang dari harga jual breakthrough, buka posisi short.

  • Mode tren

posisi panjang terbuka: jika tidak ada posisi kepemilikan dan harganya lebih tinggi dari harga pembelian terobosan

posisi pendek terbuka: jika tidak ada posisi kepemilikan dan harganya lebih rendah dari harga penjualan terobosan

close long position: jika Anda memegang posisi long, dan harga tertinggi hari ini lebih besar dari harga jual yang diamati dan harganya lebih rendah dari harga jual terbalik

close short position: jika Anda memegang posisi short, dan harga terendah hari ini lebih rendah dari harga pembelian yang diamati dan harganya lebih besar dari harga pembelian terbalik

  • Modus mundur

posisi panjang terbuka: jika Anda memegang posisi pendek, dan harga terendah hari ini lebih rendah dari harga pembelian yang diamati dan harga lebih besar dari harga pembelian terbalik

posisi pendek terbuka: jika Anda memegang posisi panjang, dan harga tertinggi hari ini lebih besar dari harga jual yang diamati dan harga lebih rendah dari harga jual terbalik

close long position: jika posisi long dipegang dan harganya lebih rendah dari harga jual breakthrough

close short position: jika posisi short dipegang dan harga lebih besar dari harga pembelian breakthrough

Jika ada posisi holding, maka masuk ke mode reversal. Ketika ada posisi holding long, dan harga tertinggi pada hari itu lebih besar dari harga jual observasi, dan harga jatuh di bawah harga jual reverse, posisi long akan ditutup dan posisi short akan terbuka secara sinkron. Ketika memegang posisi short, dan harga terendah pada hari itu kurang dari harga pembelian observasi, dan harga melanggar harga pembelian reverse, posisi short akan ditutup dan posisi long akan terbuka.

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

Menyalin strategi lengkap

Strategi lengkap telah dipublikasikan di platform FMZ (FMZ.COM), klik link di bawah ini untuk menyalin langsung, dan Anda dapat backtest tanpa konfigurasi:https://www.fmz.com/strategy/187009

Ringkasan

Alasan mengapa strategi R-Breaker populer adalah karena ini bukan semata-mata strategi pelacakan tren, tetapi strategi senyawa untuk mendapatkan pendapatan alfa tren dan alpha terbalik. Strategi dalam artikel ini hanya untuk demonstrasi, tanpa mengoptimalkan parameter dan varietas yang sesuai. Selain itu, strategi lengkap juga harus mencakup fungsi stop loss, dan teman yang tertarik dapat memperbaikinya.


Berkaitan

Lebih banyak