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

지원 및 저항 수준에서 반전 패턴에 기초한 양적 거래 전략

저자:차오장, 날짜: 2024-06-07 16:45:09
태그:

img

전반적인 설명

이 전략은 역전 패턴 (hammer, engulfing, and doji) 과 기술 분석에서 지원 및 저항 수준, 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")


더 많은