Sumber dimuat naik... memuat...

Rata-rata bergerak berganda mengikut strategi dengan sistem pengurusan risiko berasaskan ATR

Penulis:ChaoZhang, Tarikh: 2024-11-29 14:56:43
Tag:SMAATRTPSLHTF

img

Ringkasan

Strategi ini menggabungkan dua trend trend yang bergerak klasik dengan pengurusan risiko dinamik berasaskan ATR. Ia menawarkan dua mod perdagangan: mod asas menggunakan silang rata-rata bergerak mudah untuk mengikuti trend, dan mod lanjutan yang menggabungkan penapisan trend jangka masa yang lebih tinggi dan mekanisme stop-loss dinamik berasaskan ATR. Pedagang boleh beralih antara mod melalui menu dropdown yang mudah, memenuhi kedua-dua pemula kemudahan penggunaan dan pedagang berpengalaman keperluan pengurusan risiko.

Prinsip Strategi

Strategi 1 (Mode Asas) menggunakan sistem purata bergerak berganda 21 dan 49 hari, menghasilkan isyarat panjang apabila MA pantas melintasi di atas MA perlahan. Sasaran keuntungan boleh ditetapkan sama ada sebagai peratusan atau mata, dengan hentian trailing pilihan untuk mengunci keuntungan. Strategi 2 (Mode Lanjutan) menambah penapisan trend jangka masa harian, membenarkan entri hanya apabila harga di atas purata bergerak jangka masa yang lebih tinggi. Ia menggabungkan stop-loss dinamik berasaskan ATR 14 tempoh yang menyesuaikan dengan turun naik pasaran, dan termasuk fungsi mengambil keuntungan separa untuk melindungi keuntungan.

Kelebihan Strategi

  1. Strategi yang sangat mudah disesuaikan yang boleh fleksibel dengan pengalaman peniaga dan keadaan pasaran
  2. Analisis pelbagai jangka masa dalam mod lanjutan meningkatkan kualiti isyarat
  3. Perhentian dinamik berasaskan ATR disesuaikan dengan turun naik pasaran yang berbeza
  4. Saldo mengambil keuntungan separa perlindungan keuntungan dengan kesinambungan trend
  5. Konfigurasi parameter yang fleksibel untuk ciri pasaran yang berbeza

Risiko Strategi

  1. Sistem MA berganda boleh menghasilkan isyarat palsu yang kerap di pasaran yang berbeza
  2. Penapisan trend boleh menyebabkan kelewatan isyarat, kehilangan beberapa peluang perdagangan
  3. Hentian ATR mungkin tidak disesuaikan dengan cepat dengan lonjakan turun naik
  4. Mengambil keuntungan separa mungkin mengurangkan saiz kedudukan terlalu awal dalam trend yang kuat

Arahan Pengoptimuman Strategi

  1. Tambah penunjuk jumlah dan turun naik untuk menapis isyarat palsu
  2. Mempertimbangkan untuk melaksanakan penyesuaian parameter dinamik berdasarkan keadaan pasaran
  3. Mengoptimumkan tempoh pengiraan ATR untuk mengimbangi kepekaan dan kestabilan
  4. Tambah modul pengiktirafan keadaan pasaran untuk pemilihan mod strategi automatik
  5. Memperkenalkan lebih banyak pilihan stop-loss seperti hentian trailing dan keluar berdasarkan masa

Ringkasan

Ini adalah sistem dagangan yang direka dengan baik dan komprehensif. Gabungan dua trend pergerakan purata berikut dan pengurusan risiko berasaskan ATR memastikan kebolehpercayaan dan kawalan risiko yang berkesan. Reka bentuk mod dua memenuhi keperluan tahap peniaga yang berbeza, sementara tetapan parameter yang kaya menyediakan banyak peluang pengoptimuman. Pedagang dinasihatkan untuk memulakan dengan parameter konservatif dalam perdagangan langsung dan secara beransur-ansur mengoptimumkan untuk hasil yang terbaik.


/*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


Berkaitan

Lebih lanjut