
고정 범위 거래량 분포와 고정 가중 거래량 평균 가격 결합의 트렌드 판단과 동적 중지 전략은 일괄적인 거래 시스템으로, 고정 범위 거래량 분포 (FRVP) 와 고정 가중 거래량 평균 가격 (AVWAP) 의 두 가지 강력한 기술 분석 도구를 교묘하게 결합하고, RSI, EMA, MACD와 같은 여러 가지 동적 지표와 ATR 기반의 동적 중지 손실 관리를 결합합니다. 이 전략은 가격 트렌드를 포착하여 동시에 여러 개의 필터링 조건을 통해 거래 품질을 향상시키고 가짜 신호를 줄입니다.
이 전략의 핵심 원칙은 시장 구조와 동력을 다차원적으로 분석하여 거래량과 가격 행동을 결합하여 거래 결정을 내리는 것입니다. 구체적으로:
고정 가중 거래량 평균 가격 (AVWAP): 동적 지원/저항 수준으로, 중화 거래량으로 평균 가격을 계산하여 가격 돌파구에 중요한 참조점을 제공합니다. 가격이 AVWAP를 돌파하면 트렌드 방향이 확립되었음을 나타낼 수 있습니다.
고정 범주 환수량 분포 (FRVP): 지정된 주기 내의 최고 가격과 최저 가격을 분석하여 중간점 가격을 계산합니다. 이것은 시장 구조의 변화와 중요한 가격 수준을 식별하는 데 도움이됩니다.
지수 이동 평균 (EMA)2000주기 EMA는 역전 거래를 막기 위해 트렌드 필터로 사용됩니다. 가격이 EMA 위에있을 때만 더 많은 것을 고려하십시오.
상대적으로 약한 지수 (RSI)오버 바이/오버 셀 영역에서 거래하는 것을 피하고, 진입에 대해 추가 확인을 제공하십시오. 오버 바이에 대해서는 RSI가 오버 셀 수준보다 높을 것을 요구합니다.
MACD 확인트레이딩 신호의 질을 높이기 위해 동력 방향과 거래 방향이 일치하도록 한다.
수량 필터: 거래량이 20주기 평균보다 높을 때만 거래하고, 유동성이 낮은 환경에서 가짜 돌파구를 피하십시오.
ATR 기반의 정지 및 추적 정지: 시장의 변동성에 따라 스톱 포지션을 조정하여 자금을 보호하면서 충분한 가격 호흡 공간을 허용하십시오.
진입 조건은 엄격하게 모든 지표가 일치하게 확인하도록 요구하며, 이는 거래 신호의 신뢰성을 크게 향상시킵니다. 예를 들어, AVWAP를 깨고, EMA 위에 있고, RSI가 초과 수준보다 높으며, MACD가 변동량을 확인하고, 거래량이 충분합니다. 탈퇴 전략은 ATR 배수를 계산한 중지 및 추적 중지를 채택하여 위험 관리가 다양한 시장 변동 환경에 적응 할 수 있습니다.
이 전략은 여러 가지 장점이 있습니다.
다차원 분석: 가격, 거래량 및 동력 지표를 결합하여 전체적인 분석을 수행하여 더 포괄적인 시장 관점을 형성하고 단일 지표가 가져올 수있는 잘못된 신호를 줄입니다.
적응력ATR 기반의 중지 및 추적 중지 메커니즘은 시장의 변동성에 따라 자동으로 조정할 수 있으므로 전략은 다양한 시장 환경에서 적절한 위험 관리를 유지할 수 있습니다.
트렌드와 거래량AVWAP와 FRVP는 거래량에 기반한 가격의 지지와 저항 수준을 제공하며, 단순한 가격 분석보다 더 설득력이 있습니다. 왜냐하면 그들은 실제 시장 참여도를 반영하기 때문입니다.
엄격한 입학 조건: 복수확인 메커니즘은 가짜 신호를 현저히 줄이고 거래의 승률을 높여주고 거래의 빈도를 줄일 수 있지만 품질은 보장됩니다.
동적 위험 관리ATR 기반의 스톱 전략은 시장의 변동성에 따라 스톱 거리를 자동으로 조정하여 위험 관리를 더 정확하고 합리적으로 만듭니다.
낮은 거래량을 필터링합니다.유동성이 낮은 환경에서 거래하는 것을 피하고, 슬라이드 포인트와 가짜 브레이크의 위험을 줄입니다.
시각적 피드백전략: 태그 기능을 통해 거래 신호를 직관적으로 차트에 표시하여 거래자가 시스템의 성능을 더 잘 이해하고 평가하도록 도와줍니다.
이 전략은 포괄적으로 설계되었지만, 몇 가지 잠재적인 위험들이 있습니다.
매개변수 민감도: 여러 지표와 매개 변수의 조합은 과잉 최적화 위험을 초래할 수 있다. 다른 시장과 시간 프레임은 충분한 피드백과 검증이 필요한 다른 매개 변수 설정을 필요로 할 수 있다.
수평 시장 성과: 명백한 추세가 없는 가로수지 시장에서, 전략이 너무 많은 가짜 브레이크 신호를 생성하여 연속적인 손실을 초래할 수 있습니다.
뒤처진 문제: EMA 및 다른 지표는 본질적으로 지연성이 있으며, 입출입 시기가 약간 늦어지고 수익의 일부를 놓치게 할 수 있습니다. 더 빠른 지표를 사용하거나 기존 지표 매개 변수를 조정하는 것이 문제를 완화 할 수 있습니다.
공중에서 뛰어내리는 위험을 막는 것: 빠른 시장이나 하룻밤 사이에 파산하는 상황에서 ATR 기반의 중지 손실은 자금을 완전히 보호 할 수 없습니다. 최대 손실 제한을 설정하거나 옵션 보호 전략을 사용하는 것이 좋습니다.
기술적인 지표에 지나치게 의존하는 것전략은 전적으로 기술적 분석에 기반하여 기본 사항 및 시장 감정과 같은 요소를 무시합니다. 시장 감정 지표 또는 기본 필터를 통합하여 더 포괄적인 시장 관점을 얻을 수 있습니다.
빈번한 거래 비용: 매개 변수 설정이 잘못되면 거래 빈도가 증가하고 거래 비용이 증가할 수 있다. 매개 변수 최적화를 재검토하여 거래 빈도와 수익성 사이의 균형점을 찾아야합니다.
코드 분석을 바탕으로, 이 전략은 다음과 같은 방향으로 최적화될 수 있습니다:
동적 변수는 스스로 적응합니다.: RSI, EMA 등과 같은 파라미터를 동적으로 조정할 수 있으며, 시장의 변동성에 따라 자동으로 최적화하는 파라미터를 통해 전략이 더 적응할 수 있습니다. 예를 들어, 높은 변동성 시장에서 더 긴 RSI 주기를 사용하고, 낮은 변동성 시장에서 더 짧은 주기를 사용합니다.
시장 정서 지표를 추가합니다: VIX 또는 다른 시장 감정 지표를 통합하고, 극심한 공포나 탐욕의 시기에 전략적 행동을 조정하고, 시장의 극한 상황에서 거래하는 것을 피한다.
시간 필터: 시간 필터 기능을 추가하여 시장 개시와 종결 전의 높은 변동 시간을 피하거나 특정 거래 시간에 집중하여 승률을 높인다.
다중 시간 프레임 분석더 높은 시간 프레임의 확인 신호를 통합하여 거래 방향이 더 큰 추세와 일치하고 역동적인 거래 위험을 줄입니다.
수익 목표 설정 개선: 현재 코드에는 명확하게 정의되지 않은 수익 목표가 있으며, 주로 스톱 로킹 수익을 추적하는 것에 의존합니다. 핵심 저항 / 지원, 리스크 수익률 또는 가격 변동 범위에 따라 스마트 수익 목표를 설정할 수 있습니다.
거래량 분석을 최적화: 거래량 분석을 더 세밀하게 할 수 있습니다. 예를 들어, 상대적인 거래량 변화율을 사용하는 간단한 평균값 비교가 아니라 거래량 이상성을 더 정확하게 판단 할 수 있습니다.
정책 정지 메커니즘을 추가합니다.: 연속적인 손실 또는 특정 시장 조건에서 자동으로 거래를 중지하고, 시스템적 위험으로부터 자금을 보호하고, 조건이 회복될 때까지 거래를 재개한다.
자금 관리 최적화: 현재 전략은 고정 비율 ((10%) 을 사용하는 자금 관리 방식을 사용하며, 변동률에 기반한 포지션 규모 조정, 낮은 변동성 시에는 포지션을 증가시키고 높은 변동성 시에는 포지션을 감소시키는 것을 고려할 수 있습니다.
고정 범위 거래량 분포와 고정 가중 거래량 평균 가격을 결합한 트렌드 판단과 동적 중지 전략은 잘 설계된 정량화 거래 시스템으로, 여러 가지 기술 분석 도구와 지표를 통합하여 포괄적이고 적응 가능한 거래 프레임 워크를 형성합니다. 전략의 핵심 장점은 거래량 기반의 가격 분석 (FRVP 및 AVWAP) 과 전통적인 트렌드 및 동적 지표 (EMA, RSI, MACD) 를 결합하고, 유연한 위험 관리 장치가 보조되어 다양한 시장 환경에서 안정적인 성능을 유지할 수 있습니다.
매개 변수 민감성, 수평 시장의 부실성 등과 같은 잠재적인 위험이 존재하지만, 제안된 최적화 방향, 즉 동적 매개 변수 적응, 다중 시간 프레임 분석 및 개선된 자금 관리와 같은 문제들은 대부분 효과적으로 완화될 수 있다. 특히 시장 감정 지표와 전략 중단 메커니즘의 제안은 시스템의 안정성과 장기적인 수익성을 더욱 향상시킬 것으로 보인다.
종합적인 거래 전략을 추구하는 양적 거래자에게는 이 시스템은 개인의 위험 선호도와 거래 품종 특성에 따라 더욱 커스터마이징 및 최적화를 할 수 있는 견고한 기반을 제공합니다. 엄격한 피드백과 점진적인 개선을 통해 이 전략은 장기적으로 효과적인 거래 도구가 될 잠재력을 가지고 있습니다.
/*backtest
start: 2024-03-06 00:00:00
end: 2025-03-04 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("FRVP + AVWAP Improved By NgashCT", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Inputs
length = input(50, title="AVWAP Length")
frvpLength = input(100, title="FRVP Length")
rsiLength = input(14, title="RSI Length")
rsiOverbought = input(70, title="RSI Overbought")
rsiOversold = input(30, title="RSI Oversold")
emaLength = input(200, title="EMA Length")
atrMultiplier = input(1.5, title="ATR Multiplier for Stop Loss")
trailStopMultiplier = input(2, title="ATR Multiplier for Trailing Stop")
// Indicators
avwap = ta.vwap(close)
ema = ta.ema(close, emaLength)
rsi = ta.rsi(close, rsiLength)
macdLine = ta.ema(close, 12) - ta.ema(close, 26)
signalLine = ta.ema(macdLine, 9)
atr = ta.atr(14)
// Volume Profile
highestHigh = ta.highest(high, frvpLength)
lowestLow = ta.lowest(low, frvpLength)
frvpMid = (highestHigh + lowestLow) / 2
// Entry Conditions
longCondition = ta.crossover(close, avwap) and close > ema and rsi > rsiOversold and macdLine > signalLine
shortCondition = ta.crossunder(close, avwap) and close < ema and rsi < rsiOverbought and macdLine < signalLine
// Volume Filter (Trade only when volume is above its moving average)
avgVolume = ta.sma(volume, 20)
volumeFilter = volume > avgVolume
longCondition := longCondition and volumeFilter
shortCondition := shortCondition and volumeFilter
// Debugging Prints
labelLong = longCondition ? "Long Signal" : ""
labelShort = shortCondition ? "Short Signal" : ""
label.new(bar_index, high, labelLong, color=color.green, textcolor=color.white)
label.new(bar_index, low, labelShort, color=color.red, textcolor=color.white)
// Strategy Orders
if longCondition
strategy.entry("Long", strategy.long)
strategy.exit("Exit Long", from_entry="Long", stop=close - atr * atrMultiplier, trail_points=atr * trailStopMultiplier)
if shortCondition
strategy.entry("Short", strategy.short)
strategy.exit("Exit Short", from_entry="Short", stop=close + atr * atrMultiplier, trail_points=atr * trailStopMultiplier)