동적 추세 확인 반전 공정가치 갭 양적 거래 전략

FVG IFVG SMA ATR 趋势确认 跟踪止损 动态风险管理
생성 날짜: 2025-02-21 11:55:42 마지막으로 수정됨: 2025-07-03 15:00:53
복사: 3 클릭수: 606
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

동적 추세 확인 반전 공정가치 갭 양적 거래 전략 동적 추세 확인 반전 공정가치 갭 양적 거래 전략

개요

이 전략은 반전 공정 가치 격차 (Inverted Fair Value Gap, IFVG) 에 기반한 정량 거래 시스템으로, 이동 평균 트렌드 확인과 동적 추적 스톱스 메커니즘을 결합한다. 이 전략은 가격 행동의 공정 가치 격차 (FVG) 와 그 반전 형태를 식별하여 트렌드 지원 시 거래한다. 이 방법은 거래 방향이 전체 시장 추세와 일치하는지 확인하고 시장의 중요한 반전 전환점을 잡을 수 있습니다.

전략 원칙

전략의 핵심 논리에는 다음과 같은 주요 단계가 포함됩니다.

  1. FVG 검출: 현재 가닥과 이전 가닥의 가격 범위 중복을 분석하여 공정 가치 틈을 식별한다.
  2. IFVG 확인: 가격이 FVG의 최고점 또는 최저점을 돌파했을 때 반전 신호가 형성된다.
  3. 추세 확인: 50과 200기 간단한 이동 평균 (SMA) 의 교차 관계를 사용하여 시장 추세를 결정한다.
  4. 진입 조건: 상승 추세에서, 가격이 IFVG 낮은 지점보다 낮을 때 더 많이; 하향 추세에서, 가격이 IFVG 높은 지점보다 높을 때 더 많이.
  5. 리스크 관리: 고정된 스톱로드를 ATR 기반의 동적 추적 스톱로드에 결합한 방식으로 적용한다.

전략적 이점

  1. 다차원 확인: 가격 구조 ((IFVG) 와 트렌드 지표 ((SMA) 의 다차원 분석을 결합하여 거래의 신뢰성을 높인다.
  2. 동적 위험 관리: ATR 지표를 통해 트래킹 스톱로스를 조정하여 수익을 보호하고 가격에 충분한 변동 공간을 제공합니다.
  3. 리스크/이익 대비 최적화: 3R의 수익 목표 설정을 적용하여 합리적인 위험 통제의 기초에 더 높은 수익을 추구한다.
  4. 트렌드 필터: 이동 평균을 통해 트렌드를 확인하여 수평 시장에서 과도한 거래를 피하십시오.

전략적 위험

  1. 슬라이드 포인트 위험: 시장이 급격히 변동할 때, 실제 거래 가격은 이상적인 가격과 오차가 있을 수 있다.
  2. 트렌드 지연: 이동 평균은 지연된 지표로, 입점 시기가 약간 지연될 수 있다.
  3. 가짜 돌파 위험: 가격이 돌파 후 빠르게 회수되어 스톱로스를 유발할 수 있다.
  4. 매개 변수 민감성: 전략적 성능은 SMA 주기와 ATR 배수와 같은 매개 변수 설정에 민감하다.

전략 최적화 방향

  1. 지표 최적화: 거래량 확인 신호를 추가하여 돌파의 신뢰성을 높이는 것을 고려할 수 있다.
  2. 매개 변수 자율: 시장의 변동률 지표를 도입하고, SMA 주기와 ATR 배수를 동적으로 조정한다.
  3. 진입 시점 최적화: 가격 회귀 확인 메커니즘을 추가하고, 상향 또는 하향 추격을 피한다.
  4. 포지션 관리: 시장의 변동률과 트렌드 강도에 따라 포지션 크기를 동적으로 조정한다.
  5. 스톱 메커니즘 최적화: 강세를 보이는 경우 더 느슨한 추적 스톱 패러미터를 사용할 수 있다.

요약하다

이 전략은 IFVG 가격 구조, 트렌드 확인 및 동적 위험 관리를 결합하여 완전한 거래 시스템을 구축합니다. 전략은 간결성을 유지하면서 시장 추세, 위험 제어 및 수익 관리와 같은 중요한 요소를 충분히 고려합니다. 전략의 최적화 방향을 통해 전략은 적응성과 안정성을 더욱 향상시킬 수 있습니다. 실물 거래에서는 충분한 피드백과 매개 변수 최적화를 수행하고 특정 시장 특성에 따라 적절하게 조정하는 것이 좋습니다.

전략 소스 코드
/*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)