Strategi Rasio Rata-rata Pergerakan Rantai Filter Tren Ganda


Tanggal Pembuatan: 2023-12-28 17:37:14 Akhirnya memodifikasi: 2023-12-28 17:37:14
menyalin: 1 Jumlah klik: 623
1
fokus pada
1623
Pengikut

Strategi Rasio Rata-rata Pergerakan Rantai Filter Tren Ganda

Ringkasan

Strategi ini didasarkan pada indikator rasio rata-rata bergerak ganda, yang digabungkan dengan filter Brin dan indikator penyaringan tren ganda, dengan strategi mengikuti tren dengan mekanisme keluar berantai. Strategi ini bertujuan untuk menggunakan indikator rasio rata-rata bergerak untuk mengidentifikasi arah tren garis tengah dan panjang, memilih tempat masuk yang lebih baik ketika arah tren jelas, dan mengatur stop-loss, mekanisme keluar berhenti untuk mengunci keuntungan dan mengurangi kerugian.

Prinsip Strategi

  1. Menghitung rata-rata bergerak cepat (rata-rata 10 hari) dan rata-rata bergerak lambat (rata-rata 50 hari) dan menghitung rasio mereka, yang disebut rasio rata-rata bergerak harga. Rasio ini dapat secara efektif mengidentifikasi perubahan tren garis panjang dalam harga.
  2. Konversi rasio harga rata-rata bergerak menjadi persentase bahwa rasio saat ini relatif kuat selama periode waktu yang lalu. Rasio persentase ini didefinisikan sebagai oscillator.
  3. Ketika oscillator di atas melewati setelan membeli ambang batas ((10) menghasilkan sinyal beli, di bawah melanggar menjual ambang batas ((90) menghasilkan sinyal jual, untuk mengikuti tren.
  4. Dengan menggunakan indikator bandwidth Brin untuk memfilter sinyal perdagangan, Brin melakukan operasi ketika bandwidthnya menyempit.
  5. Dengan menggunakan indikator penyaringan tren ganda, sinyal beli hanya dihasilkan ketika harga berada di saluran tren naik, dan sinyal jual hanya dihasilkan ketika harga berada di saluran turun, sehingga menghindari operasi berlawanan arah.
  6. Mengatur mekanisme keluar berantai, termasuk stop, stop loss, dan keluar kombinasi, dapat mengatur beberapa kondisi keluar, memprioritaskan keluar dari kondisi yang paling menguntungkan.

Keunggulan Strategis

  1. Mekanisme penyaringan tren ganda, dapat diandalkan untuk menentukan arah tren utama, menghindari operasi berlawanan arah.
  2. Indikator rasio rata-rata bergerak lebih efektif dalam menilai perubahan tren daripada rata-rata bergerak tunggal.
  3. Indikator Bandwidth Brin dapat secara efektif memantau pasar pada periode fluktuasi rendah, di mana sinyal perdagangan lebih dapat diandalkan.
  4. Mekanisme Chain Exit membuat keuntungan lebih stabil dan memaksimalkan seluruh keuntungan.

Risiko dan Solusi

  1. Ketika tidak ada tren yang jelas dalam situasi getaran, akan terjadi lebih banyak sinyal salah dan pembalikan. Solusinya adalah dengan menggabungkan bandwidth Brin yang terfilter, dan melakukan operasi saat menyempit.
  2. Ketika ada pergeseran tren yang jelas, rata-rata bergerak akan mengalami lag dan tidak dapat mengetahui sinyal pergeseran pada saat pertama. Solusinya adalah mempersingkat parameter siklus rata-rata bergerak secara tepat.
  3. Dalam situasi yang terjadi, stop loss mungkin akan terjatuh seketika, menyebabkan kerugian yang lebih besar. Solusi adalah parameter yang meredakan stop loss dengan tepat.

Arah optimasi strategi

  1. Optimasi parameter. Untuk mencari kombinasi optimal dari parameter, dapat dilakukan pengujian langkah demi langkah pada siklus moving average, titik jual beli oscillator, parameter Brin dan parameter filter tren.
  2. Integrasi dengan indikator lain. Anda dapat mempertimbangkan untuk memasukkan indikator lain yang menilai perubahan tren, seperti indikator KD, indikator MACD, dan lain-lain, untuk meningkatkan akurasi strategi.
  3. Pembelajaran mesin. Dapat mengumpulkan data historis, menggunakan model pelatihan algoritma pembelajaran mesin, mengoptimalkan parameter secara dinamis, dan menyesuaikan parameter secara adaptif.

Meringkaskan

Strategi ini menggabungkan penggunaan indikator rasio rata-rata bergerak ganda dan indikator Brin Belt untuk menentukan arah tren garis panjang, mencari titik masuk yang optimal setelah mengkonfirmasi tren, dan menyiapkan mekanisme keluar berantai untuk mengunci keuntungan, reliabilitas yang tinggi, dan efektivitasnya jelas. Strategi ini dapat ditingkatkan lebih lanjut dan meningkatkan profitabilitas dengan mengoptimalkan parameter, menambahkan indikator penilaian bantu lainnya, dan pembelajaran mesin.

Kode Sumber Strategi
/*backtest
start: 2023-12-20 00:00:00
end: 2023-12-27 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Premium MA Ratio Strategy", overlay = true)

// Input: Adjustable parameters for Premium MA Ratio
fast_length = input(10, title = "Fast MA Length")
slow_length = input(50, title = "Slow MA Length")
oscillator_threshold_buy = input(10, title = "Oscillator Buy Threshold")
oscillator_threshold_sell = input(90, title = "Oscillator Sell Threshold")

// Input: Adjustable parameters for Bollinger Bands
bb_length = input(20, title = "Bollinger Bands Length")
bb_source = input(close, title = "Bollinger Bands Source")
bb_deviation = input(2.0, title = "Bollinger Bands Deviation")
bb_width_threshold = input(30, title = "BB Width Threshold")
use_bb_filter = input(true, title = "Use BB Width Filter?")

// Input: Adjustable parameters for Trend Filter
use_trend_filter = input(true, title = "Use Trend Filter?")
trend_filter_period_1 = input(50, title = "Trend Filter Period 1")
trend_filter_period_2 = input(200, title = "Trend Filter Period 2")
use_second_trend_filter = input(true, title = "Use Second Trend Filter?")

// Input: Adjustable parameters for Exit Strategies
use_exit_strategies = input(true, title = "Use Exit Strategies?")
use_take_profit = input(true, title = "Use Take Profit?")
take_profit_ticks = input(150, title = "Take Profit in Ticks")
use_stop_loss = input(true, title = "Use Stop Loss?")
stop_loss_ticks = input(100, title = "Stop Loss in Ticks")
use_combined_exit = input(true, title = "Use Combined Exit Strategy?")
combined_exit_ticks = input(50, title = "Combined Exit Ticks")

// Input: Adjustable parameters for Time Filter
use_time_filter = input(false, title = "Use Time Filter?")
start_hour = input(8, title = "Start Hour")
end_hour = input(16, title = "End Hour")

// Calculate moving averages
fast_ma = sma(close, fast_length)
slow_ma = sma(close, slow_length)

// Calculate the premium price moving average ratio
premium_ratio = fast_ma / slow_ma * 100

// Calculate the percentile rank of the premium ratio
percentile_rank(src, length) =>
    rank = 0.0
    for i = 1 to length
        if src > src[i]
            rank := rank + 1.0
    percentile = rank / length * 100

// Calculate the percentile rank for the premium ratio using slow_length periods
premium_ratio_percentile = percentile_rank(premium_ratio, slow_length)

// Calculate the oscillator based on the percentile rank
oscillator = premium_ratio_percentile

// Dynamic coloring for the oscillator line
oscillator_color = oscillator > 50 ? color.green : color.red

// Plot the oscillator on a separate subplot as a line
hline(50, "Midline", color = color.gray)
plot(oscillator, title = "Oscillator", color = oscillator_color, linewidth = 2)

// Highlight the overbought and oversold areas
bgcolor(oscillator > oscillator_threshold_sell ? color.red : na, transp = 80)
bgcolor(oscillator < oscillator_threshold_buy ? color.green : na, transp = 80)

// Plot horizontal lines for threshold levels
hline(oscillator_threshold_buy, "Buy Threshold", color = color.green)
hline(oscillator_threshold_sell, "Sell Threshold", color = color.red)

// Calculate Bollinger Bands width
bb_upper = sma(bb_source, bb_length) + bb_deviation * stdev(bb_source, bb_length)
bb_lower = sma(bb_source, bb_length) - bb_deviation * stdev(bb_source, bb_length)
bb_width = bb_upper - bb_lower

// Calculate the percentile rank of Bollinger Bands width
bb_width_percentile = percentile_rank(bb_width, bb_length)

// Plot the Bollinger Bands width percentile line
plot(bb_width_percentile, title = "BB Width Percentile", color = color.blue, linewidth = 2)

// Calculate the trend filters
trend_filter_1 = sma(close, trend_filter_period_1)
trend_filter_2 = sma(close, trend_filter_period_2)

// Strategy logic
longCondition = crossover(premium_ratio_percentile, oscillator_threshold_buy)
shortCondition = crossunder(premium_ratio_percentile, oscillator_threshold_sell)

// Apply Bollinger Bands width filter if enabled
if (use_bb_filter)
    longCondition := longCondition and bb_width_percentile < bb_width_threshold
    shortCondition := shortCondition and bb_width_percentile < bb_width_threshold

// Apply trend filters if enabled
if (use_trend_filter)
    longCondition := longCondition and (close > trend_filter_1)
    shortCondition := shortCondition and (close < trend_filter_1)

// Apply second trend filter if enabled
if (use_trend_filter and use_second_trend_filter)
    longCondition := longCondition and (close > trend_filter_2)
    shortCondition := shortCondition and (close < trend_filter_2)

// Apply time filter if enabled
if (use_time_filter)
    longCondition := longCondition and (hour >= start_hour and hour <= end_hour)
    shortCondition := shortCondition and (hour >= start_hour and hour <= end_hour)

// Generate trading signals with exit strategies
if (use_exit_strategies)
    strategy.entry("Buy", strategy.long, when = longCondition)
    strategy.entry("Sell", strategy.short, when = shortCondition)
    
    // Define unique exit names for each order
    buy_take_profit_exit = "Buy Take Profit"
    buy_stop_loss_exit = "Buy Stop Loss"
    sell_take_profit_exit = "Sell Take Profit"
    sell_stop_loss_exit = "Sell Stop Loss"
    combined_exit = "Combined Exit"
    
    // Exit conditions for take profit
    if (use_take_profit)
        strategy.exit(buy_take_profit_exit, from_entry = "Buy", profit = take_profit_ticks)
        strategy.exit(sell_take_profit_exit, from_entry = "Sell", profit = take_profit_ticks)
    
    // Exit conditions for stop loss
    if (use_stop_loss)
        strategy.exit(buy_stop_loss_exit, from_entry = "Buy", loss = stop_loss_ticks)
        strategy.exit(sell_stop_loss_exit, from_entry = "Sell", loss = stop_loss_ticks)
    
    // Combined exit strategy
    if (use_combined_exit)
        strategy.exit(combined_exit, from_entry = "Buy", loss = combined_exit_ticks, profit = combined_exit_ticks)