Penjejakan arah aliran purata bergerak berganda dan strategi perdagangan adaptif kawalan risiko ATR

SMA ATR TP SL HTF
Tarikh penciptaan: 2024-11-29 14:56:43 Akhirnya diubah suai: 2024-11-29 14:56:43
Salin: 0 Bilangan klik: 522
1
fokus pada
1617
Pengikut

Penjejakan arah aliran purata bergerak berganda dan strategi perdagangan adaptif kawalan risiko ATR

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan yang menyesuaikan diri yang menggabungkan trend trend binari klasik dan kawalan angin dinamik ATR. Strategi ini menawarkan dua mod perdagangan: mod asas menggunakan trend trend yang sederhana dengan silang binari, mod lanjutan menambah penapis trend pada jangka masa yang lebih tinggi dan mekanisme berhenti dinamik berdasarkan ATR. Strategi ini dapat beralih antara kedua-dua mod dengan menu turun ke bawah yang mudah, baik untuk kemudahan pemula dan memenuhi keperluan pengendalian risiko pedagang berpengalaman.

Prinsip Strategi

Strategi 1 ((mod asas) menggunakan sistem dua rata-rata pada hari ke-21 dan ke-49 yang menghasilkan banyak isyarat apabila rata-rata cepat melintasi rata-rata perlahan ke atas. Sasaran keuntungan boleh dipilih dalam bentuk peratusan atau titik, sambil menyediakan fungsi hentian bergerak yang boleh dipilih untuk mengunci keuntungan. Strategi 2 ((mod lanjutan) menambah penapis trend pada tahap garis matahari berdasarkan sistem dua rata-rata, dan hanya dibenarkan masuk apabila harga berada di atas rata-rata bingkai masa yang lebih tinggi.

Kelebihan Strategik

  1. Strategi mempunyai kebolehsuaian yang sangat tinggi dan boleh beralih secara fleksibel mengikut tahap pengalaman peniaga dan keadaan pasaran
  2. Analisis pelbagai bingkai masa dalam mod tinggi meningkatkan kualiti isyarat
  3. Hentian dinamik ATR dapat menyesuaikan diri dengan keadaan pasaran yang berbeza
  4. Sebahagian daripada mekanisme keuntungan menyeimbangkan perlindungan keuntungan dan trend berterusan
  5. Konfigurasi parameter yang fleksibel, mudah untuk mengoptimumkan mengikut ciri-ciri pasaran yang berbeza

Risiko Strategik

  1. Sistem dua hala boleh menghasilkan isyarat palsu yang kerap berlaku di pasaran yang bergolak.
  2. Penapis trend mungkin menyebabkan isyarat terlewat dan kehilangan peluang perdagangan.
  3. Penangguhan ATR mungkin tidak tepat pada masanya apabila turun naik
  4. Sebahagian keuntungan mungkin dikurangkan lebih awal, menjejaskan keuntungan trend

Arah pengoptimuman strategi

  1. Penapis isyarat palsu boleh meningkatkan jumlah transaksi dan kadar turun naik
  2. Pertimbangkan untuk memperkenalkan mekanisme penyesuaian parameter dinamik untuk menyesuaikan secara automatik kitaran purata mengikut keadaan pasaran
  3. Mengoptimumkan kitaran pengiraan ATR, mengimbangi sensitiviti dan kestabilan
  4. Tambah modul pengenalan keadaan pasaran untuk memilih strategi terbaik secara automatik
  5. Memperkenalkan lebih banyak pilihan untuk menghentikan kerugian, seperti berhenti mengikut jejak, berhenti mengikut masa dan sebagainya

ringkaskan

Ini adalah sistem strategi perdagangan yang dirancang dengan baik dan berfungsi dengan baik. Dengan menggabungkan trend trend dan ATR, ia memastikan kebolehpercayaan strategi dan menyediakan pengurusan risiko yang baik. Reka bentuk dua mod ini memenuhi keperluan pedagang di pelbagai peringkat, dan parameter yang kaya menyediakan ruang pengoptimuman yang mencukupi.

Kod sumber strategi
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © shaashish1

//@version=5
strategy("Dual Strategy Selector V2 - Cryptogyani", overlay=true, pyramiding=0, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100000)

//#region STRATEGY SELECTION
strategyOptions = input.string(title="Select Strategy", defval="Strategy 1", options=["Strategy 1", "Strategy 2"], group="Strategy Selection")
//#endregion STRATEGY SELECTION

// ####################### STRATEGY 1: Original Logic ########################
//#region STRATEGY 1 INPUTS
s1_fastMALen = input.int(defval=21, title="Fast SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_slowMALen = input.int(defval=49, title="Slow SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_takeProfitMode = input.string(defval="Percentage", title="Take Profit Mode (S1)", options=["Percentage", "Pips"], group="Strategy 1 Settings")
s1_takeProfitPerc = input.float(defval=7.0, title="Take Profit % (S1)", minval=0.05, step=0.05, group="Strategy 1 Settings") / 100
s1_takeProfitPips = input.float(defval=50, title="Take Profit Pips (S1)", minval=1, step=1, group="Strategy 1 Settings")
s1_trailingTakeProfitEnabled = input.bool(defval=false, title="Enable Trailing (S1)", group="Strategy 1 Settings")
//#endregion STRATEGY 1 INPUTS

// ####################### STRATEGY 2: Enhanced with Recommendations ########################
//#region STRATEGY 2 INPUTS
s2_fastMALen = input.int(defval=20, title="Fast SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_slowMALen = input.int(defval=50, title="Slow SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_atrLength = input.int(defval=14, title="ATR Length (S2)", group="Strategy 2 Settings", inline="ATR")
s2_atrMultiplier = input.float(defval=1.5, title="ATR Multiplier for Stop-Loss (S2)", group="Strategy 2 Settings", inline="ATR")
s2_partialTakeProfitPerc = input.float(defval=50.0, title="Partial Take Profit % (S2)", minval=10, maxval=100, step=10, group="Strategy 2 Settings")
s2_timeframeTrend = input.timeframe(defval="1D", title="Higher Timeframe for Trend Filter (S2)", group="Strategy 2 Settings")
//#endregion STRATEGY 2 INPUTS

// ####################### GLOBAL VARIABLES ########################
var float takeProfitPrice = na
var float stopLossPrice = na
var float trailingStopPrice = na
var float fastMA = na
var float slowMA = na
var float higherTimeframeTrendMA = na
var bool validOpenLongPosition = false

// Precalculate higher timeframe values (global scope for Strategy 2)
higherTimeframeTrendMA := request.security(syminfo.tickerid, s2_timeframeTrend, ta.sma(close, s2_slowMALen))

// ####################### LOGIC ########################
if (strategyOptions == "Strategy 1")
    // Strategy 1 Logic (Original Logic Preserved)
    fastMA := ta.sma(close, s1_fastMALen)
    slowMA := ta.sma(close, s1_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA)
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0
    
    // Take Profit Price
    takeProfitPrice := if (s1_takeProfitMode == "Percentage")
        close * (1 + s1_takeProfitPerc)
    else
        close + (s1_takeProfitPips * syminfo.mintick)

    // Trailing Stop Price (if enabled)
    if (strategy.position_size > 0 and s1_trailingTakeProfitEnabled)
        trailingStopPrice := high - (s1_takeProfitPips * syminfo.mintick)
    else
        trailingStopPrice := na

else if (strategyOptions == "Strategy 2")
    // Strategy 2 Logic with Recommendations
    fastMA := ta.sma(close, s2_fastMALen)
    slowMA := ta.sma(close, s2_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA) and close > higherTimeframeTrendMA
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0

    // ATR-Based Stop-Loss
    atr = ta.atr(s2_atrLength)
    stopLossPrice := close - (atr * s2_atrMultiplier)

    // Partial Take Profit Logic
    takeProfitPrice := close * (1 + (s2_partialTakeProfitPerc / 100))
//#endregion STRATEGY LOGIC

// ####################### PLOTTING ########################
plot(series=fastMA, title="Fast SMA", color=color.yellow, linewidth=1)
plot(series=slowMA, title="Slow SMA", color=color.orange, linewidth=1)
plot(series=takeProfitPrice, title="Take Profit Price", color=color.teal, linewidth=1, style=plot.style_linebr)

// Trailing Stop and ATR Stop-Loss Plots (Global Scope)
plot(series=(strategyOptions == "Strategy 1" and s1_trailingTakeProfitEnabled) ? trailingStopPrice : na, title="Trailing Stop", color=color.red, linewidth=1, style=plot.style_linebr)
plot(series=(strategyOptions == "Strategy 2") ? stopLossPrice : na, title="ATR Stop-Loss", color=color.red, linewidth=1, style=plot.style_linebr)
//#endregion PLOTTING

// ####################### POSITION ORDERS ########################
//#region POSITION ORDERS
if (validOpenLongPosition)
    strategy.entry(id="Long Entry", direction=strategy.long)

if (strategyOptions == "Strategy 1")
    if (strategy.position_size > 0)
        if (s1_trailingTakeProfitEnabled)
            strategy.exit(id="Trailing Take Profit", from_entry="Long Entry", stop=trailingStopPrice)
        else
            strategy.exit(id="Take Profit", from_entry="Long Entry", limit=takeProfitPrice)

else if (strategyOptions == "Strategy 2")
    if (strategy.position_size > 0)
        strategy.exit(id="Partial Take Profit", from_entry="Long Entry", qty_percent=s2_partialTakeProfitPerc, limit=takeProfitPrice)
        strategy.exit(id="Stop Loss", from_entry="Long Entry", stop=stopLossPrice)
//#endregion POSITION ORDERS