Pelacakan tren rata-rata pergerakan ganda dan strategi perdagangan adaptif pengendalian risiko ATR

SMA ATR TP SL HTF
Tanggal Pembuatan: 2024-11-29 14:56:43 Akhirnya memodifikasi: 2024-11-29 14:56:43
menyalin: 0 Jumlah klik: 522
1
fokus pada
1617
Pengikut

Pelacakan tren rata-rata pergerakan ganda dan strategi perdagangan adaptif pengendalian risiko ATR

Ringkasan

Strategi ini adalah sistem perdagangan adaptif yang menggabungkan pelacakan tren biner klasik dan pengendalian risiko dinamis ATR. Strategi ini menawarkan dua mode perdagangan: mode dasar dengan pelacakan tren biner sederhana, mode lanjutan dengan penyaringan tren pada kerangka waktu yang lebih tinggi dan mekanisme stop loss dinamis berbasis ATR.

Prinsip Strategi

Strategi 1 ((mode dasar) mengadopsi sistem dua rata-rata pada hari ke-21 dan ke-49 yang menghasilkan banyak sinyal ketika rata-rata cepat melintasi rata-rata lambat ke atas. Target keuntungan dapat memilih persentase atau poin, sambil menawarkan fitur stop loss seluler yang dapat dipilih untuk mengunci keuntungan. Strategi 2 ((mode lanjutan) pada dasar sistem dua rata-rata menambahkan filter tren di tingkat garis matahari, yang hanya diizinkan masuk ketika harga berada di atas rata-rata jangka waktu yang lebih tinggi.

Keunggulan Strategis

  1. Strategi memiliki kemampuan beradaptasi yang sangat kuat, dapat beralih secara fleksibel sesuai dengan tingkat pengalaman pedagang dan kondisi pasar
  2. Analisis multi-frame waktu dalam mode tingkat tinggi meningkatkan kualitas sinyal
  3. ATR dapat beradaptasi dengan berbagai kondisi pasar yang bergejolak
  4. Beberapa mekanisme keuntungan menyeimbangkan perlindungan keuntungan dan perpanjangan tren
  5. Konfigurasi parameter yang fleksibel, mudah dioptimalkan sesuai dengan karakteristik pasar yang berbeda

Risiko Strategis

  1. Sistem dua baris dapat menghasilkan sinyal palsu yang sering terjadi di pasar yang bergoyang.
  2. Filter tren dapat menyebabkan sinyal terlambat dan kehilangan beberapa peluang perdagangan.
  3. ATR stop loss mungkin tidak cukup tepat waktu ketika fluktuasi tingkat
  4. Beberapa keuntungan mungkin dikurangi lebih awal, mempengaruhi keuntungan tren besar

Arah optimasi strategi

  1. Dapat meningkatkan volume transaksi dan indikator fluktuasi untuk memfilter sinyal palsu
  2. Pertimbangkan untuk memperkenalkan mekanisme adaptasi parameter dinamis yang secara otomatis menyesuaikan siklus rata-rata sesuai dengan kondisi pasar
  3. Optimalkan siklus perhitungan ATR untuk menyeimbangkan sensitivitas dan stabilitas
  4. Tambahkan modul untuk mengidentifikasi status pasar dan secara otomatis memilih mode strategi yang optimal
  5. Memperkenalkan lebih banyak opsi stop loss, seperti tracking stop loss, time stop loss, dan lain-lain

Meringkaskan

Ini adalah sistem strategi perdagangan yang dirancang secara rasional dan berfungsi dengan baik. Dengan kombinasi pelacakan tren linier ganda dan pengendalian angin ATR, strategi ini dijamin dapat diandalkan dan menyediakan manajemen risiko yang baik. Desain dua mode memenuhi kebutuhan pedagang di berbagai tingkatan, pengaturan parameter yang kaya menyediakan ruang optimasi yang cukup.

Kode 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