리소스 로딩... 로딩...

부피 확증과 함께 구조의 해체 다 조건 지능형 거래 전략

저자:차오장, 날짜: 2024-12-20 16:15:43
태그:BOSSMAATRTPSL

img

전반적인 설명

이 전략은 브레이크 오브 구조 (BOS) 와 볼륨 확인을 기반으로 하는 지능형 거래 전략이다. 이 전략은 이전 최고 또는 최저 가격의 가격 브레이크오프를 감지하고 볼륨 확장 확인과 결합하여 거래 신호를 생성합니다. 연속 확인 요구 사항과 동적 인 이익 취득 / 중단 손실 설정을 포함한 여러 조건 검증 메커니즘을 사용하여 거래 신뢰성 및 위험 관리 기능을 향상시킵니다.

전략 원칙

핵심 논리는 다음의 핵심 요소들을 포함합니다.

  1. 특정 기간 동안 가장 높은 가격과 가장 낮은 가격을 계산하여 구조적 최고와 최저를 식별합니다.
  2. 이동 평균을 사용하여 볼륨 기준을 계산하고 상당한 볼륨 확장을 결정합니다.
  3. 부피가 증가하면서 가격이 이전 최고치를 넘을 때 상승성 확인 수를 축적합니다.
  4. 부피가 증가하면서 가격이 이전 최저 수준 이하로 떨어지면 하향 확인 수를 축적합니다.
  5. 트레이딩 신호는 지정된 확인 수를 달성한 후에만 트리거됩니다.
  6. 포지션 입점 후 수익을 취득하고 손실을 멈추는 비율을 설정합니다.

전략적 장점

  1. 다중 상태 검증 메커니즘은 신호 신뢰성을 향상시킵니다.
  2. 부피 지표 통합은 잘못된 파업 신호를 피하는 데 도움이됩니다.
  3. 연속 확인 메커니즘은 거래 빈도를 줄이고 승률을 증가시킵니다.
  4. 동적 취득/손실 정지 설정은 입시 가격에 따라 출구 포지션을 자동으로 조정합니다.
  5. 조정 가능한 매개 변수와 함께 명확한 전략 논리는 좋은 적응력을 제공합니다.

전략 위험

  1. 다양한 시장에서 빈번한 거짓 파업이 연속적인 손실로 이어질 수 있습니다.
  2. 유동적인 시장에서 스톱 로스 포지션은 충분히 시기적절하지 않을 수 있습니다.
  3. 확인 메커니즘은 최적의 가격 포인트를 놓치기 때문에 출입을 지연시킬 수 있습니다.
  4. 고정량 판단 기준은 변화하는 시장 조건에 잘 적응하지 않을 수 있습니다. 해결책:
  • 동적 매개 변수 조정을 위한 시장 변동성 지표를 도입
  • 트렌드 필터를 추가하여 다양한 시장에서 잘못된 신호를 줄이십시오.
  • 유연성을 높이기 위해 스톱 로스 로직을 최적화
  • 설계 적응용 부피 기준 계산 방법

전략 최적화 방향

  1. 유동 평균 시스템과 같은 트렌드 식별 지표를 추가하여 트렌드 방향으로만 거래하십시오.
  2. 동적 스톱 손실 거리 조정을 위한 ATR 표시기를 탑재
  3. 변동성 적응용 부피 기준 판단 메커니즘 설계
  4. 고위험 기간을 피하기 위해 시간 필터를 포함합니다.
  5. 신뢰성을 유지하면서 입력 시기를 개선하기 위해 확인 메커니즘을 최적화하십시오.

요약

이 전략 시스템은 고전적인 기술 분석 이론과 현대적인 양적 거래 방법을 결합한 전략 시스템이다. 다중 조건 검증과 엄격한 위험 통제를 통해 전략은 좋은 안정성과 신뢰성을 보여줍니다. 최적화를 필요로하는 측면이 있지만 전반적인 프레임워크 디자인은 합리적이며 실용적인 응용 가치를 가지고 있습니다. 제안된 최적화 방향을 통해 전략의 성능을 더욱 향상시킬 수 있습니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("BOS and Volume Strategy with Confirmation", overlay=true)

// Parameters
swingLength = input.int(20, title="Swing Length", minval=1)
volumeMultiplier = input.float(1.1, title="Volume Multiplier", step=0.1)
volumeSMA_length = input.int(10, title="Volume SMA Length", minval=1)
takeProfitPercentage = input.float(0.02, title="Take Profit Percentage", step=0.01)
stopLossPercentage = input.float(0.15, title="Stop Loss Percentage", step=0.01)  // New parameter for stop loss
atrLength = input.int(14, title="ATR Length")
confirmationBars = input.int(2, title="Confirmation Bars", minval=1)

// Calculate Swing Highs and Lows
swingHigh = ta.highest(high, swingLength)[1]
swingLow = ta.lowest(low, swingLength)[1]

// Calculate Volume Moving Average
volumeSMA = ta.sma(volume, volumeSMA_length)
highVolume = volume > (volumeSMA * volumeMultiplier)

// Break of Structure Detection with Confirmation
var int bullishCount = 0
var int bearishCount = 0

if (close > swingHigh and highVolume)
    bullishCount := bullishCount + 1
    bearishCount := 0
else if (close < swingLow and highVolume)
    bearishCount := bearishCount + 1
    bullishCount := 0
else
    bullishCount := 0
    bearishCount := 0

bullishBOSConfirmed = (bullishCount >= confirmationBars)
bearishBOSConfirmed = (bearishCount >= confirmationBars)

// Entry and Exit Conditions
var float entryPrice = na  // Declare entryPrice as a variable

if (bullishBOSConfirmed and strategy.position_size <= 0)
    entryPrice := close  // Use ':=' for assignment
    strategy.entry("Long", strategy.long)

if (strategy.position_size > 0)
    // Calculate stop loss price
    stopLossPrice = entryPrice * (1 - stopLossPercentage)
    strategy.exit("Take Profit Long", from_entry="Long", limit=entryPrice * (1 + takeProfitPercentage), stop=stopLossPrice)

if (bearishBOSConfirmed and strategy.position_size >= 0)
    entryPrice := close  // Use ':=' for assignment
    strategy.entry("Short", strategy.short)

if (strategy.position_size < 0)
    // Calculate stop loss price
    stopLossPrice = entryPrice * (1 + stopLossPercentage)
    strategy.exit("Take Profit Short", from_entry="Short", limit=entryPrice * (1 - takeProfitPercentage), stop=stopLossPrice)

// Plot Swing Highs and Lows for Visualization
plot(swingHigh, title="Swing High", color=color.green, linewidth=1)
plot(swingLow, title="Swing Low", color=color.red, linewidth=1)

관련

더 많은