Strategi Nisbah Pergerakan Purata Pergerakan Rantaian Dwi Trend


Tarikh penciptaan: 2023-12-28 17:37:14 Akhirnya diubah suai: 2023-12-28 17:37:14
Salin: 1 Bilangan klik: 623
1
fokus pada
1623
Pengikut

Strategi Nisbah Pergerakan Purata Pergerakan Rantaian Dwi Trend

Gambaran keseluruhan

Strategi ini adalah strategi mengikuti trend berdasarkan indikator rasio purata bergerak berganda, digabungkan dengan penapis Brin dan indikator penapisan trend berganda, menggunakan mekanisme keluar berantai. Strategi ini bertujuan untuk menggunakan indikator rasio purata bergerak untuk mengenal pasti arah trend garis tengah dan panjang, memilih tempat masuk yang lebih baik apabila arah trend jelas, dan menetapkan mekanisme berhenti dan berhenti untuk mengunci keuntungan dan mengurangkan kerugian.

Prinsip Strategi

  1. Hitung purata bergerak cepat (dalam garis 10 hari) dan purata bergerak perlahan (dalam garis 50 hari) dan mengira nisbahnya, yang dikenali sebagai nisbah purata bergerak harga. Nisbah ini dapat mengidentifikasi perubahan trend garis panjang dalam harga.
  2. Ubah rasio purata bergerak harga kepada peratusan, iaitu kadar semasa yang agak kuat dalam tempoh masa yang lalu. Peratusan ini ditakrifkan sebagai pendingin.
  3. Apabila pengayun di atas melintasi tetingkap beli yang ditetapkan ((10) menghasilkan isyarat beli, dan apabila menembusi tetingkap jual yang ditetapkan ((90) menghasilkan isyarat jual, trend diikuti.
  4. Penapis isyarat perdagangan digabungkan dengan penunjuk lebar jalur Brin, dan operasi dilakukan apabila jalur Brin menyempit.
  5. Menggunakan penapis trend ganda, isyarat beli dihasilkan hanya apabila harga berada di saluran tren naik, isyarat jual dihasilkan hanya apabila harga berada di saluran menurun, dan dengan itu mengelakkan operasi berlawanan arah.
  6. Menetapkan mekanisme keluar berantai, termasuk menghentikan, menghentikan kerugian dan keluar gabungan, boleh menetapkan beberapa keadaan keluar, mengutamakan keluar dari keadaan yang paling menguntungkan.

Kelebihan Strategik

  1. Mekanisme penapisan trend berganda, menentukan arah trend utama dengan pasti, mengelakkan operasi berlawanan arah.
  2. Indikator nisbah purata bergerak lebih berkesan dalam menentukan perubahan trend daripada purata bergerak tunggal.
  3. Brin Bandwidth Indicator berkesan untuk menentukan pasaran pada tempoh turun naik yang rendah, di mana isyarat perdagangan lebih dipercayai.
  4. Mekanisme keluar berantai menjadikan keuntungan lebih stabil dan memaksimumkan keuntungan keseluruhan.

Risiko dan Penyelesaian

  1. Apabila tidak ada trend yang jelas dalam keadaan gegaran, terdapat lebih banyak isyarat salah dan pembalikan. Penyelesaian adalah dengan menggabungkan pengaliran lebar lebar Brin dan melakukan operasi apabila ia menyempit.
  2. Apabila terdapat pembalikan trend yang jelas, purata bergerak akan mengalami keterlambatan dan tidak dapat mengetahui isyarat pembalikan pada mulanya. Penyelesaian adalah dengan cara yang sesuai untuk mempersingkat parameter kitaran purata bergerak.
  3. Apabila terdapat jurang lompat tinggi, titik penangguhan mungkin akan terkena seketika, menyebabkan kerugian yang lebih besar. Penyelesaian adalah parameter untuk melepaskan titik penangguhan dengan betul.

Arah pengoptimuman strategi

  1. Pengoptimuman parameter. Percubaan langkah-langkah boleh dilakukan untuk mencari kombinasi parameter yang paling baik untuk kitaran purata bergerak, titik jual beli osilator, parameter Brin dan parameter penapis trend.
  2. Mengintegrasikan penunjuk lain. Anda boleh mempertimbangkan untuk memasukkan penunjuk lain yang menentukan perubahan trend, seperti penunjuk KD, penunjuk MACD, dan sebagainya, untuk meningkatkan ketepatan strategi.
  3. Pembelajaran mesin. Ia boleh mengumpul data sejarah, menggunakan model latihan algoritma pembelajaran mesin, mengoptimumkan parameter secara dinamik, dan menyesuaikan parameter secara beradaptasi.

ringkaskan

Strategi ini menggunakan pengukuran rasio rata-rata bergerak ganda dan pengukuran Brin Belt untuk menentukan arah trend garis panjang, mencari titik masuk yang terbaik setelah trend disahkan, dan menetapkan mekanisme keluar berantai untuk mengunci keuntungan, kebolehpercayaan yang tinggi, keberkesanan yang jelas. Strategi ini dapat diperbaiki dan meningkatkan keuntungan dengan pengoptimuman parameter, menambah petunjuk penilaian tambahan dan pembelajaran mesin.

Kod 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)