
이 전략은 교역량 가중 이동 평균 ((VWMA) 과 기계 학습 강화형 상대적으로 약한 지표 ((ML RSI) 를 교묘하게 결합하여 높은 확률의 거래 시스템을 만듭니다. 이 시스템은 가격과 거래량과의 관계를 활용하고 기계 학습 최적화 된 기술 지표를 사용하여 시장 추세가 명확할 때 더 정확한 거래를 발산합니다. 신호 전략의 핵심 논리는 다음과 같습니다: 가격 인 closeout이 VWMA보다 높고 ML RSI 값이 60보다 높을 때 구매 신호가 발생; 가격 인 closeout이 VWMA보다 낮고 RSIML 값이 40보다 낮을 때 판매 신호가 발생합니다.
이 전략의 핵심은 두 가지 주요 기술 지표의 상호 작용에 기반합니다.
거래량 가중 이동 평균 (VWMA): 전통적인 이동 평균과 달리, VWMA는 거래량 요소를 고려하여 거래량이 높은 시점의 가격에 더 큰 무게를 부여하여 시장의 흐름을 더 정확하게 반영합니다. 이 전략에서 VWMA는 중요한 트렌드 확인 도구로써, 가격이 VWMA 위에 있을 때 비지니스 트렌드를 나타내고, 반대로 하향 트렌드를 나타냅니다.
기계 학습 강화형 RSI (ML RSI): 전통적인 RSI와 고급 평준화 기술을 결합하여 (ALMA, EMA 등) 일반 RSI의 소음을 줄이고 가격 움직임에 대한 반응성을 향상시킵니다. 이 지표는 약한 신호를 필터링하고 트렌드 확인을 향상시킵니다. 특히, 전략은 SMA, EMA, DEMA, TEMA, WMA, VWMA, SMMA, HMA, LSMA 및 ALMA 등 여러 종류의 이동 평균 유형을 선택하여 RSI 평준화를 허용합니다.
구매 논리는 지연 확인 메커니즘을 설계했다: 하나의 조건만 충족되면 ((VWMA 또는 ML RSI가 60보다 높다)) 시스템은 두 번째 조건이 확인된 후에만 입장을 기다리고 있다. 이 디자인은 가짜 신호를 크게 줄이고 거래 성공률을 높였다.
판매 논리는 상대적으로 엄격합니다: 가격 종료는 VWMA보다 낮고 ML RSI가 40 이하로 내려가도록 요구합니다. 이러한 디자인은 추세가 실제로 반전되면 퇴출하는 것을 보장하고 조기 퇴출을 방지합니다.
통합 신호 확인가격, 거래량 및 기술 지표의 다차원 분석을 결합하여 단일 지표로 인해 발생할 수 있는 잘못된 신호를 줄입니다.
기계 학습 강화: 여러 평준화 기술을 통해 최적화된 RSI, 보다 안정적이고 소음이 적은 신호를 제공하며, 특히 ALMA (Arnaud Legoux 이동 평균) 와 같은 고급 알고리즘의 적용으로 신호 품질이 크게 향상되었다.
유연한 변수 구성전략은 VWMA 길이, ML RSI 부드러운 방법, ALMA 시그마 값 및 입출력 RSI 미지수와 같은 매개 변수를 조정할 수 있습니다. 이는 거래자가 다양한 시장 환경에 따라 전략의 성능을 최적화 할 수 있도록합니다.
명확한 위험 관리1.5%의 내장된 스톱 및 스톱 손실 메커니즘은 거래의 위험을 통제하고, 단일 거래로 인해 과도한 손실을 방지합니다.
이중 확인 메커니즘: 두 지표가 동시에 충족되어야 거래 신호를 생성할 수 있으며, 이는 잘못된 판단의 비율을 크게 감소시킵니다.
디자인 확정 지연: 일부 조건이 충족된 경우, 전략은 모든 조건이 충족된 후에 거래를 실행하기 위해 기다립니다. 이는 불필요한 거래 수를 더 줄이고 거래 비용을 절감합니다.
지연 위험: ML RSI가 기계 학습 방법을 통해 잡음을 줄였음에도 불구하고, VWMA는 이동 평균으로서 약간의 지연성을 가지고 있으며, 이는 급격한 변동 시장에서 신호 지연을 초래할 수 있습니다.
변수 최적화 함수: 과도한 최적화 파라미터는 과도한 적합성을 초래할 수 있으며, 실체에서 좋지 않은 성능을 나타낼 수 있다. 전향 테스트 또는 다양한 테스트 샘플을 통해 파라미터의 안정성을 검증하는 것이 좋습니다.
고정 정지 손실의 한계: 1.5%의 고정된 스톱 스톱 손실 지점은 모든 시장 환경에 적합하지 않을 수 있으며, 특히 높은 변동성이있는 시장에서. ATR을 사용하여 스톱 손실 수준을 동적으로 조정하는 것이 고려 될 수 있습니다.
단일 시간 프레임 제한전략은 단일 시간 프레임에서만 작동하여 더 큰 트렌드의 전환점을 놓칠 수 있습니다. 다중 시간 프레임 분석과 결합하여 의사 결정 품질을 향상시키는 것이 좋습니다.
RSI 하락 고정 문제60과 40의 고정 RSI 경계는 다른 시장 환경에서 충분히 유연하지 않을 수 있습니다. 동적 경계를 사용하거나 역사적 변동성에 따라 경계를 조정하는 것을 고려하십시오.
시장 위축 위험수평 시장에서, 가격의 빈번한 VWMA 통과는 과도한 거래를 유발할 수 있으며, 비용을 증가시킵니다. 변동률 지표 또는 트렌드 강도 확인과 같은 추가 필터링 조건을 추가 할 수 있습니다.
다중 시간 프레임 분석 통합: 더 높은 시간 프레임의 트렌드 확인을 도입하여, 더 큰 트렌드 방향이 일치하는 경우에만 거래하면, 승률을 크게 향상시킬 수 있다. 예를 들어, 일선 VWMA를 트렌드 필터로 추가하여 일선이 상승하는 경우에만 더 많이 할 수 있다.
동적 상쇄 메커니즘ATR (진짜 파동폭) 으로 고정된 퍼센트 스톱로드를 대체하여 스톱 포인트가 시장의 변동성에 따라 자동으로 조정될 수 있도록 하며, 변동이 큰 시간에 가격에 더 많은 호흡 공간을 주고, 변동시간에 더 긴밀하게 이익을 보호한다.
신호 강도 등급: ML RSI와 하락의 거리와 가격과 VWMA의 관계에 따라 신호 강도를 차분하고, 그에 따라 포지션 크기를 조정하여 더 정교한 자금 관리를 수행한다.
시장 환경 인식에 참여: 변동률 지표 (ATR 또는 볼린저 대역폭과 같은) 를 추가하여 시장 환경을 식별하고 다른 환경에서 다른 매개 변수 또는 전략 변형을 적용합니다.
기계 학습 최적화 매개 변수를 도입합니다.: 유전 알고리즘이나 베이스 최적화와 같은 기계 학습 기술을 사용하여, 전략 매개 변수를 다양한 시장 환경에 맞게 자동으로 조정하여 인위적으로 과다 조정되는 것을 피합니다.
ML RSI 알고리즘 개선: 더 고급 평준화 알고리즘을 시도하거나 거래량, 가격 변동률 등과 같은 다른 기술 지표의 입력을 추가하여 ML RSI의 예측 능력을 더욱 향상시킵니다.
시장 정서 지표를 추가합니다: 시장 감정 지표인 VIX나 옵션의 함축된 변동률을 통합하고, 극심한 시장 감정의 경우 전략적 행동을 조정하고, 고위험 환경에서 과도한 거래를 피한다.
VWMA는 기계 학습 강화 RSI를 결합한 동적 거래 시스템을 통해 전통적인 기술 분석과 현대 기계 학습 기술을 결합한 고급 정량화 거래 전략이다. 거래량 가중된 이동 평균을 통해 제공되는 트렌드 정보가 기계 학습을 최적화한 RSI 지표에서 제공되는 동적 정보와 결합하면 트렌드가 명확할 때 높은 품질의 거래를 생성할 수 있다.
전략의 핵심 장점은 여러 가지 확인 메커니즘과 유연한 파라미터 구성으로 다른 시장 환경에 적응 할 수 있습니다. 동시에, 내장 된 위험 관리 메커니즘은 각 거래의 위험을 제어 할 수 있도록합니다. 그러나, 이 전략은 또한 지연성, 고정 파라미터 제한과 같은 위험에 직면하고 있으며, 다중 시간 프레임 분석, 동적 중단 메커니즘과 같은 방향으로 최적화가 필요합니다.
양적 거래자에 대해서는, 이 전략은 강력한 기본 프레임워크를 제공하며, 개인 거래 스타일과 시장 선호도에 따라 더욱 커스터마이징 및 최적화 할 수 있습니다. 이 전략은 다중 시간 프레임 분석, 기계 학습 파라미터 최적화 등과 같은 더 고급 기술과 방법을 결합하여 다양한 시장 환경에서 안정적인 성능을 유지할 잠재력을 가지고 있습니다.
/*backtest
start: 2024-07-08 00:00:00
end: 2025-07-04 08:00:00
period: 4d
basePeriod: 4d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("VWMA + ML RSI Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === VWMA INPUTS ===
length = input.int(200, minval=1, title="VWMA Length")
src = input.source(hlc3, title="Source")
mult = input.float(3.0, minval=0.001, maxval=50, title="Multiplier")
// === VWMA CALCULATION ===
basis = ta.vwma(src, length)
plot(basis, title="VWMA Basis", color=color.fuchsia, linewidth=2)
// === ML RSI Actual Integration ===
rsiLength = input.int(14, title="RSI Length")
smoothingLength = input.int(3, "Smoothing Length")
mlMaType = input.string("ALMA", "MA Type", options=["SMA", "EMA", "DEMA", "TEMA", "WMA", "VWMA", "SMMA", "HMA", "LSMA", "ALMA"])
almaSigma = input.int(4, "ALMA Sigma")
// === Moving Average Function ===
calcMovingAverage(type, src, length, sigma) =>
float result = na
if type == "SMA"
result := ta.sma(src, length)
else if type == "EMA"
result := ta.ema(src, length)
else if type == "DEMA"
e1 = ta.ema(src, length)
e2 = ta.ema(e1, length)
result := 2 * e1 - e2
else if type == "TEMA"
e1 = ta.ema(src, length)
e2 = ta.ema(e1, length)
e3 = ta.ema(e2, length)
result := 3 * (e1 - e2) + e3
else if type == "WMA"
norm = 0.0
sum = 0.0
for i = 0 to length - 1
weight = (length - i)
norm := norm + weight
sum := sum + src[i] * weight
result := sum / norm
else if type == "VWMA"
result := ta.vwma(src, length)
else if type == "SMMA"
result := ta.rma(src, length)
else if type == "HMA"
result := ta.hma(src, length)
else if type == "LSMA"
result := ta.linreg(src, length, 0)
else if type == "ALMA"
result := ta.alma(src, length, 0.85, sigma)
result
// === Final ML RSI ===
baseRsi = ta.rsi(close, rsiLength)
smoothedRsi = calcMovingAverage(mlMaType, baseRsi, smoothingLength, almaSigma)
finalRsi = smoothedRsi
plot(finalRsi, title="ML RSI", color=color.orange)
// === Buy Condition Flags ===
buyReady = close > basis and finalRsi > 60
// Delayed condition trackers
var bool waitingForRsi = false
var bool waitingForClose = false
if close > basis and finalRsi <= 60
waitingForRsi := true
else if finalRsi > 60 and close <= basis
waitingForClose := true
// Reset flags when both conditions meet
if buyReady
waitingForRsi := false
waitingForClose := false
// Final Buy Condition
shouldBuy = buyReady or (waitingForRsi and finalRsi > 60 and close > basis) or (waitingForClose and close > basis and finalRsi > 60)
// === Strategy Entry ===
if shouldBuy and strategy.position_size == 0
strategy.entry("Long", strategy.long)
// === Take Profit and Stop Loss ===
takeLevel = strategy.position_avg_price * 1.015
stopLevel = strategy.position_avg_price * 0.985
// === Exit Conditions ===
sellCondition = close < basis and finalRsi < 40
if strategy.position_size > 0
strategy.exit("TP/SL", from_entry="Long", limit=takeLevel, stop=stopLevel)
if sellCondition
strategy.close("Long")
// === Buy Signal Plot ===
if shouldBuy and strategy.position_size == 0
label.new(bar_index, low, "BUY", style=label.style_label_up, color=color.green, textcolor=color.white)
// === Sell Signal Plot ===
if sellCondition and strategy.position_size > 0
label.new(bar_index, high, "SELL", style=label.style_label_down, color=color.red, textcolor=color.white)
// === Plotting Levels for Visuals ===
hline(60, "Buy ML RSI Threshold", color=color.green)
hline(40, "Sell ML RSI Threshold", color=color.red)