과거 백테스팅을 기반으로 한 다중 시간대 공정가치 갭 돌파 전략

FVG BOS HTF RR SL
생성 날짜: 2025-01-17 14:45:10 마지막으로 수정됨: 2025-01-17 14:45:10
복사: 0 클릭수: 454
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

과거 백테스팅을 기반으로 한 다중 시간대 공정가치 갭 돌파 전략

전략 개요

이 전략은 여러 시간대 분석, 공정가치 갭(FVG), 구조 돌파(BOS)를 결합한 포괄적인 거래 시스템입니다. 이 방법은 상위 시간대에서 가격 구조의 돌파구를 식별하여 잠재적인 거래 진입 가능성을 파악하고, 하위 시간대에서 적정 가치 갭이 형성되는지 살펴봅니다. 이 전략에는 손절매 및 수익 목표를 자동으로 설정하는 등의 위험 관리 시스템도 통합되어 있습니다.

전략 원칙

이 전략의 핵심 논리는 세 가지 주요 기둥 위에 구축됩니다. 첫째, 더 높은 시간 프레임(기본적으로 1시간 이상)을 사용하여 가격 구조(BOS)의 돌파구를 찾고, 이를 통해 거래 방향에 대한 기본 프레임워크를 제공합니다. 둘째, 더 낮은 시간 프레임에서 공정 가치 갭(FVG)을 찾아보세요. FVG가 형성되면 이 지역에서 시장에 잠재적인 공급과 수요 불균형이 있음을 나타냅니다. 마지막으로, 이 두 가지 조건이 현재 가격 위치와 결합되어 가격이 유리한 위치에 있을 때 거래 신호가 발생합니다. 이 시스템은 위험-보상 비율과 손절매 비율을 통해 각 거래의 위험을 관리합니다.

전략적 이점

  1. 다차원 분석: 여러 기간의 분석을 결합함으로써 거래 신호의 신뢰성이 향상됩니다.
  2. 완벽한 위험 관리: 내장된 위험 수익률 설정 및 손절매 제어 메커니즘을 통해 모든 거래에 대한 명확한 위험 관리가 보장됩니다.
  3. 시각적 피드백: 이 전략은 FVG 상자 표시와 잠재적 거래 기회 표시를 포함하여 명확한 시각적 피드백을 제공합니다.
  4. 강력한 적응성: 매개변수 조정을 통해 전략은 다양한 시장 조건 및 거래 스타일에 적응할 수 있습니다.

전략적 위험

  1. 거짓 돌파 위험: 시장에서 거짓 돌파가 발생하여 거짓 거래 신호가 발생할 수 있습니다. 해결책은 신호 확인 메커니즘을 추가하는 것입니다.
  2. 신호 지연: 더 높은 시간대 데이터를 사용하기 때문에 신호 지연이 발생할 수 있습니다. 다른 기술 지표와 함께 확인하는 것이 좋습니다.
  3. 시장 변동성 위험: 변동성이 높은 기간 동안 FVG 형성이 충분히 안정적이지 않을 수 있습니다. 이는 FVG의 관찰 길이를 조정하면 해결될 수 있습니다.

전략 최적화 방향

  1. 신호 필터링: 볼륨 확인 메커니즘을 추가하여 볼륨이 지원하는 경우에만 신호를 확인할 수 있습니다.
  2. 동적 매개변수: 위험 수익률과 손절매 요소는 시장 변동성에 따라 동적으로 조정될 수 있습니다.
  3. 추세 필터링: 추세 판단 지표와 오픈 포지션을 추세 방향으로만 추가합니다.
  4. 시간 필터: 불리한 시장 시간 동안 거래를 피하기 위해 거래 기간 필터를 추가합니다.

요약하다

이 전략은 여러 기간 분석, 가격 구조 돌파구, 공정 가치 갭을 결합하여 완전한 거래 시스템을 구축합니다. 이 기술의 장점은 다차원적 분석 방법과 완벽한 위험 관리 메커니즘을 갖추고 있다는 점이지만, 거래자는 여전히 실제 시장 상황에 따라 적절한 매개변수 최적화와 위험 관리를 수행해야 합니다. 이후의 최적화는 신호 확인, 동적 매개변수 조정, 시장 환경 필터링부터 시작하여 전략의 안정성과 신뢰성을 더욱 향상시킬 수 있습니다.

전략 소스 코드
/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-15 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
strategy("ICT Strategy with Historical Backtest", overlay=true)

// === Настройки ===
tf = input.timeframe("60", title="Higher Timeframe (1H or above)")  // Таймфрейм для анализа BOS
fvg_length = input(3, title="FVG Lookback Length")                   // Длина для поиска FVG
risk_reward = input(2, title="Risk-Reward Ratio")                    // Риск-вознаграждение
show_fvg_boxes = input(true, title="Show FVG Boxes")                 // Показывать FVG
stop_loss_factor = input.float(1.0, title="Stop Loss Factor")         // Множитель для стоп-лосса

// === Переменные для анализа ===
var float bos_high = na
var float bos_low = na

// Получаем данные с более старшего таймфрейма
htf_high = request.security(syminfo.tickerid, tf, high)
htf_low = request.security(syminfo.tickerid, tf, low)
htf_close = request.security(syminfo.tickerid, tf, close)

// Определение BOS (Break of Structure) на старшем таймфрейме
bos_up = ta.highest(htf_high, fvg_length) > ta.highest(htf_high[1], fvg_length)
bos_down = ta.lowest(htf_low, fvg_length) < ta.lowest(htf_low[1], fvg_length)

// Обновляем уровни BOS
if (bos_up)
    bos_high := ta.highest(htf_high, fvg_length)
if (bos_down)
    bos_low := ta.lowest(htf_low, fvg_length)

// === Определение FVG (Fair Value Gap) ===
fvg_up = low > high[1] and low[1] > high[2]
fvg_down = high < low[1] and high[1] < low[2]

// Визуализация FVG (Fair Value Gap)
// if (show_fvg_boxes)
//     if (fvg_up)
//         box.new(left=bar_index[1], top=high[1], right=bar_index, bottom=low, bgcolor=color.new(color.green, 90), border_color=color.green)
//     if (fvg_down)
//         box.new(left=bar_index[1], top=high, right=bar_index, bottom=low[1], bgcolor=color.new(color.red, 90), border_color=color.red)

// === Логика сделок ===
// Условия для входа в Лонг
long_condition = bos_up and fvg_up and close < bos_high
if (long_condition)
    strategy.entry("Long", strategy.long, stop=low * stop_loss_factor, limit=low + (high - low) * risk_reward)

// Условия для входа в Шорт
short_condition = bos_down and fvg_down and close > bos_low
if (short_condition)
    strategy.entry("Short", strategy.short, stop=high * stop_loss_factor, limit=high - (high - low) * risk_reward)

// === Надписи для прогнозируемых сделок ===
if (long_condition)
    label.new(bar_index, low, text="Potential Long", color=color.green, style=label.style_label_up, textcolor=color.white, size=size.small)

if (short_condition)
    label.new(bar_index, high, text="Potential Short", color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)