Strategi ini menggunakan penunjuk ATR untuk menetapkan titik stop loss dinamik dan menyesuaikan kedudukan stop loss berdasarkan turun naik harga, untuk mengawal risiko. Ia terutamanya masuk panjang apabila 5EMA melintasi di atas 20EMA, dan kemudian menggunakan penunjuk ATR untuk menetapkan kedudukan stop loss dan mengambil keuntungan. Kedudukan stop loss akan disesuaikan mengikut pergerakan harga untuk mengunci lebih banyak keuntungan.
Strategi ini pertama menilai jika 5EMA melintasi di atas 20EMA untuk pergi panjang. Selepas memasuki, ia mengira kelipatan ATR harga kemasukan kepada harga semasa menggunakan penunjuk ATR, dan menetapkan kedudukan stop loss pada 1.5ATR di bawah harga kemasukan. Apabila harga meningkat, kedudukan stop loss secara beransur-ansur dinaikkan untuk meningkatkan keuntungan kedudukan.
Khususnya, strategi itu mentakrifkan pembolehubah berikut:
Selepas masuk, ia mengira atr_ref sebagai nilai ATR semasa, dan atr_div sebagai kelipatan ATR harga masuk ke harga semasa. Kemudian menetapkan kedudukan atr_down, atr_current dan atr_up berdasarkan atr_div. Harga stop loss stop_price ditetapkan pada 1.5ATR di bawah harga masuk.
Apabila harga meningkat, dengan membandingkan harga semasa avg dan atr_up, jika avg melintasi di atas atr_up, ia mengira semula kedudukan garisan atr_div dan ATR, dengan itu secara beransur-ansur menaikkan garisan stop loss untuk meningkatkan keuntungan.
Jika harga meningkat di atas 3ATR daripada harga kemasukan, ia akan menutup kedudukan sebahagiannya untuk mengunci keuntungan, dan menetapkan tookProfit kepada benar. Selepas itu jika harga terus meningkat, ia akan terus meningkatkan stop loss. Apabila stop loss dicetuskan, ia memeriksa tookProfit - jika sudah mengambil keuntungan sebahagiannya sebelumnya, ia hanya akan menutup kedudukan yang tersisa; jika tidak, tutup kedudukan penuh.
Menggunakan penunjuk ATR untuk menyesuaikan stop loss secara dinamik boleh menetapkan jarak berhenti yang munasabah berdasarkan turun naik pasaran.
Ikuti trend sambil mengehadkan kerugian. Stop loss akan meningkat secara beransur-ansur untuk mengumpul keuntungan.
Mekanisme mengambil keuntungan separa mengunci beberapa keuntungan dan mengurangkan risiko.
Indikator ATR tidak sensitif terhadap pembalikan tajam dan jurang.
EMA tidak dapat menentukan pembalikan trend, boleh memasuki kedudukan baru pada pembalikan trend.
Kemungkinan kerugian yang tinggi selepas mengambil keuntungan separa.
Parameter perlu dioptimumkan lebih lanjut, 1.5ATR berhenti dan 3ATR mengambil keuntungan harus diselaraskan untuk produk yang berbeza.
Pertimbangkan untuk menambah penunjuk stop loss lain seperti Saluran Donchian untuk mengimbangi kelewatan ATR.
Uji purata bergerak yang berbeza atau tambah MACD dan lain-lain untuk menilai pembalikan trend.
Mengoptimumkan nisbah keuntungan separa dan kekerapan untuk produk yang berbeza.
Optimumkan parameter pada kelipatan ATR untuk berhenti dan mengambil keuntungan.
Prestasi ujian semasa trend lemah, boleh melumpuhkan strategi semasa trend lemah.
Strategi ini mempunyai logik yang jelas untuk menggunakan ATR untuk pengurusan stop loss dinamik yang merupakan kekuatan terbesarnya. Walau bagaimanapun, ATR itu sendiri mempunyai batasan seperti ketinggalan. Menambah penunjuk berhenti dan trend lain akan memperbaikinya. Juga mengambil keuntungan separa memerlukan pengoptimuman di seluruh produk. Secara keseluruhan ia memberikan idea pengurusan stop loss berasaskan ATR tetapi memerlukan pengoptimuman dan peningkatan 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))