내부 가격 강도 추세 반전 거래 시스템

IBS EMA 趋势跟踪 反转交易 价格动量 RSI 风险管理 止损策略 多时间周期分析
생성 날짜: 2025-03-05 09:55:24 마지막으로 수정됨: 2025-03-05 09:55:24
복사: 0 클릭수: 415
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

내부 가격 강도 추세 반전 거래 시스템 내부 가격 강도 추세 반전 거래 시스템

개요

내부 가격 강도 트렌드 역전 거래 시스템은 내부 가격 강도 (IBS) 지표에 기반한 일선 수준의 거래 전략이다. 이 전략의 핵심은 잠재적인 시장 역전점을 식별하고, 전 라인 종식 가격의 높은 낮은 범위의 상대적인 위치를 모니터링하여 시장의 과매매 상태를 판단하는 것이다. 이 전략은 특히 주식과 미국 지수 거래에 적합하며, 기본 파라미터는 SPY/SPX 및 NDQ/QQQ와 같은 주요 지수에 대해 최적화되어 있다.

전략 원칙

이 전략의 핵심은 내부 가격 강도 (IBS) 지표의 계산과 응용에 있다. IBS 지표는 다음과 같은 공식으로 계산된다:

IBS = (前一日收盘价 - 前一日最低价) / (前一日最高价 - 前一日最低价)

IBS 값은 항상 0에서 1 사이로 변동한다:

  • IBS 값이 0.2보다 낮은 것은 일반적으로 과매매 상태로 해석되며, 시장이 상승할 가능성이 있음을 나타냅니다.
  • IBS 값이 0.9보다 높으면 과매매 상태가 나타납니다. 이는 시장이 조정을 앞두고 있음을 의미합니다.

이 전략의 거래 규칙은 다음과 같습니다.

  1. 여러 가지 조건이 있습니다.

    • 조건 1: IBS는 사용자 정의 입시 임계값 (기본 0.09) 보다 낮습니다.
    • 조건 2: 현재 가격은 N주기 지수 이동 평균 (EMA) 위에 있습니다 (기본 주기는 220)
    • 참고: 사용자는 EMA 주기를 0으로 설정하여 EMA 조건을 비활성화할 수 있습니다.
  2. “이런 일이 벌어질 수 있다.

    • IBS 상승이 사용자 정의 출장 지점을 초과할 때 평준화 (기본 0.985)
    • 또는 거래 기간이 최대 거래 주기를 (14 일 기본) 도달했을 때 평점

이 외에도, 전략은 “최소한 새로운 입구 거리 백분율” 파라미터를 도입하여 가격 회수량이 충분할 때만 새로운 포지션을 열 수 있도록 하며, 회수 위험을 효과적으로 줄이고 자금 관리를 최적화합니다.

전략적 이점

  1. 시장 타이밍 파악 정확: IBS 지표는 시장의 과매매 상태를 정확하게 캡처 할 수 있으며, 입구와 출구에 대한 객관적인 수학적 근거를 제공하며, 주관적 판단으로 인한 편차를 줄입니다.

  2. 트렌드 필터 메커니즘: 트렌드 필터로 EMA를 사용하여 거래 방향이 주요 트렌드와 일치하도록 보장하고 역전 거래의 위험을 효과적으로 피합니다. 전략은 시장 특성에 따라 EMA 주기를 조정하거나이 조건을 완전히 비활성화 할 수 있습니다.

  3. 유연한 포지션 관리: 전략은 피라미드 방식의 포지션 증가를 지원하며, “최소한 신입 거리 비율” 파라미터를 도입하여, 보다 지능적인 분량 포지션 구축 메커니즘을 구현하여, 가격 회수 시 평균 포지션 보유 비용을 효과적으로 줄일 수 있습니다.

  4. 자동 위험 제어: 전략은 최대 포지션 보유 시간 제한을 설정하고, 시장이 일반적인 출구 신호를 유발하지 않더라도, 사전 설정된 최대 거래 기간 후에 자동으로 포지션을 청산하여, 단일 거래의 위험 노출 시간을 효과적으로 제어한다.

  5. 파라미터 최적화: 기본 파라미터는 SPY와 QQQ/NDQ와 같은 주요 시장 지수에 최적화되어 있으며, 사용자가 추천 설정을 직접 적용할 수 있습니다.

    • QQQ 권장 설정: 입금 마이너스 0.09, 출금 마이너스 0.985, EMA 주기 220, 최소 입금 거리는 0%, 최대 보유일 수 14일
    • SPY 권장 설정: 입금 지름 0.11, 출금 지름 0.995, EMA 주기 200, 최소 입금 거리는 0%, 최대 보유일 수 12일
  6. 포괄적 거래 모드: 다양한 시장 환경과 거래 스타일에 맞게 다중 거래 모드, 다중 거래 모드 또는 양방향 거래를 지원합니다.

전략적 위험

  1. 매개 변수 감수성: IBS 입출입 마이너스가 전략 성능에 큰 영향을 미치며, 매개 변수 설정을 잘못하면 과도한 거래 또는 중요한 거래 기회를 놓치게 될 수 있습니다. 실장에 적용하기 전에 특정 거래 품종에 대한 충분한 역사 데이터 재검토와 매개 변수 최적화를 수행하는 것이 좋습니다.

  2. 흔들리는 시장 위험: 명백한 추세가 없는 흔들리는 시장에서 IBS 신호가 자주 나타날 수 있으며, 과도한 거래와 불필요한 거래 비용 증가로 이어집니다. 해결책은 여러 연속 IBS 신호를 확인하거나 다른 지표 (예: ATR) 와 결합하여 시장의 변동성을 판단하는 것과 같은 필터링 조건을 추가하는 것입니다.

  3. 급격한 트렌드 변화의 지연성: 시장이 급격한 트렌드 전환이 발생했을 때, 전날 데이터를 기반으로 계산된 IBS 지표는 지연으로 반응할 수 있으며, 이로 인해 입시 또는 출구 시기가 적절하지 않습니다. 높은 변동성 기간 동안 IBS 경계를 적절하게 조정하거나 최대 지분 시간을 단축하는 것이 좋습니다.

  4. 자금 관리 위험: 기본으로 계좌의 50%의 자금을 사용하여 거래하는 것은 여러 번 포지션이 발생할 경우 위험 노출이 너무 커질 수 있습니다. 사용자는 자신의 위험 تحمل 능력에 따라 포지션 크기와 포지션 매개 변수를 조정하는 것이 좋습니다.

  5. 기술 실현 제한: 전략은 종결 가격에 기반하여 거래를 수행하고 실제 운영에서 슬라이드 포인트와 가격 차이를 직면 할 수 있습니다. 이러한 위험을 줄이기 위해 종결 전 일정 시간 동안 주문하거나 시장 가격 대신 제한 가격 수표를 사용하는 것이 고려 될 수 있습니다.

전략 최적화 방향

  1. 역동적 인 마이너스 조정: 현재 전략은 고정 된 IBS 입력 및 출력 마이너스를 사용하며, 시장의 변동성에 따라 이러한 마이너스를 조정하는 것을 고려 할 수 있습니다. 예를 들어, 잘못된 신호를 줄이기 위해 입출력 마이너스를 높이고 출력 마이너스를 낮출 수 있습니다.

  2. 다중 시간 주기의 확인: 다중 시간 주기의 분석 프레임워크를 도입하여 단기 및 중기 IBS 신호를 동시에 확인하여 거래를 수행하십시오. 예를 들어, 일선 IBS 신호 외에도 주선 또는 4 시간 선의 IBS 값을 계산할 수 있으며, 여러 시간 주기가 모두 과매매 또는 과매매 상태를 표시 할 때만 입각하여 신호 품질을 크게 향상시킬 수 있습니다.

  3. 스마트 스톱 메커니즘: 현재 전략은 IBS 출구 신호와 최대 보유 시간 위험을 제어하는 데에만 의존하며, 더 지능적인 스톱 메커니즘을 도입 할 수 있습니다. 예를 들어, ATR 기반의 동적 스톱, 추적 스톱 또는 지지 / 저항 지점에 기반의 스톱 전략은 수익을 더 잘 보호하고 단일 거래 위험을 제어합니다.

  4. 시장 상태 자조: 시장 상태 식별 메커니즘을 도입하여, 다른 시장 환경 (((트렌드 시, 흔들림 시) 에 따라 다른 파라미터 설정을 사용합니다. ADX (((평균 방향 지수) 또는 다른 경향 강도 지표를 통해 시장 상태를 식별 할 수 있으며, 강한 경향 환경에서는 IBS 조건을 완화하고, 흔들림 시장에서 더 엄격한 IBS 값을 사용합니다.

  5. 기계 학습 최적화: 기계 학습 기술을 사용하여 IBS 신호를 최적화하고 필터링한다. 훈련된 모델을 통해 어떤 IBS 신호가 더 수익성있는 거래를 창출할 수 있는지 식별하고, 시장 특성에 따라 매개 변수를 자동으로 조정하여 전략의 자율적 성능을 구현한다. 이 방법은 전략의 안정성과 적응력을 크게 향상시킬 수 있으며, 특히 다른 시장 조건과 거래 유형에 직면 할 때.

요약하다

내부 가격 강도 트렌드 역전 거래 시스템은 내부 가격 강도 (IBS) 지표와 지수 이동 평균 (EMA) 을 결합한 일선 수준의 거래 전략이다. 이 전략은 잠재적인 시장 역전점을 식별하고 장기적인 트렌드를 따라 거래 결정을 최적화하여 특히 주식과 미국 지수 거래에 적합하다. 핵심 장점은 객관적인 수학 모델, 유연한 위치 관리 및 내장 된 위험 제어 장치에 있다.

전략은 SPY/SPX와 NDQ/QQQ와 같은 주요 시장 지수를 위해 파라미터를 최적화했으며, 사용자는 추천 설정을 직접 적용하여 거래할 수 있습니다. 그러나, 모든 거래 전략에는 파라미터 민감성, 시장의 충격 위험 및 급격한 추세 변화의 뒤처짐 등과 같은 위험이 있습니다.

미래 최적화 방향에는 동적 경량 조정, 다중 시간 주기의 확인, 지능형 손해 중지 메커니즘, 시장 상태 자동 적응 및 기계 학습 최적화 등이 포함됩니다. 이러한 개선은 전략의 적응성과 강도를 더욱 높여 다양한 시장 환경에서 좋은 성능을 유지할 수 있습니다.

양적 거래 전략으로서, 내부 가격 강도 트렌드 역전 거래 시스템은 거래자에게 규칙 기반의 객관적인 거래 방법을 제공하고, 거래 결정에 대한 감정적 인 요소의 영향을 줄여주고, 더 일관되고 예측 가능한 거래 결과를 달성하는 데 도움이됩니다.

전략 소스 코드
/*backtest
start: 2024-03-05 00:00:00
end: 2025-03-03 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//Implementation by AlgoTradeKit
//v.0.5
//The IBS Trading Strategy is a daily bars long-only trading system, based on the concept of Internal Bar Strength (IBS). 
//The strategy aims to identify potential reversals by monitoring how the previous bar’s close positions itself within its high-low range. 
//It is suitable for stock and US indices. The default parameters are optimized for SPY/SPX and NDQ/QQQ
//Setting for QQQ: 0.09, 0.985, 220, 0, 14
//Setting for SPY: 0.11, 0.995, 200, 0, 12

//@version=6
strategy("IBS (Internal Bar Strength) Trading Strategy for SPY and NDQ", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, pyramiding = 2, currency = currency.USD, process_orders_on_close=false)

// ***** INPUTS *****
// IBS thresholds
ibsEntryThreshold = input.float(0.09, title="IBS Entry Threshold", step=0.01, tooltip="IBS = (Previous Close - Previous Low) / (Previous High - Previous Low), and IBS value below 0.2 is typically interpreted as an oversold condition, while a value above 0.9 suggests an overbought state.")
ibsExitThreshold  = input.float(0.985, title="IBS Exit Threshold", step=0.01, tooltip="IBS = (Previous Close - Previous Low) / (Previous High - Previous Low), and IBS value below 0.2 is typically interpreted as an oversold condition, while a value above 0.9 suggests an overbought state.")
// EMA period (set to 0 to disable the EMA condition)
emaPeriod = input.int(220, title="EMA Period (0 to disable)", minval=0, maxval=5000, step=1, tooltip="Exponential Moving Average Filter Period (0 to disable)")
// Minimum percentage drop required for a new entry (for dollar-cost averaging)
minEntryPct = input.float(0, title="Minimum Distance for New Entry (%)", step=0.05, minval=0.0, maxval=100, tooltip = "Distance in Price from Last Opened Position, in Percentage Terms (%)")
maxTradeDuration = input.int(title="Maximum Trade Duration (days)", defval=14, minval=1, step=1, maxval=1000, tooltip = "Exit at close if maximum trade duration is reached.")


// Persistent variable to record the bar index when the trade is entered.
var int entryBarIndex = na

// ***** EMA CALCULATION *****
// Calculate the EMA globally if the period is greater than 0, otherwise leave as na.
emaValue = emaPeriod > 0 ? ta.ema(close, emaPeriod) : na

// ***** IBS CALCULATION *****
// Calculate IBS using the previous bar’s values.
// Guard against division by zero: if previous high equals previous low, default IBS to 0.5.
prevHigh  = high[1]
prevLow   = low[1]
prevClose = close[1]
ibs = (prevHigh != prevLow) ? (prevClose - prevLow) / (prevHigh - prevLow) : 0.5

// ***** ENTRY AND EXIT CONDITIONS *****
// Define the EMA condition: if emaPeriod is 0, bypass the EMA check.
emaConditionLong = emaPeriod == 0 or (close > emaValue)
emaConditionShort = emaPeriod == 0 or (close < emaValue)

// Entry: IBS is below the entry threshold and the EMA condition holds.
enterLong = (ibs < ibsEntryThreshold) and emaConditionLong 
enterShort = (ibs > ibsExitThreshold) and emaConditionShort 

// Exit: IBS is above the exit threshold.
exitLong = ibs > ibsExitThreshold
exitShort = ibs < ibsEntryThreshold

// ***** DOLLAR-COST AVERAGING CONDITION IN PERCENTAGE *****
// Track the last entry price. Reset when there is no open position.
var float lastEntryPrice = na
if strategy.position_size == 0
    lastEntryPrice := na

// If there is no previous entry, the condition is met.
// Otherwise, allow a new entry only if the current price is lower than the last entry price
// by at least the predefined percentage (converted to a fraction).
dcaCondition = na(lastEntryPrice) or ((close < lastEntryPrice) and (((lastEntryPrice - close) / lastEntryPrice) >= (minEntryPct / 100)))
dcaConditionShort = na(lastEntryPrice) or ((close > lastEntryPrice) and (((close - lastEntryPrice) / lastEntryPrice) >= (minEntryPct / 100)))


// ***** STRATEGY ORDERS *****
// Enter a long position only if both the entry condition and the DCA condition are met.
if enterLong and dcaCondition 
    strategy.entry("Long", strategy.long)
    lastEntryPrice := close  // update the last entry price
    entryBarIndex := bar_index

if enterShort and dcaConditionShort 
    strategy.entry("Short", strategy.short)
    lastEntryPrice := close  // update the last entry price
    entryBarIndex := bar_index

// Compute trade duration in days using the absolute difference
tradeDuration = not na(entryBarIndex) ? math.abs(bar_index - entryBarIndex) : 0

// Exit the long position when the exit condition is met or if the trade duration reaches maxTradeDuration days.
if exitLong or (tradeDuration >= maxTradeDuration)
    strategy.close("Long")

// Exit the long position when the exit condition is met or if the trade duration reaches maxTradeDuration days.
if exitShort or (tradeDuration >= maxTradeDuration)
    strategy.close("Short")

// ***** PLOTTING *****
// Plot IBS for reference, along with horizontal lines for the entry and exit thresholds.
//plot(ibs, title="IBS", color=color.blue, linewidth=2)
//hline(ibsEntryThreshold, title="IBS Entry Threshold", color=color.green)
//hline(ibsExitThreshold, title="IBS Exit Threshold", color=color.red)