Chiến lược này sử dụng chỉ số ATR để thiết lập điểm dừng động, điều chỉnh vị trí dừng lỗ theo mức độ biến động của giá, để thực hiện kiểm soát rủi ro. Chiến lược này chủ yếu bằng cách tạo ra các ngã ba bằng cách tạo ra EMA 5 ngày và EMA 20 ngày, sau đó sử dụng chỉ số ATR để thiết lập vị trí dừng lỗ và vị trí dừng lỗ. Vị trí dừng lỗ sẽ được điều chỉnh theo biến động của giá, do đó khóa thêm lợi nhuận.
Chiến lược này bắt đầu bằng việc đánh giá giá trị giao dịch khi EMA 5 ngày vượt qua EMA 20 ngày để tạo ra một cái gạch vàng. Sau khi giao dịch, sử dụng chỉ số ATR để tính toán số ATR của giá giao dịch từ giá hiện tại, thiết lập vị trí dừng lỗ là 1,5 ATR bên dưới giá giao dịch. Sau đó, khi giá tăng lên, hãy tăng dần vị trí dừng lỗ, nếu giá tăng hơn giá giao dịch 3 ATR, hãy dừng một phần.
Cụ thể, chiến lược sẽ xác định các biến sau:
Sau khi vào cửa, tr_ref được tính là giá trị ATR hiện tại, tr_div là ATR nhân giá hiện tại từ giá vào cửa. Sau đó, tr_div được thiết lập theo vị trí tr_down, tr_current và tr_up.
Khi giá tăng lên, bằng cách so sánh giá hiện tại trung bình và tr_up, nếu tr_up trên trung bình, hãy tính lại vị trí tương ứng của tr_div và tr, do đó nâng cao mức dừng lỗ và tăng lợi nhuận giữ vị trí.
Nếu giá vượt quá giá vào 3ATR, một phần vị trí sẽ được thanh toán để khóa lợi nhuận, tại thời điểm này, dấu hiệu takeProfit được đặt là true. Nếu giá tiếp tục tăng, vị trí dừng sẽ tiếp tục được nâng lên. Nếu kích hoạt dừng, nó sẽ phán quyết takeProfit, nếu trước đó đã dừng một phần, chỉ thanh toán các vị trí còn lại, nếu không, toàn bộ vị trí sẽ được thanh toán.
Sử dụng chỉ số ATR để điều chỉnh vị trí dừng lỗ một cách động, bạn có thể đặt khoảng cách dừng lỗ hợp lý dựa trên mức độ biến động của thị trường.
Trong trường hợp lỗ hạn chế, theo xu hướng hoạt động cắt lợi nhuận. Đường dừng lỗ sẽ dần dần tăng lên, để lợi nhuận tích lũy.
Cơ chế dừng một phần có thể khóa một phần lợi nhuận, giảm rủi ro. Sau đó, vị trí dừng lại tiếp tục tăng cao, để lợi nhuận tiếp tục hoạt động.
Chỉ số ATR không nhạy cảm với các đột phá bất thường và không thể đối phó với rủi ro do các khoảng trống gây ra.
Chỉ số EMA không thể xác định được xu hướng đảo ngược và có thể sẽ vào một vị trí mới khi xu hướng đảo ngược.
Một số nhà đầu tư cho rằng việc dừng lại một phần sẽ có khả năng đảo ngược lỗ.
Các tham số không được tối ưu hóa, 1.5 ATR Stop và 3 ATR Stop cần điều chỉnh theo các giống khác nhau.
Có thể xem xét thêm các chỉ số dừng lỗ khác, chẳng hạn như kênh Donchian, để ngăn chặn sự chậm trễ của chỉ số ATR.
Có thể kiểm tra các chỉ số trung bình khác nhau, hoặc thêm MACD để đánh giá xu hướng đảo ngược.
Có thể tối ưu hóa tỷ lệ và số lần ngưng một phần, các giống khác nhau có thể có các thiết lập khác nhau.
Thêm tối ưu hóa tham số, thử nghiệm hiệu quả dừng lỗ của các ATR khác nhau. Thêm chức năng dừng lỗ bước.
Kiểm tra hiệu suất khi xu hướng yếu, hãy xem xét chỉ kích hoạt chiến lược khi xu hướng mạnh.
Chiến lược này là một chiến lược toàn diện rõ ràng và dễ hiểu, sử dụng các chỉ số ATR để điều chỉnh động để ngăn chặn rủi ro giao dịch là ưu thế lớn nhất của nó. Tuy nhiên, các chỉ số ATR bản thân có sự chậm trễ và thiết lập tham số cần được tối ưu hóa. Thêm các chỉ số đánh giá lỗ và xu hướng khác sẽ là hướng cải thiện. Ngoài ra, một số cơ chế ngăn chặn cũng cần được kiểm tra tối ưu hóa theo các giống khác nhau.
/*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))