
Cốt lõi của chiến lược này là sử dụng chỉ số trung bình di chuyển trơn như một tín hiệu mua và bán, kết hợp với dừng theo dõi và dừng phần trăm để khóa lợi nhuận và kiểm soát rủi ro. Chiến lược này đơn giản để thực hiện và áp dụng cho giao dịch định lượng trên cổ phiếu và các sản phẩm tài chính khác.
Tính toán EMA nhanh và EMA chậm, EMA nhanh có chu kỳ 20 ngày, EMA chậm có chu kỳ 50 ngày. Khi EMA nhanh vượt qua EMA chậm, nó tạo ra tín hiệu mua; Khi EMA nhanh vượt qua EMA chậm, nó tạo ra tín hiệu bán.
Cài đặt trailing stop loss sau khi nhập, tùy theo hướng giữ vị trí, hãy đặt phần trăm trailing stop loss của nhiều vị trí và trailing stop loss của vị trí trống, ví dụ 7% ≠ Trailing stop loss sẽ tự động điều chỉnh cho mỗi dòng K, khóa lợi nhuận tối đa có thể ≠
Đồng thời thiết lập vị trí dừng lỗ, tùy theo hướng giữ vị trí và giá nhập đặt phần trăm của giá dừng lỗ nhiều vị trí và giá dừng lỗ trống, ví dụ: 2%
So sánh giá dừng lỗ và giá dừng lỗ, chọn vị trí dừng lỗ gần nhất với giá thị trường cho giao dịch này và phát hành lệnh dừng lỗ.
Các tín hiệu trung bình di chuyển rất đơn giản và dễ thực hiện.
Tracking Stop Loss có khả năng khóa lợi nhuận tối đa, đồng thời ngăn chặn sai lầm gây ra tổn thất không cần thiết.
Tỷ lệ phần trăm dừng lỗ dễ điều chỉnh trực quan, có thể kiểm soát mức lỗ tối đa cho mỗi giao dịch.
Kết hợp với dừng theo dõi và dừng cố định, cả hai đều khóa lợi nhuận và kiểm soát rủi ro.
Chiến lược trung bình di chuyển dễ tạo ra tín hiệu giả, giới thiệu các điều kiện lọc mạnh hơn.
Hạn kiệt theo dõi đôi khi dừng quá sớm, giảm mức độ dừng thích hợp.
Cài đặt vị trí dừng cố định không đúng có thể quá quyết liệt hoặc bảo thủ, cần kiểm tra điều chỉnh tham số phần trăm.
Hạn chế cơ học có thể bỏ lỡ cơ hội đảo ngược thị trường, có thể kết hợp với chỉ số kỹ thuật để đánh giá dừng lỗ.
Cố gắng kết hợp các tham số EMA khác nhau để tìm sự cân bằng tốt nhất.
Thêm các chỉ số lọc tín hiệu giả như khối lượng giao dịch.
Kiểm tra nhiều cổ phiếu hơn để tìm các tham số dừng lỗ phù hợp.
Cố gắng thêm lệnh dừng di động, điều chỉnh vị trí dừng theo thị trường.
Kết hợp các chỉ số như RSI để xác định thời gian dừng lỗ.
Chiến lược này tích hợp các tín hiệu giao dịch trung bình di chuyển, dừng theo dõi và dừng phần trăm, có thể áp dụng cho nhiều loại cổ phiếu và hàng hóa thông qua tối ưu hóa tham số, đạt được lợi nhuận ổn định trong khi kiểm soát chặt chẽ rủi ro, đáng để nhà giao dịch nghiên cứu và tối ưu hóa liên tục.
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 10m
basePeriod: 1m
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/
// © wouterpruym1828
//@version=5
strategy(title=" Combining Trailing Stop and Stop loss (% of instrument price)",
overlay=true, pyramiding=1, shorttitle="TSL&SL%")
//INDICATOR SECTION
// Indicator Input options+
i_FastEMA = input.int(title = "Fast EMA period", minval = 0, defval = 20)
i_SlowEMA = input.int(title = "Slow EMA period", minval = 0, defval = 50)
// Calculate moving averages
fastEMA = ta.ema(close, i_FastEMA)
slowEMA = ta.ema(close, i_SlowEMA)
// Plot moving averages
plot(fastEMA, title="Fast SMA", color=color.blue)
plot(slowEMA, title="Slow SMA", color=color.orange)
//STRATEGY SECTION
// Calculate trading conditions
buy = ta.crossover(fastEMA, slowEMA)
sell = ta.crossunder(fastEMA, slowEMA)
// STEP 1:
// Configure trail stop loss level with input options (optional)
longTrailPerc = input.float(title="Long Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01
shortTrailPerc = input.float(title="Short Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01
//Configure stop loss level with input options (optional)
longStopPerc = input.float(title="Long Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01
shortStopPerc = input.float(title="Short Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01
// STEP 2:
// Determine trail stop loss prices
longTrailPrice = 0.0, shortTrailPrice = 0.0
longTrailPrice := if (strategy.position_size > 0)
stopValue = high * (1 - longTrailPerc)
math.max(stopValue, longTrailPrice[1])
else
0
shortTrailPrice := if (strategy.position_size < 0)
stopValue = low * (1 + shortTrailPerc)
math.min(stopValue, shortTrailPrice[1])
else
999999
// Determine stop loss prices
entryPrice = 0.0
entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)
longLossPrice = entryPrice * (1 - longStopPerc)
shortLossPrice = entryPrice * (1 + shortStopPerc)
// Plot stop loss values for confirmation
plot(series=(strategy.position_size > 0) ? longTrailPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Long Trail Stop")
plot(series=(strategy.position_size < 0) ? shortTrailPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Short Trail Stop")
plot(series=(strategy.position_size > 0) ? longLossPrice : na,
color=color.olive, style=plot.style_cross,
linewidth=2, title="Long Stop Loss")
plot(series=(strategy.position_size < 0) ? shortLossPrice : na,
color=color.olive, style=plot.style_cross,
linewidth=2, title="Short Stop Loss")
// Submit entry orders
if (buy)
strategy.entry("Buy", strategy.long)
if (sell)
strategy.entry("Sell", strategy.short)
//Evaluating trailing stop or stop loss to use
longStopPrice = longTrailPrice < longLossPrice ? longLossPrice : longTrailPrice
shortStopPrice = shortTrailPrice > shortLossPrice ? shortLossPrice : shortTrailPrice
// STEP 3:
// Submit exit orders for stop price
if (strategy.position_size > 0)
strategy.exit(id="Buy Stop", stop=longStopPrice)
if (strategy.position_size < 0)
strategy.exit(id="Sell Stop", stop=shortStopPrice)