Bullish Engulfing 전략 Bollinger Band Risk Management를 위한 양적 거래 시스템

BB SMA
생성 날짜: 2025-02-25 10:57:40 마지막으로 수정됨: 2025-02-25 10:57:40
복사: 0 클릭수: 430
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

Bullish Engulfing 전략 Bollinger Band Risk Management를 위한 양적 거래 시스템 Bullish Engulfing 전략 Bollinger Band Risk Management를 위한 양적 거래 시스템

개요

이 전략은 기술 분석을 기반으로 한 정량 거래 시스템으로, 주로 입시 신호로 포지션 삼킬 형태를 이용하며, 부린밴드 변동성 지표와 결합하여 위험 관리 및 위치 통제를 수행한다. 이 전략은 포지션 삼킬 형태를 식별한 후, 부린밴드 계산의 변동 범위에 따라 위험 비율을 결정하고, 그 다음 계좌 총액의 고정 비율을 기반으로 정확한 위치 크기를 계산하고, 최종적으로 스톱 손실과 고정 위험 수익률 비율 (4R) 을 설정하여 수익 목표를 관리한다.

전략 원칙

이 전략의 핵심 논리는 크게 세 부분으로 나다. 신호 생성, 포지션 관리, 탈퇴 조건.

첫째, 신호 생성은 보 삼킨 형태에 기반하며, 이 형태는 다음 조건을 충족해야 한다:

  1. 현재 K선 종료 가격은 개시 가격보다 높습니다.
  2. 이전 K 선의 종료 가격은 개시 가격보다 낮다 (阴线)
  3. 현재 K 라인 종료 가격은 이전 K 라인 개시 가격보다 높습니다.
  4. 현재 K 라인 개시 가격은 이전 K 라인 종료 가격보다 낮습니다.
  5. 거래량이 최소 설정값보다 커야 합니다 (부정값 1,000,000)

두 번째, 포지션 관리는 다음과 같은 단계를 통해 이루어집니다.

  1. 40주기, 2.5 표준차의 부린 띠를 이용하여 계산
  2. 브린 벨트를 통해 상하 레일 사이의 가격 차이를 계산 R 값: R = 0.4 * (1 - (하하 레일 / 상하 레일))
  3. 포트폴리오 총액의 0.75%를 거래 당 위험 금액으로 사용하는 것
  4. 정밀한 포지션 크기는 정지 거리 (R 값) 와 입시 가격에 따라 계산됩니다.

마지막으로, 탈퇴 조건은 다음과 같습니다.

  1. 스톱로스: 가격이 R%를 빼고 입시 가격으로 떨어질 때 퇴출
  2. 이윤: 가격 상승이 4R%의 입시 가격으로 증가하면 퇴출

전략적 이점

  1. 위험 제어 정확하고 동적: 이 전략은 고정된 스톱로스를 사용하지 않고, 시장의 현재 변동성에 따라 (블린 밴드 계산을 통해) 위험 매개 변수를 동적으로 조정하여 시스템이 다양한 시장 환경에 적응할 수 있도록합니다.

  2. 고정 비율 리스크 관리: 거래 당 리스크 계좌의 0.75%만, 단일 거래의 과도한 손실을 효과적으로 방지하고 장기 재원 관리의 안정성을 달성한다.

  3. 정확한 포지션 계산: 부린 밴드 변동성과 위험 금액에 따라 각 거래의 포지션 크기를 정확하게 계산하여 다양한 시장 조건에서 일관된 위험 노출을 유지합니다.

  4. 명확한 리스크/이익 비율: 4R의 수익 목표를 고정하여, 각 거래의 잠재적인 수익이 잠재적인 위험의 4배를 보장하고, 전문 거래의 리스크/이익 요구 사항에 부합한다.

  5. 거래 상황을 시각화: 입시 신호를 표시하고 거래 간격 상자를 그리는 것으로 거래자의 거래 성과를 직관적으로 이해할 수 있도록 도와줍니다.

전략적 위험

  1. 시간 효과 위험: 부자 포식 형태는 단기 가격 역전 신호이며, 중기 및 장기 동향 변화를 예측할 수 없으며, 강한 동향 시장에서 조기 진입으로 이어질 수 있다.

  2. 시장 조건 제한: 이 전략은 높은 변동성이나 유동성이 부족한 시장에서, 특히 부린이 비정상적으로 확장하거나 수축할 때, 좋지 않을 수 있다.

  3. 제한된 진입 조건: 단 하나의 관측 포식 형태에만 의존하는 것은 신호가 희박하거나 다른 유효한 진입 기회를 놓치게 할 수 있다.

  4. 고정 인수 위험: 고정된 0.4 인수를 사용하여 R 값을 계산하는 것은 특정 시장 조건에서 유연하지 않을 수 있으며 극단적인 시장 환경에 충분히 적응 할 수 없습니다.

  5. 잠재적인 슬라이드 포인트 문제: 높은 변동성이 있는 시장에서 실제 스톱 로드 실행 가격에 명백한 슬라이드 포인트가 발생할 수 있으며, 실제 리스크 제어 효과에 영향을 줄 수 있다.

전략 최적화 방향

  1. 필터링 조건을 추가: 트렌드 확인 지표 (예를 들어 이동 평균) 를 추가하는 것이 고려될 수 있으며, 주 트렌드 방향에서만 거래되는 포식 포식 형태를 보장하고 역동적인 거래를 피하십시오.

  2. 다중 시간 프레임 분석: 더 높은 시간 프레임의 시장 구조 분석을 도입하여 더 높은 시간 프레임의 트렌드 방향이 일치하는 경우에만 거래를 실행하여 신호 품질을 향상시킵니다.

  3. 동적으로 조정 위험 파라미터: 고정된 0.75% 위험 비율과 0.4의 R 값 인수를 조정 가능한 파라미터로 설정하여 시장의 변동성에 따라 자동으로 조정하여 낮은 변동성 시장에서 위험을 증가시키고 높은 변동성 시장에서 위험을 감소시킵니다.

  4. 최적화 탈퇴 전략: 고정된 중지 손실 및 이익 수준에만 의존하지 않고 이동 중지 또는 지표 기반의 동적 탈퇴 조건을 추가하는 것을 고려할 수 있습니다.

  5. 다중 지표 확인이 추가: 보석 삼키기 형태를 다른 기술 지표 (RSI, MACD 또는 거래량 분석과 같은) 와 결합하여 입시 신호의 신뢰성을 높인다.

요약하다

부린 리스크 관리의 관측 삼키는 전략 수량 거래 시스템은 전통적인 그래프 형태 인식과 현대적 위험 관리 방법을 결합한 완전한 거래 시스템이다. 이 전략은 부린 리스크를 통해 동적으로 위험 매개 변수를 조정하고, 각 거래의 포지션 크기를 정확하게 제어하고, 고정된 위험 수익률을 사용하여 수익 목표를 설정한다. 이 방법은 거래 규율을 유지하면서도 시장의 변동성에 대한 적응력을 제공합니다.

이 전략은 위험 관리에서 우수한 성적을 거뒀지만, 특히 진입 신호의 품질과 퇴출 전략의 유연성에서 최적화 할 여지가 있습니다. 추가 필터링 조건, 다중 시간 프레임 분석 및 동적 위험 파라미터 조정 등을 추가함으로써 이 전략은 다양한 시장 환경에서 적응성과 수익성을 더욱 향상시킬 수 있습니다.

종합적으로 볼 때, 이것은 전문적인 위험 관리 특성을 가진 완전한 거래 시스템이며, 재원 관리 및 위험 통제를 중요하게 생각하는 거래자가 사용하는 것이 좋습니다. 합리적인 최적화 및 매개 변수 조정으로, 이 전략은 장기적으로 안정적인 거래 도구가 될 수 있습니다.

전략 소스 코드
/*backtest
start: 2024-02-26 00:00:00
end: 2025-02-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("Bullish Engulfing Strategy with BB Risk", overlay=true)

// Input parameters for customization (optional, can be adjusted in Strategy Tester)
minVolume = input.int(1000000, "Minimum Volume", minval=1)  // Optional filter for liquidity

// Calculate Bollinger Bands (length=40, StdDev=2.5) for R
length = 40
mult = 2.5
basis = ta.sma(close, length)  // Middle Band (40-period SMA of close)
dev = mult * ta.stdev(close, length)  // Standard deviation multiplied by 2.5
upperBB = basis + dev  // Upper Bollinger Band
lowerBB = basis - dev  // Lower Bollinger Band

// Define R as 0.4 times the Bollinger Bands spread: R = 0.4 * ((1 - (lowerBB / upperBB)) * 100)
R = 0.4 * (1 - (lowerBB / upperBB))  // Percentage value, scaled by 0.4

// Define Bullish Engulfing pattern with optional volume filter
isBullishEngulfing() => close > open and close[1] < open[1] and close > open[1] and open < close[1] and close[1] < open[1] and close > open and volume > minVolume

bullishEngulfing = isBullishEngulfing()

// Track position and entry details
var bool inPosition = false
var float entryPrice = 0.0
var int entryBar = 0
var int exitBar = 0  // Track exit bar (added here to fix undeclared variable)
var float exitPrice = 0.0  // Track exit price

// Enter long position on the next bar after Bullish Engulfing, with position size risking 0.75% of portfolio
if (bullishEngulfing and not inPosition)
    // Calculate position size to risk 0.75% of portfolio
    portfolioValue = strategy.equity  // Current portfolio equity
    riskPerTrade = portfolioValue * 0.0075  // 0.75% of portfolio
    stopLossDistance = R  // R% of entry price (stop-loss distance)
    entryPrice := close
    positionSize = riskPerTrade / stopLossDistance / entryPrice  // Position size in units (contracts/shares)
    
    // Ensure positionSize is rounded to a practical number (e.g., whole shares)
    positionSize := math.round(positionSize)
    
    // Enter long position with calculated size
    strategy.entry("Long", strategy.long, limit = entryPrice, qty=positionSize)
    inPosition := true
    entryBar := bar_index

// Exit logic: Stop-loss or Take-profit
if (inPosition)
    // Stop-loss: Exit if price drops below entryPrice - R%
    stopLossLevel = entryPrice * (1 - R)
    if (low <= stopLossLevel)
        strategy.close("Long")
        inPosition := false
        exitBar := bar_index
        exitPrice := close
    
    // Take-profit: Exit if price rises above entryPrice + 4R%
    takeProfitLevel = entryPrice * (1 + 4 * R)
    if (high >= takeProfitLevel)
        strategy.close("Long")
        inPosition := false
        exitBar := bar_index
        exitPrice := close

// Optional: Plot signals and R for visualization
if (bullishEngulfing)
    label.new(bar_index, high, "Bullish Engulfing", yloc=yloc.abovebar, color=color.green, style=label.style_label_down, textcolor=color.white)

plot(R, title="R (BB Spread %)", color=color.blue, style=plot.style_histogram)