
이 전략은 동력 지표와 평균 선의 조합을 사용하여, 시장 추세와 회전점을 식별하고, 추세가 전환될 때 거래하는 경향 추적 및 역동 거래 전략에 속한다. 주로 수요 지역, EMA 평균 선, 각종 HH, LL, LH, HL 빈 지역 표시, ATR 중지 등의 모듈로 구성된다.
K선 높고 낮은 점 범위를 기준으로 공급과 수요의 관계를 구분한다. 붉은 영역은 공급이 지나친 공급 영역, 녹색 영역은 공급이 지나친 수요 영역이다.
길이가 200인 EMA의 평균선을 계산하고, 가격과 EMA의 크기와의 관계를 통해 다공계 트렌드를 판단하여, 가격보다 높은 EMA는 상승 트렌드로 간주하고, 가격보다 낮은 EMA는 하락 트렌드로 간주한다.
K 선의 최근 두 개의 높낮이를 기준으로 회전 지역을 판단해보면:
14주기의 ATR값을 계산하고, 계수 2를 곱하여 이 전략의 스톱로즈가 된다.
가격을 모니터링하는 것은 전날 클라인의 높은 낮은 점과 관련이 있다. 가격이 전날의 높은 점보다 높으면 다중 신호가 발생하고; 가격이 전날의 낮은 점보다 낮으면 공허 신호가 발생한다. 입수 신호는 3기 K선 확인까지 지연되어 충격 파동으로 인한 잘못된 신호를 피한다. ATR 스톱 트래킹 방식을 채택하고, 가격이 스톱 라인을 초과하면 적극적으로 스톱 스톱 현 신호를 탈퇴한다.
위험 해결 방법:
이 전략은 공급 수요 분석, 트렌드 판단, 역전 인식 및 손실 관리 모듈을 통합하여 시장의 전환을 중요한 지역에서 효과적으로 식별 할 수 있습니다. 이것은 효과적인 트렌드 추적 및 역전 거래 전략입니다. 또한 지속적인 테스트와 최적화가 필요하며, 인적 경험 판단에 부합하여 장기적으로 안정적인 수익을 얻을 수 있습니다.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-20 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Supply and Demand Zones with EMA and Trailing Stop", shorttitle="SD Zones", overlay=true)
showBuySignals = input(true, title="Show Buy Signals", group="Signals")
showSellSignals = input(true, title="Show Sell Signals", group="Signals")
showHLZone = input(true, title="Show HL Zone", group="Zones")
showLHZone = input(true, title="Show LH Zone", group="Zones")
showHHZone = input(true, title="Show HH Zone", group="Zones")
showLLZone = input(true, title="Show LL Zone", group="Zones")
emaLength = input(200, title="EMA Length", group="EMA Settings")
atrLength = input(14, title="ATR Length", group="Trailing Stop")
atrMultiplier = input(2, title="ATR Multiplier", group="Trailing Stop")
// Function to identify supply and demand zones
getZones(src, len, mult) =>
base = request.security(syminfo.tickerid, "D", close)
upper = request.security(syminfo.tickerid, "D", high)
lower = request.security(syminfo.tickerid, "D", low)
multiplier = request.security(syminfo.tickerid, "D", mult)
zonetype = base + multiplier * len
zone = src >= zonetype
[zone, upper, lower]
// Identify supply and demand zones
[supplyZone, _, _] = getZones(close, high[1] - low[1], 1)
[demandZone, _, _] = getZones(close, high[1] - low[1], -1)
// Plot supply and demand zones
bgcolor(supplyZone ? color.new(color.red, 80) : na)
bgcolor(demandZone ? color.new(color.green, 80) : na)
// EMA with Linear Weighted method
ema = ta.ema(close, emaLength)
// Color code EMA based on its relation to candles
emaColor = close > ema ? color.new(color.green, 0) : close < ema ? color.new(color.red, 0) : color.new(color.yellow, 0)
// Plot EMA
plot(ema, color=emaColor, title="EMA")
// Entry Signal Conditions after the third candle
longCondition = ta.crossover(close, high[1]) and (bar_index >= 2)
shortCondition = ta.crossunder(close, low[1]) and (bar_index >= 2)
// Trailing Stop using ATR
atrValue = ta.atr(atrLength)
trailStop = close - atrMultiplier * atrValue
// Strategy Entry and Exit
if (longCondition)
strategy.entry("Buy", strategy.long)
strategy.exit("TrailStop", from_entry="Buy", loss=trailStop)
if (shortCondition)
strategy.entry("Sell", strategy.short)
strategy.exit("TrailStop", from_entry="Sell", loss=trailStop)
// Plot Entry Signals
plotshape(series=showBuySignals ? longCondition : na, title="Buy Signal", color=color.new(color.green, 0), style=shape.triangleup, location=location.belowbar)
plotshape(series=showSellSignals ? shortCondition : na, title="Sell Signal", color=color.new(color.red, 0), style=shape.triangledown, location=location.abovebar)
// Plot Trailing Stop
plot(trailStop, color=color.new(color.red, 0), title="Trailing Stop")
// Plot HH, LL, LH, and HL zones
plotshape(series=showHHZone and ta.highest(high, 2)[1] and ta.highest(high, 2)[2] ? 1 : na, title="HH Zone", color=color.new(color.blue, 80), style=shape.triangleup, location=location.abovebar)
plotshape(series=showLLZone and ta.lowest(low, 2)[1] and ta.lowest(low, 2)[2] ? 1 : na, title="LL Zone", color=color.new(color.blue, 80), style=shape.triangledown, location=location.belowbar)
plotshape(series=showLHZone and ta.highest(high, 2)[1] and ta.lowest(low, 2)[2] ? 1 : na, title="LH Zone", color=color.new(color.orange, 80), style=shape.triangleup, location=location.abovebar)
plotshape(series=showHLZone and ta.lowest(low, 2)[1] and ta.highest(high, 2)[2] ? 1 : na, title="HL Zone", color=color.new(color.orange, 80), style=shape.triangledown, location=location.belowbar)