Chiến lược giao dịch lượng chứng khoán kết hợp trung bình chuyển động theo cấp số nhân với Trailing Stop Loss và Stop Loss phần trăm

Tác giả:ChaoZhang, Ngày: 2024-01-03 16:25:54
Tags:

img

Tổng quan

Cốt lõi của chiến lược này là sử dụng các đường chéo trung bình động theo cấp số nhân làm tín hiệu giao dịch, kết hợp với stop loss và stop loss phần trăm để khóa lợi nhuận và kiểm soát rủi ro.

Chiến lược logic

  1. Tính toán EMA nhanh và EMA chậm, với thời gian EMA nhanh là 20 ngày và thời gian EMA chậm là 50 ngày. Tạo tín hiệu mua khi EMA nhanh vượt qua EMA chậm, và bán tín hiệu khi EMA nhanh vượt qua dưới EMA chậm.

  2. Sau khi nhập, thiết lập lệnh dừng lỗ theo hướng giữ, ví dụ: 7% cho vị trí dài và 7% cho vị trí ngắn.

  3. Đồng thời, đặt giá dừng lỗ dựa trên giá nhập và hướng giữ, ví dụ: 2% dưới giá nhập cho giao dịch dài và 2% trên giá nhập cho giao dịch ngắn.

  4. So sánh giá dừng lại và giá dừng lỗ, sử dụng giá gần với giá thị trường như là giá dừng lỗ cuối cùng cho giao dịch này, gửi lệnh dừng lỗ.

Ưu điểm

  1. Đơn giản và dễ thực hiện tín hiệu giao dịch trung bình động.

  2. Trailing stop loss khóa lợi nhuận ở mức độ lớn nhất có thể, trong khi tránh mất mát không cần thiết từ các tín hiệu sai.

  3. Tỷ lệ dừng lỗ là trực quan và dễ điều chỉnh để kiểm soát lỗ tối đa cho mỗi giao dịch.

  4. Kết hợp trailing stop và fixed stop cả hai khóa trong lợi nhuận và kiểm soát rủi ro.

Rủi ro và biện pháp đối phó

  1. Đường trung bình động có thể tạo ra tín hiệu sai dễ dàng, thêm các bộ lọc khác như âm lượng.

  2. Các điểm dừng lại đôi khi kích hoạt quá sớm, thư giãn một chút.

  3. Thiết lập stop loss cố định không chính xác có thể quá hung hăng hoặc bảo thủ, cần phải kiểm tra và điều chỉnh tham số phần trăm.

  4. Các lối ra dừng lỗ cơ học có thể bỏ lỡ cơ hội đảo ngược thị trường, kết hợp các chỉ số kỹ thuật để đánh giá kích hoạt dừng.

Hướng dẫn tối ưu hóa

  1. Hãy thử các kết hợp EMA khác nhau để tìm sự cân bằng tối ưu.

  2. Thêm các chỉ số như âm lượng để lọc các tín hiệu sai.

  3. Kiểm tra nhiều cổ phiếu hơn để tìm tỷ lệ stoploss phù hợp.

  4. Cố gắng dừng thích nghi với điều kiện thị trường.

  5. Kết hợp các chỉ số như RSI để xác định thời gian dừng lỗ.

Tóm lại

Chiến lược này tích hợp các tín hiệu giao dịch trung bình chuyển động, trailing stop và stop phần trăm. Thông qua tối ưu hóa tham số, nó có thể đạt được lợi nhuận ổn định với kiểm soát rủi ro nghiêm ngặt trên các cổ phiếu và hàng hóa khác nhau, đáng nghiên cứu và liên tục cải thiện cho các nhà giao dịch lượng.


/*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)


Thêm nữa