Chiến lược giao dịch thuật toán đa chức năng dựa trên xu hướng và đường chéo trung bình động

Tác giả:ChaoZhang, Ngày: 2023-12-08 12:14:50
Tags:

img

Tổng quan

Chiến lược này tích hợp nhiều chỉ số kỹ thuật và khái niệm giao dịch để tự động tạo ra tín hiệu mua và bán.

Chiến lược logic

Chỉ số kỹ thuật

  • Chỉ số UTSTC tùy chỉnh: Một stop trailing thích nghi dựa trên Average True Range để điều chỉnh stop loss range theo biến động thị trường.

  • Chỉ số STC: Sự khác biệt giữa các đường trung bình di chuyển đơn giản nhanh và chậm để xác định hướng xu hướng thị trường và các điểm đảo ngược tiềm năng.

  • Trung bình di chuyển đơn giản (SMA) và Trung bình di chuyển theo cấp số (EMA): Xây dựng biểu đồ trung bình di chuyển của các giai đoạn khác nhau để cung cấp thông tin xu hướng bổ sung.

Các tín hiệu giao dịch

  • Tín hiệu mua: Được tạo ra khi giá đóng vượt qua đường UTSTC và STC ở trạng thái tăng.

  • Tín hiệu bán: Được tạo ra khi giá đóng vượt dưới đường UTSTC và STC ở trạng thái giảm.

Ưu điểm

  • Tích hợp nhiều chỉ số để xác định xu hướng thị trường, cải thiện độ chính xác tín hiệu.

  • UTSTC điều chỉnh dừng tự động dựa trên biến động thực sự, kiểm soát hiệu quả lỗ cho mỗi giao dịch.

  • Các tín hiệu giao dịch đơn giản và hiệu quả từ đường chéo trung bình động.

  • Sự kết hợp các tham số khác nhau phù hợp với nhiều môi trường thị trường hơn.

Rủi ro

  • Các chỉ số xu hướng như STC có thể tụt lại và bỏ lỡ sự đảo ngược ngắn hạn.

  • Các đường chéo trung bình di chuyển có thể tạo ra tín hiệu sai.

  • Đánh giá cẩn thận các thông số cần thiết, sự kết hợp không phù hợp có thể làm giảm lợi nhuận hoặc tăng lỗ.

  • Phạm vi dừng lỗ quá rộng có thể làm tăng lỗ, quá chặt có thể dừng sớm.

Cơ hội gia tăng

  • Kiểm tra các chiều dài STC khác nhau để tìm các thiết lập có tác động tối thiểu đến chiến lược.

  • Thêm các bộ lọc bổ sung để giảm tín hiệu sai, ví dụ: KDJ, MACD.

  • Tối ưu hóa các điểm dừng dựa trên kết quả backtest để tìm ra kết hợp tham số tốt nhất.

  • Đánh giá các khoảng thời gian giữ khác nhau để xác định tối ưu.

Kết luận

Chiến lược này kết hợp xu hướng, dừng tự động và các mô-đun tín hiệu thành một khuôn khổ giao dịch thuật toán khá hoàn chỉnh. Với điều chỉnh tham số và mở rộng tính năng, lợi nhuận ổn định có thể đạt được nhưng không có chiến lược nào có thể tránh hoàn toàn tổn thất.


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

//@version=4
strategy("OB+LQ+UTSTC+SMA+EMA-NORA-MIP21-Jashore-Bangladesh-OneMinuteTF", shorttitle="OB+LS+UTSTC-MIP21-Jashore-Bangladesh-OneMinuteTF", overlay=true)

// Order Block + Liquidity Swings [NORA] Settings
pivot_length = input(14, title="Pivot Lookback")
bull_ext_last = input(3, title="Bullish OB Extension")
bear_ext_last = input(3, title="Bearish OB Extension")
swing_length = input(5, title="Swing Length")
area = input("Wick Extremity", title="Swing Area", options=["Wick Extremity", "Full Range"])
min_profit = input(0.5, title="Minimum Profit Target")
max_loss = input(0.5, title="Maximum Loss Stop")

// Variables
var float bull_ob_price = na
var float bear_ob_price = na
var float swing_high = na
var float swing_low = na

// Calculate Order Block Prices
var float low_lowest = na
var float high_highest = na
if bar_index >= pivot_length
    low_lowest := lowest(low, pivot_length)
    high_highest := highest(high, pivot_length)
    bull_ob_price := low_lowest
    bear_ob_price := high_highest

// Calculate Swing High/Low Prices
var float low_lowest_swing = na
var float high_highest_swing = na

if area == "Wick Extremity"
    low_lowest_swing := lowest(low, swing_length)
    high_highest_swing := highest(high, swing_length)
else
    low_lowest_swing := lowest(high - low, swing_length)
    high_highest_swing := highest(high - low, swing_length)

swing_low := low_lowest_swing
swing_high := high_highest_swing

// Trading Logic for Order Block + Liquidity Swings
buy_liquidity = crossover(close, bull_ob_price) and close > swing_low
sell_liquidity = crossunder(close, bear_ob_price) and close < swing_high

// Plot Buy/Sell Signals for Order Block + Liquidity Swings
plotshape(series=buy_liquidity, style=shape.labelup, location=location.belowbar, color=color.rgb(39, 166, 175), size=size.small, title="Bullish LQ")
plotshape(series=sell_liquidity, style=shape.labeldown, location=location.abovebar, color=color.rgb(248, 95, 215), size=size.small, title="Bearish LQ")

// UTSTC-SMA-EMA-NORA-New Settings
keyvalue = input(3, title="UT Bot Key Value", step=0.5)
atrperiod = input(10, title="UT Bot ATR Period")
src = close

xATR = atr(atrperiod)
nLoss = keyvalue * xATR
xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
pos = 0   
pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(xATRTrailingStop, color=xcolor, title="UT Bot Trailing Stop")

// STC Settings
stc_length = input(12, title="STC Length")
fastLength = input(26, title="STC Fast Length")
slowLength = input(50, title="STC Slow Length")
fastMA = ema(close, fastLength)
slowMA = ema(close, slowLength)
STC = fastMA - slowMA
STCColor = STC > STC[1] ? color.green : color.red
plot(STC, color=STCColor, title="STC")

// Add SMAs
sma21 = sma(close, 21)
sma44 = sma(close, 44)
plot(sma21, color=color.blue, title="SMA 21")
plot(sma44, color=color.orange, title="SMA 44")

// Add EMA
ema5 = ema(close, 5)
plot(ema5, color=color.yellow, title="EMA 5")

// Combined Strategy
buySignal = crossover(src, xATRTrailingStop) and STC < 25 and STCColor == color.green
sellSignal = crossunder(src, xATRTrailingStop) and STC > 75 and STCColor == color.red

// Plot Buy and Sell signals as triangles
plotshape(series=buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

strategy.entry("Buy", strategy.long, when=buySignal)
strategy.entry("Sell", strategy.short, when=sellSignal)



Thêm nữa