Chiến lược giao dịch định lượng đa chức năng dựa trên xu hướng và đường trung bình động giao nhau


Ngày tạo: 2023-12-08 12:14:50 sửa đổi lần cuối: 2023-12-08 12:14:50
sao chép: 0 Số nhấp chuột: 631
1
tập trung vào
1621
Người theo dõi

Chiến lược giao dịch định lượng đa chức năng dựa trên xu hướng và đường trung bình động giao nhau

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, có thể được sử dụng để tự động tạo ra tín hiệu mua và bán. Đặc điểm chính là kết hợp các chỉ số phân tích xu hướng để tối ưu hóa dừng lỗ, đồng thời sử dụng giao dịch ngang hàng để tạo ra tín hiệu giao dịch.

Nguyên tắc chiến lược

Chỉ số kỹ thuật

  • Chỉ số UTSTC tùy chỉnh: Một chỉ số theo dõi dừng tự điều chỉnh được thực hiện dựa trên sóng thực trung bình, có thể điều chỉnh phạm vi dừng tùy theo biến động của thị trường.

  • Chỉ số STC: Điểm chênh lệch giữa trung bình di chuyển đơn giản nhanh và trung bình di chuyển đơn giản chậm, được sử dụng để đánh giá hướng xu hướng thị trường và đ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 chỉ số (EMA): tính toán và vẽ trung bình di chuyển của các chu kỳ khác nhau, cung cấp thêm thông tin để đánh giá xu hướng.

Tín hiệu giao dịch

  • Tín hiệu mua: được tạo ra khi giá đóng cửa vượt qua chỉ số UTSTC và chỉ số STC ở trạng thái lạc quan.

  • Tín hiệu bán: xảy ra khi giá đóng cửa vượt qua chỉ số UTSTC và chỉ số STC ở trạng thái giảm giá.

Lợi thế chiến lược

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

  • Chỉ số UTSTC tự động điều chỉnh phạm vi dừng lỗ theo tần số thực tế, có thể kiểm soát hiệu quả mỗi lỗ.

  • Sử dụng đường chéo để tạo ra tín hiệu giao dịch đơn giản và hiệu quả.

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

Rủi ro chiến lược

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

  • Tín hiệu chéo đồng tuyến có thể tạo ra tín hiệu giả.

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

  • Giới hạn dừng lỗ quá lớn có thể làm tăng nguy cơ mất mát, quá nhỏ có thể dừng lỗ quá sớm.

Hướng tối ưu hóa

  • Kiểm tra các tham số chỉ số STC của các chu kỳ khác nhau để tìm các thiết lập có ảnh hưởng nhỏ nhất đến chiến lược.

  • Thử kết hợp các chỉ số khác để lọc các tín hiệu giả, chẳng hạn như KDJ, MACD.

  • Điều chỉnh các tham số dừng lỗ theo kết quả phản hồi để tìm các tham số kết hợp tối ưu.

  • Đánh giá các thiết lập thời gian nắm giữ khác nhau để tìm chu kỳ nắm giữ tối ưu.

Tóm tắt

Chiến lược này tích hợp các mô-đun đánh giá xu hướng, quản lý lỗ hổng tự động và đánh giá tín hiệu giao dịch để tạo thành một chương trình giao dịch định lượng toàn diện hơn. Bằng cách điều chỉnh tham số và mở rộng chức năng, có thể đạt được lợi nhuận ổn định. Tuy nhiên, không có chiến lược nào có thể hoàn toàn tránh thua lỗ, cần kiểm tra hiệu quả cẩn thận và kiểm soát rủi ro.

Mã nguồn chiến lược
/*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)