지지 및 저항 반전 패턴을 기반으로 한 양적 거래 전략


생성 날짜: 2024-06-07 16:45:09 마지막으로 수정됨: 2024-06-07 16:45:09
복사: 3 클릭수: 611
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

지지 및 저항 반전 패턴을 기반으로 한 양적 거래 전략

개요

이 전략은 기술 분석의 반전 형태를 기반으로 (선, 삼키기 형태 및 십자성) 1시간 차트에 대한 지지와 저항의 위치를 기반으로 거래한다. 전략은 잠재적인 시장 반전 지점을 식별하고 예상된 스톱 및 스톱 손실 수준을 통해 거래를 수행한다.

이 전략의 주요 아이디어는 지지부서 근처에서 보이스 리버스 형태가 나타났을 때 더 많은 포지션을 열고, 저항부서 근처에서 보이스 리버스 형태가 나타났을 때 빈 포지션을 열습니다. 동시에 위험을 제어하고 이익을 잠금하기 위해 스톱 및 스톱 레벨을 설정합니다.

전략 원칙

  1. ta.lowest() 과 ta.highest() 함수를 사용하여 지정된 회귀 기간 동안의 최저 가격과 최고 가격을 각각 계산하여 지지점과 저항점을 결정한다.
  2. 현재 이 줄, 삼킨 형태, 또는 십자별을 형성하는지 판단한다.
  3. 지지점 근처에서 보잉 반전 형태가 나타난다면, 더 많은 포지션을 열고, 저항점 근처에서 하향 반전 형태가 나타난다면, 빈 포지션을 열는다.
  4. 포지션 개시 가격의 3%를 스톱 가격으로 설정하고 포지션 개시 가격의 1%를 스톱로스트 가격으로 설정합니다.
  5. 가격이 스톱 또는 스톱 손실 수준에 도달했을 때, 평점.

전략적 이점

  1. 반전 형태와 핵심 지지부진 지점과 결합하여 거래 신호의 신뢰성을 높인다.
  2. 명확한 스톱 및 스톱 손실 수준을 설정하여 위험을 효과적으로 제어하십시오.
  3. 트렌드 및 변동 시장에 적용되며 잠재적인 역전 기회를 잡을 수 있습니다.
  4. 코드는 간결하고 이해하기 쉽고 구현하기 쉽습니다.

전략적 위험

  1. 불안한 시장에서는 종종 반전 신호가 발생하여 과도한 거래와 수수료 손실이 발생할 수 있습니다.
  2. 지지점과 저항점의 판단은 회귀기 선택에 의존하며, 다른 회귀기는 다른 결과를 초래할 수 있다.
  3. 반전형의 신뢰성은 절대적이지 않으며, 잘못된 신호는 손실을 초래할 수 있다.

해결책:

  1. 역형의 파라미터와 확인 조건을 조정하여 거짓 신호를 줄인다.
  2. 다른 기술 지표 또는 시장 감정 지표와 결합하여 신호의 신뢰성을 높인다.
  3. 다른 시장 상황에 대응하기 위해 정지 및 손실 수준을 적절하게 조정하십시오.

전략 최적화 방향

  1. 거래량 지표를 도입하여 역전형의 유효성을 확인한다. 거래량이 높은 역전형은 더 신뢰할 수 있다.
  2. 여러 시간 프레임의 지지 저항 지점을 고려하여 지지 저항 지점의 정확성을 향상시킵니다.
  3. 이동 평균과 같은 추세 지표와 결합하여 추세 방향으로 거래하고 역동적인 거래를 피하십시오.
  4. 시장의 변동성에 따라 최적화된 스톱 및 스로드 레벨을 사용하여 더 나은 리스크-이익 비율을 얻습니다.

요약하다

이 전략은 지지부진과 저항부진 근처의 반전 형태를 식별하여 잠재적인 거래 기회를 포착한다. 그것은 간단하고 사용하기 쉽고 다양한 시장 환경에 적합하다. 그러나 전략의 성공은 반전 형태와 지지부진의 정확한 판단에 의존한다. 거래 신호의 확인 조건을 최적화하여 다른 기술 지표와 결합하여 전략의 성능을 더욱 향상시킬 수 있으며, 동적으로 중지 손실 수준을 조정할 수 있다.

전략 소스 코드
/*backtest
start: 2024-05-07 00:00:00
end: 2024-06-06 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Kingcoinmilioner

//@version=5
strategy("Reversal Patterns at Support and Resistance", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Parameters
support_resistance_lookback = input.int(50, title="Support/Resistance Lookback Period")
reversal_tolerance = input.float(0.01, title="Reversal Tolerance (percent)", step=0.01) / 100
take_profit_percent = input.float(3, title="Take Profit (%)") / 100
stop_loss_percent = input.float(1, title="Stop Loss (%)") / 100

// Functions to identify key support and resistance levels
findSupport() =>
    ta.lowest(low, support_resistance_lookback)

findResistance() =>
    ta.highest(high, support_resistance_lookback)

// Identify reversal patterns
isHammer() =>
    body = math.abs(close - open)
    lowerWick = open > close ? (low < close ? close - low : open - low) : (low < open ? open - low : close - low)
    upperWick = high - math.max(open, close)
    lowerWick > body * 2 and upperWick < body

isEngulfing() =>
    (close[1] < open[1] and close > open and close > open[1] and open < close[1]) 
    (close[1] > open[1] and close < open and close < open[1] and open > close[1])

isDoji() =>
    math.abs(open - close) <= (high - low) * 0.1

// Identify support and resistance levels
support = findSupport()
resistance = findResistance()

// Check for reversal patterns at support and resistance
hammerAtSupport = isHammer() and (low <= support * (1 + reversal_tolerance))
engulfingAtSupport = isEngulfing() and (low <= support * (1 + reversal_tolerance))
dojiAtSupport = isDoji() and (low <= support * (1 + reversal_tolerance))

hammerAtResistance = isHammer() and (high >= resistance * (1 - reversal_tolerance))
engulfingAtResistance = isEngulfing() and (high >= resistance * (1 - reversal_tolerance))
dojiAtResistance = isDoji() and (high >= resistance * (1 - reversal_tolerance))

// Trading logic
if (hammerAtSupport or engulfingAtSupport or dojiAtSupport)
    strategy.entry("Long", strategy.long)
    stop_level = low * (1 - stop_loss_percent)
    take_profit_level = close * (1 + take_profit_percent)
    strategy.exit("Take Profit/Stop Loss", from_entry="Long", stop=stop_level, limit=take_profit_level)

if (hammerAtResistance or engulfingAtResistance or dojiAtResistance)
    strategy.entry("Short", strategy.short)
    stop_level = high * (1 + stop_loss_percent)
    take_profit_level = close * (1 - take_profit_percent)
    strategy.exit("Take Profit/Stop Loss", from_entry="Short", stop=stop_level, limit=take_profit_level)

// Plot support and resistance levels for visualization
plot(support, color=color.green, linewidth=1, title="Support Level")
plot(resistance, color=color.red, linewidth=1, title="Resistance Level")

// Plot reversal patterns on the chart for visualization
plotshape(series=hammerAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer at Support")
plotshape(series=engulfingAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Engulfing at Support")
plotshape(series=dojiAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Doji at Support")

plotshape(series=hammerAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Hammer at Resistance")
plotshape(series=engulfingAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Engulfing at Resistance")
plotshape(series=dojiAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Doji at Resistance")