Strategi Stop Loss Dinamis berbasis ATR

Penulis:ChaoZhang, Tanggal: 2023-10-10 10:50:21
Tag:

Gambaran umum

Strategi ini menggunakan indikator ATR untuk mengatur titik stop loss dinamis dan menyesuaikan posisi stop loss berdasarkan fluktuasi harga, untuk mengendalikan risiko.

Logika Strategi

Strategi ini pertama-tama menilai apakah 5EMA melintasi di atas 20EMA untuk pergi panjang. Setelah masuk, ia menghitung kelipatan ATR dari harga masuk ke harga saat ini menggunakan indikator ATR, dan menetapkan posisi stop loss pada 1,5ATR di bawah harga masuk. Saat harga naik, posisi stop loss secara bertahap ditingkatkan untuk meningkatkan keuntungan posisi.

Secara khusus, strategi mendefinisikan variabel berikut:

  • entry_price: harga masuk
  • stop_price: harga stop loss
  • take_profit_price: harga mengambil keuntungan
  • atr_down: ATR garis bawah
  • atr_up: ATR line up
  • atr_current: garis ATR saat ini
  • atr_ref: Nilai ATR

Setelah masuk, ia menghitung atr_ref sebagai nilai ATR saat ini, dan atr_div sebagai kelipatan ATR dari harga masuk ke harga saat ini. Kemudian menetapkan posisi atr_down, atr_current dan atr_up berdasarkan atr_div. Harga stop loss stop_price ditetapkan pada 1,5ATR di bawah harga masuk.

Ketika harga naik, dengan membandingkan harga saat ini, jika nilai rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-rata rata-

Jika harga naik di atas 3ATR dari harga masuk, itu akan sebagian menutup posisi untuk mengunci keuntungan, dan mengatur tookProfit untuk benar. Setelah itu jika harga terus naik, itu akan terus meningkatkan stop loss. Ketika stop loss dipicu, itu memeriksa tookProfit - jika sudah mengambil keuntungan parsial sebelumnya, itu hanya akan menutup posisi yang tersisa; jika tidak menutup posisi penuh.

Keuntungan

  1. Menggunakan indikator ATR untuk menyesuaikan stop loss secara dinamis dapat menetapkan jarak stop yang wajar berdasarkan volatilitas pasar.

  2. Ikuti tren sambil membatasi kerugian. Stop loss akan ditingkatkan secara bertahap untuk mengumpulkan keuntungan.

  3. Mekanisme mengambil keuntungan parsial mengunci beberapa keuntungan dan mengurangi risiko. Stop loss terus meningkat untuk memungkinkan keuntungan untuk berjalan.

Risiko

  1. Indikator ATR tidak sensitif terhadap pembalikan tajam dan celah.

  2. EMA tidak dapat menentukan pembalikan tren, dapat memasuki posisi baru pada pembalikan tren.

  3. Kemungkinan tinggi kerugian setelah mengambil keuntungan parsial.

  4. Parameter perlu dioptimalkan lebih lanjut, 1,5ATR berhenti dan 3ATR mengambil keuntungan harus disesuaikan untuk produk yang berbeda.

Peningkatan

  1. Pertimbangkan untuk menambahkan indikator stop loss lainnya seperti Donchian Channel untuk mengkompensasi ATR lag.

  2. Uji rata-rata bergerak yang berbeda atau tambahkan MACD dll untuk menilai pembalikan tren.

  3. Mengoptimalkan rasio keuntungan parsial dan frekuensi untuk produk yang berbeda.

  4. Optimasi parameter pada kelipatan ATR untuk stop dan take profit.

  5. Kinerja tes selama tren lemah, dapat menonaktifkan strategi selama tren lemah.

Ringkasan

Strategi ini memiliki logika yang jelas untuk menggunakan ATR untuk manajemen stop loss yang dinamis yang merupakan kekuatan terbesarnya. Namun, ATR itu sendiri memiliki keterbatasan seperti tertinggal. Menambahkan indikator stop dan tren lainnya akan memperbaikinya. Juga mengambil keuntungan parsial membutuhkan optimasi di seluruh produk. Secara keseluruhan memberikan gagasan manajemen stop loss berbasis ATR tetapi membutuhkan optimasi dan peningkatan lebih lanjut.


/*backtest
start: 2022-10-03 00:00:00
end: 2023-10-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ekinbasarkomur

//@version=5
strategy("[EKIN] ATR Exit Strategy", overlay=true, initial_capital = 1000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, calc_on_every_tick = true)

// Simple EMA tracking
fastEMA = ta.ema(close, 5)
slowEMA = ta.ema (close, 20)
atr = ta.atr(14)

// We define entry price for future reference
var float entry_price = na
// We define stop and take profit for future calculations
var float stop_price = na
var float take_profit_price = na

// We define atr limtim its here
var float atr_down = na
var float atr_up = na
var float atr_current = na
var float atr_ref = na

avg = (low + high) / 2

// Conditions
enterCondition = ta.crossover(fastEMA, slowEMA)
var bool tookProfit = false
timePeriod = time >= timestamp(syminfo.timezone, 2021, 12, 15, 0, 0)
InTrade = strategy.position_size > 0

// Go long if conditions are met
if (enterCondition and timePeriod and not InTrade)
    // Calculate and update variables
    entry_price := avg
    atr_ref := atr
    atr_div = int((avg - entry_price) / atr_ref)
    atr_down := entry_price + (atr_ref * (atr_div - 1.5))
    atr_up := entry_price + (atr_ref * (atr_div + 1))
    atr_current := entry_price + (atr_ref * atr_div) 
    stop_price := (entry_price - (atr_ref * 1.5))
    take_profit_price := (entry_price + (atr_ref * 3))
    strategy.order("buy", strategy.long, qty = 2)

// Enter here if in position
if InTrade or tookProfit
    stopCondition = avg < stop_price
    takeProfitCondition = avg > take_profit_price

    if avg < atr_down
        stopCondition := true

    // Move stop price and exit price if price for each atr price increase
    if avg > atr_up
        if tookProfit
            atr_ref := atr
        atr_div = int((avg - entry_price) / atr_ref)
        atr_down := entry_price + (atr_ref * (atr_div - 1))
        atr_up := entry_price + (atr_ref * (atr_div + 1))
        atr_current := entry_price + (atr_ref * atr_div) 

    // Take half of the investment if current price is 3 atr higher than entry price
    if (takeProfitCondition and timePeriod and InTrade and not tookProfit)
        strategy.order("take_half_profit", strategy.short, qty = 1)
        tookProfit := true

    // Exit position if conditions are met and reset the variables
    if (stopCondition and timePeriod and InTrade)
        if tookProfit
            strategy.order("exit", strategy.short, qty = 1)
        else
            strategy.order("stop_loss", strategy.short, qty = 2)

        tookProfit := false

// Plot EMA's
plot(fastEMA, color = color.blue)
plot(slowEMA, color = color.yellow)

// Plot ATR Limit/Stop positions
profit_plot = plot(series = InTrade?atr_up:na, title = "profit", color = color.green, style=plot.style_linebr)
close_plot = plot(series = InTrade?atr_current:na, title = "close", color = color.white, style=plot.style_linebr)
stop_plot = plot(series = InTrade?atr_down:na, title = "stop_loss", color = color.red, style=plot.style_linebr)
fill(profit_plot, close_plot, color = color.new(color.green, 80))
fill(close_plot, stop_plot, color =color.new(color.red,80))

Lebih banyak