Xác nhận xu hướng động đảo ngược giá trị hợp lý khoảng cách chiến lược giao dịch định lượng

FVG IFVG SMA ATR 趋势确认 跟踪止损 动态风险管理
Ngày tạo: 2025-02-21 11:55:42 sửa đổi lần cuối: 2025-07-03 15:00:53
sao chép: 3 Số nhấp chuột: 606
2
tập trung vào
319
Người theo dõi

Xác nhận xu hướng động đảo ngược giá trị hợp lý khoảng cách chiến lược giao dịch định lượng Xác nhận xu hướng động đảo ngược giá trị hợp lý khoảng cách chiến lược giao dịch định lượng

Tổng quan

Chiến lược này là một hệ thống giao dịch định lượng dựa trên Inverted Fair Value Gap (IFVG), kết hợp với xác nhận xu hướng trung bình di chuyển và cơ chế dừng theo dõi động. Chiến lược này giao dịch bằng cách xác định khoảng cách giá trị công bằng trong hành vi giá và hình thức đảo ngược của nó và giao dịch trong trường hợp xu hướng hỗ trợ. Phương pháp này đảm bảo hướng giao dịch phù hợp với xu hướng thị trường tổng thể và có thể nắm bắt các bước ngoặt quan trọng trong thị trường.

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

Logic cốt lõi của chiến lược bao gồm các bước chính sau:

  1. Kiểm tra FVG: Xác định lỗ hổng giá trị công bằng bằng cách phân tích sự chồng chéo giữa giá của đường dây hiện tại và đường dây trước đó.
  2. IFVG xác nhận: Một tín hiệu đảo ngược được hình thành khi giá vượt qua đỉnh hoặc đáy của FVG.
  3. Xác định xu hướng: Sử dụng mối quan hệ chéo giữa các đường trung bình di chuyển đơn giản (SMA) 50 và 200 để xác định xu hướng thị trường.
  4. Điều kiện nhập cảnh: Trong xu hướng tăng, làm nhiều khi giá thấp hơn điểm thấp của IFVG; Trong xu hướng giảm, làm trống khi giá cao hơn điểm cao của IFVG.
  5. Quản lý rủi ro: sử dụng phương pháp kết hợp giữa dừng cố định và dừng theo dõi động dựa trên ATR.

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

  1. Xác nhận đa chiều: kết hợp phân tích đa chiều của cấu trúc giá (IFVG) và chỉ số xu hướng (SMA) để tăng độ tin cậy giao dịch.
  2. Quản lý rủi ro động: Điều chỉnh theo dõi lỗ hổng thông qua chỉ số ATR, bảo vệ lợi nhuận đã đạt được và cho phép giá có đủ không gian dao động.
  3. Tối ưu hóa lợi nhuận so với rủi ro: sử dụng mục tiêu lợi nhuận của 3R để theo đuổi lợi nhuận cao hơn trên cơ sở kiểm soát rủi ro hợp lý.
  4. Trình lọc xu hướng: Xác nhận xu hướng bằng phương tiện di chuyển, tránh giao dịch quá mức trên thị trường ngang.

Rủi ro chiến lược

  1. Rủi ro trượt giá: Khi thị trường biến động mạnh, giá giao dịch thực tế có thể sai lệch so với giá lý tưởng.
  2. Xu hướng chậm trễ: Đường trung bình di chuyển là một chỉ số chậm trễ, có thể dẫn đến sự chậm trễ trong thời gian nhập cảnh.
  3. Rủi ro phá vỡ giả: Giá có thể rút lại nhanh chóng sau khi phá vỡ, gây ra lỗ dừng.
  4. Nhận thức tham số: Hiệu suất chiến lược nhạy cảm với các thiết lập tham số như chu kỳ SMA và nhân ATR.

Hướng tối ưu hóa chiến lược

  1. Tối ưu hóa chỉ số: Có thể xem xét thêm tín hiệu xác nhận khối lượng giao dịch để tăng độ tin cậy của đột phá.
  2. Các tham số tự điều chỉnh: giới thiệu chỉ số biến động thị trường, điều chỉnh động kỳ SMA và nhân ATR.
  3. Tối ưu hóa thời gian nhập cảnh: tăng cơ chế xác nhận giá và tránh tăng hoặc giảm giá.
  4. Quản lý vị trí: Điều chỉnh kích thước vị trí theo biến động của thị trường và cường độ của xu hướng.
  5. Tối ưu hóa cơ chế dừng: Các tham số dừng theo dõi lỏng lẻo hơn có thể được áp dụng trong xu hướng mạnh.

Tóm tắt

Chiến lược này xây dựng một hệ thống giao dịch hoàn chỉnh bằng cách kết hợp cấu trúc giá IFVG, xác nhận xu hướng và quản lý rủi ro động. Chiến lược, trong khi duy trì sự đơn giản, xem xét đầy đủ các yếu tố quan trọng như xu hướng thị trường, kiểm soát rủi ro và quản lý lợi nhuận.

Mã nguồn chiến lược
/*backtest
start: 2025-05-31 00:00:00
end: 2025-06-30 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
args: [["RunMode",1,358374]]
*/

//@version=6
strategy("Inverted FVG Strategy with Trend Check and Trailing Stops", default_qty_value = 10, overlay=true)

// Function to detect FVG
fvgDetected(src, high, low) =>
    float prevHigh = na
    float prevLow = na
    float prevClose = na
    float fvgHigh = na
    float fvgLow = na
    bool fvg = false
    if (not na(src[3]))
        prevHigh := high[3]
        prevLow := low[3]
        prevClose := src[3]
        if (src[2] > prevClose and low[2] > prevHigh) or (src[2] < prevClose and high[2] < prevLow)
            fvg := true
            fvgHigh := low[2] > prevHigh ? high[2] : na
            fvgLow := high[2] < prevLow ? low[2] : na
    [fvg, fvgHigh, fvgLow]

// Detect FVG on the chart
[fvg, fvgHigh, fvgLow] = fvgDetected(close, high, low)

// Detect IFVG - Inversion of FVG
bool ifvg = false
float ifvgHigh = na
float ifvgLow = na

if (fvg)    
    if (high[1] > fvgHigh and close[1] > open[1]) or (high[1] < fvgLow and close[1] < open[1])
        ifvg := true
        ifvgHigh := close[1] > open[1] ? high[1] : na
        ifvgLow := close[1] <  open[1] ? low[1] : na

// Plot FVG and IFVG zones for visualization
plot(ifvgHigh, title="IFVG High", color=color.red, linewidth=2, style=plot.style_cross)
plot(ifvgLow, title="IFVG Low", color=color.red, linewidth=2, style=plot.style_cross)

// Trend Check using Simple Moving Averages
smaShort = ta.sma(close, 50)  // Short term SMA
smaLong = ta.sma(close, 200)  // Long term SMA
bool uptrend = false
bool downtrend = false

uptrend := smaShort > smaLong  // Up trend if short SMA is above long SMA
downtrend := smaShort < smaLong  // Down trend if short SMA is below long SMA

// Plot SMAs for visualization
plot(smaShort, title="SMA Short", color=color.blue, linewidth=1)
plot(smaLong, title="SMA Long", color=color.orange, linewidth=1)

// Trading logic with trend confirmation
longCondition = ifvg and close < ifvgLow and uptrend
shortCondition = ifvg and close > ifvgHigh and downtrend

// Risk Definition - 使用百分比
stopLoss = 0.005   // 0.5% 止损
takeProfit = 0.015  // 1.5% 止盈

if (longCondition and strategy.position_size == 0)
    strategy.entry("Long", strategy.long)
    stopPrice = close * (1 - stopLoss)
    limitPrice = close * (1 + takeProfit)
    strategy.exit("Initial Long Exit", "Long", stop=stopPrice, limit=limitPrice)

if (shortCondition and strategy.position_size == 0)
    strategy.entry("Short", strategy.short)
    stopPrice = close * (1 + stopLoss)
    limitPrice = close * (1 - takeProfit)
    strategy.exit("Initial Short Exit", "Short", stop=stopPrice, limit=limitPrice)

// ATR for dynamic trailing stop
atr = ta.atr(14)

// Trailing Stop for Long Position if the trade has moved > 0.5% (half of takeProfit)
if (strategy.position_size > 0)
    profitThreshold = takeProfit * 0.5  // 1.5% profit threshold
    if (close - strategy.position_avg_price >= strategy.position_avg_price * profitThreshold)
        // 将止损移动到盈亏平衡点加上一点利润
        trailingStopLong = math.max(strategy.position_avg_price * (1 + profitThreshold), close - (atr * 2))
        strategy.exit("Trailing Stop Long", "Long", stop=trailingStopLong)

// Trailing Stop for Short Position if the trade has moved > 0.5% (half of takeProfit)
if (strategy.position_size < 0)
    profitThreshold = takeProfit * 0.5  // 1.5% profit threshold
    if (strategy.position_avg_price - close >= strategy.position_avg_price * profitThreshold)
        // 将止损移动到盈亏平衡点加上一点利润
        trailingStopShort = math.min(strategy.position_avg_price * (1 - profitThreshold), close + (atr * 2))
        strategy.exit("Trailing Stop Short", "Short", stop=trailingStopShort)