Sumber daya yang dimuat... Pemuatan...

Trend Rata-rata Bergerak Ganda Mengikuti Strategi dengan Sistem Manajemen Risiko Berbasis ATR

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

img

Gambaran umum

Strategi ini menggabungkan dua mode perdagangan, yaitu mode dasar yang menggunakan crossover rata-rata bergerak sederhana untuk mengikuti tren, dan mode lanjutan yang menggabungkan penyaringan tren jangka waktu yang lebih tinggi dan mekanisme stop-loss dinamis berbasis ATR. Pedagang dapat beralih antara mode melalui menu dropdown sederhana, memenuhi kebutuhan pemula kemudahan penggunaan dan pedagang berpengalaman manajemen risiko.

Prinsip Strategi

Strategi 1 (Mode Dasar) menggunakan sistem rata-rata bergerak ganda 21 dan 49 hari, menghasilkan sinyal panjang ketika MA cepat melintasi di atas MA lambat. Target keuntungan dapat ditetapkan baik sebagai persentase atau poin, dengan stop trailing opsional untuk mengunci keuntungan. Strategi 2 (Mode Lanjutan) menambahkan penyaringan tren kerangka waktu harian, yang memungkinkan entri hanya ketika harga di atas rata-rata bergerak kerangka waktu yang lebih tinggi.

Keuntungan Strategi

  1. Strategi yang sangat fleksibel yang dapat fleksibel dengan pengalaman pedagang dan kondisi pasar
  2. Analisis multi-timeframe dalam mode lanjutan meningkatkan kualitas sinyal
  3. Stop dinamis berbasis ATR beradaptasi dengan volatilitas pasar yang bervariasi
  4. Saldo keuntungan parsial perlindungan keuntungan dengan kelanjutan tren
  5. Konfigurasi parameter yang fleksibel untuk karakteristik pasar yang berbeda

Risiko Strategi

  1. Sistem MA ganda dapat menghasilkan sinyal palsu yang sering terjadi di berbagai pasar
  2. Penyaringan tren dapat menyebabkan keterlambatan sinyal, kehilangan beberapa peluang perdagangan
  3. Penghentian ATR mungkin tidak cukup cepat menyesuaikan dengan lonjakan volatilitas
  4. Mengambil keuntungan sebagian mungkin mengurangi ukuran posisi terlalu awal dalam tren yang kuat

Arah Optimasi Strategi

  1. Menambahkan indikator volume dan volatilitas untuk menyaring sinyal palsu
  2. Pertimbangkan untuk menerapkan adaptasi parameter dinamis berdasarkan kondisi pasar
  3. Mengoptimalkan periode perhitungan ATR untuk menyeimbangkan sensitivitas dan stabilitas
  4. Tambahkan modul pengenalan keadaan pasar untuk pemilihan mode strategi otomatis
  5. Memperkenalkan lebih banyak opsi stop-loss seperti trailing stop dan time-based exits

Ringkasan

Ini adalah sistem perdagangan yang dirancang dengan baik dan komprehensif. Kombinasi dari dua trend moving average berikut dan manajemen risiko berbasis ATR memastikan keandalan dan pengendalian risiko yang efektif. Desain dual-mode memenuhi kebutuhan berbagai tingkat trader, sementara pengaturan parameter yang kaya memberikan banyak peluang pengoptimalan. Pedagang disarankan untuk memulai dengan parameter konservatif dalam perdagangan langsung dan secara bertahap mengoptimalkan untuk hasil 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 banyak