
변동량과 용량 가중 트렌드 교차 전략은 시장의 변동이 낮은 곳에서 높은 곳으로 변하는 지점을 식별하여 거래 결정을 내리는 시장의 을 기반으로 한 정량 거래 시스템입니다. 이 전략은 두 가지 핵심 지표를 결합합니다. 변동량 지표 ((VMI) 와 용량 가중 가격 센터 ((VWPC)). VMI는 변동률 가속도를 측정하여 시장이 평온한 단계에서 활발한 단계로 전환 할 때 진입하고 변동이 혼란의 시점에 도달 할 때 퇴출합니다. VWPC는 거래량에 기반한 트렌드 필터로 전형적인 가격을 통해 전체 시장 방향을 결정합니다.
이 전략의 핵심 원칙은 시장의 변동성 변화의 주기 및 트렌드 방향에 대한 거래 결정을 이용하는 것이다. 구체적으로:
변동량 지표 (VMI) 계산:
용량 가중 가격 센터 (VWPC) 계산:
거래 논리는 두 단계로 구현됩니다.:
전략은 거래 방향을 설정할 수 있다 (만 더하고,만 적고 또는 양방향 거래), 그리고 각기 다른 시장 환경에 적응하기 위해 각기 다른 매개 변수를 최적화한다.
이 전략의 코드에 대한 더 깊은 분석은 다음과 같은 장점을 요약합니다.
시장주기에 따라 거래 시기를 선택합니다.이 전략은 VMI 지표를 통해 시장에서 낮은 변동에서 높은 변동으로의 전환점을 식별합니다. 이는 종종 새로운 가격의 시작을 나타냅니다.
거래량에 따른 트렌드 확인: VWPC는 거래량 가중치를 추가하여 단순한 이동 평균보다 더 대표적인 트렌드 지표를 제공하여 잘못된 신호를 줄입니다.
명확한 입출입 조건: 전략은 명확한 입문 논리 ((변동이 증가하기 시작) 와 출구 논리 ((변동이 극한에 도달) 를 가지고 있으며, 주관적 판단을 피한다.
매우 적응력이 좋다: 매개 변수 최적화를 통해, 이 전략은 다른 시장 환경과 거래 품종에 적응할 수 있다. 특히 VMI의 평온 영역과 혼돈 영역의 마이너스는 시장 특성에 따라 조정할 수 있다.
리스크 관리 통합이 전략에는 포지션 관리 (기록금의 15%를 기본으로 사용한다) 와 역거래 제한 (pyramiding=0) 이 내장되어 있어 위험을 통제하는 데 도움이 된다.
시각적 도움말전략: 전략은 VWPC 트렌드 라인 및 입출력 신호를 차트에 그려서 거래자가 시장 상태와 전략 논리를 직관적으로 이해할 수 있도록합니다.
계산 효율이 높습니다: ta.rma 및 ta.barssince와 같은 내장 함수를 사용하여 전략의 계산 효율이 높으며 실시간 거래 응용 프로그램에 적합하다.
이 전략은 여러 장점이 있지만, 다음과 같은 잠재적인 위험도 있습니다.
변동성 가짜 돌파구 위험: 시장이 일시적인 변동성 증가 후 급격히 하락하여 잘못된 신호를 유발할 수 있는 상황이 발생할 수 있다. 해결책은 VMI 평온지구 저점을 조정하거나 확인 조건을 증가시키는 것이다.
트렌드 판단 지연:VWPC는 추세 지표로서 다소 뒤처질 수 있으며, 시장이 급격하게 변할 때 적시에 반응하지 않을 수 있습니다.
매개변수 민감도: 전략적 성능은 파라미터 설정 (특히 VMI 길이와 값) 에 민감하며, 다른 시장 환경에는 다른 파라미터 조합이 필요할 수 있다. 다양한 시장 환경에 대한 피드백을 통해 파라미터 최적화를 권장한다.
거래 빈도 불확실성전략이 변동성에 기반하기 때문에, 다른 시장 단계에서 거래 신호의 빈도는 크게 달라질 수 있으며, 전체 수익률과 철회 통제에 영향을 미칩니다.
거래 비용의 영향: 전략은 거래 수수료를 고려하지만, 실제 거래에서는 슬라이드 포인트와 다른 거래 비용이 전략의 성과에 더 영향을 미칠 수 있습니다.
거래량 데이터에 의존:VWPC 지표는 거래량 데이터에 의존하며, 특정 시장 또는 시간 동안 거래량 데이터는 정확하지 않거나 신뢰할 수 없으며, 기준의 정확성에 영향을 미칩니다.
코드에 대한 심층적인 분석을 통해 다음과 같은 최적화 방향을 제시할 수 있습니다.
변동성 필터를 추가합니다.: 역동적 인 하락 조정 메커니즘을 도입 할 수 있습니다. 이는 VMI의 평온 영역과 혼돈 영역 하락값이 전체 시장의 변동 수준에 따라 자동으로 조정 될 수 있도록하여 전략의 적응력을 향상시킵니다.
트렌드 확인 메커니즘 강화: VWPC를 기반으로 여러 시간 프레임 트렌드 확인을 추가하거나, 다른 트렌드 지표와 결합하여 트렌드 판단의 정확도를 높일 수 있다.
출전 메커니즘을 최적화: 현재 전략은 VMI가 혼돈 영역에 도달했을 때만 출전합니다. 스톱 손실과 목표 수익 수준을 추가하거나, 위험을 더 잘 제어하고 수익을 잠금하기 위해 변동성을 기반으로 한 동적 스톱 손실 전략을 고려할 수 있습니다.
거래량 필터링을 늘립니다.: 거래량 확인 조건이 추가될 수 있으며, 거래량이 증가했을 때만 입점하여 낮은 유동성 환경에서 거래하는 것을 피한다.
시간 필터를 추가합니다.: 특정 시장은 특정 기간 동안 변동성이 있을 수 있으며, 시간 필터링 조건을 추가하여 알려진 저효율 거래 시기를 피할 수 있습니다.
변수 적응 메커니즘: 최근 시장의 성과에 따라 자동으로 변수를 조정하는 메커니즘을 개발할 수 있습니다. 이는 전략이 시장 변화에 더 잘 적응할 수 있도록 합니다.
자금 관리 최적화: 변동률에 기반한 동적 포지션 관리를 구현할 수 있으며, 다양한 변동 환경 하에서 거래 규모를 조정하고, 위험과 수익을 균형을 잡을 수 있다.
변동량과 용량 가중 트렌드 교차 전략은 변동성 분석과 트렌드 추적을 결합한 정량화 거래 시스템이다. VMI 지표를 통해 시장에서 평온한에서 활발한 전환점을 캡처하여 진입하고 변동이 최고조에 달했을 때 퇴출합니다. VWPC 지표를 사용하여 거래 방향이 전체적인 추세와 일치하는지 확인합니다. 이 전략의 핵심 장점은 시장의 변동주기의 중요한 전환점을 캡처하고 거래량 정보 필터링 트렌드 방향과 결합하여 거래 품질을 향상시키는 것입니다.
그러나, 이 전략은 또한 변동성 가짜 돌파, 트렌드 판단 지연 및 변수 감수성 등의 도전에 직면한다. 동적 하위값 조정, 강화 트렌드 확인 메커니즘, 출전 논리를 최적화하고 적응 변수를 구현하는 등의 방법을 도입함으로써 전략의 건전성과 적응성을 더욱 향상시킬 수 있다.
궁극적으로, 이 전략은 시장의 진동과 변동성 주기에 기반한 거래 프레임워크를 제공하며, 다양한 시장 환경에서 적용될 수 있지만, 거래자는 여전히 특정 거래 품종과 시장 특성에 따라 변수 최적화 및 전략 조정을 통해 최적의 효과를 얻습니다.
/*backtest
start: 2024-07-14 00:00:00
end: 2025-07-12 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":200000}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TiamatCrypto
//@version=5
strategy("Market Entropy Strategy V2.5",
overlay=true,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=15, // Slightly more aggressive allocation
commission_type=strategy.commission.percent,
commission_value=0.075,
pyramiding=0) // Allow only one trade in one direction
// --- General Settings ---
trade_direction = input.string("Both", "Trade Direction", options=["Long", "Short", "Both"], group="General Settings")
// --- Inputs for Optimization ---
// VMI Settings
vmi_length = input.int(14, "VMI Length", group="VMI Settings")
atr_period = input.int(10, "ATR Period for VMI", group="VMI Settings")
vmi_calm_zone = input.int(25, "VMI Calm Zone (Entry Level)", group="VMI Settings", step=5)
vmi_chaos_zone = input.int(85, "VMI Chaos Zone (Exit Level)", group="VMI Settings", step=5)
// VWPC Settings
vwpc_length = input.int(50, "VWPC Filter Length", group="VWPC Trend Filter")
setup_lookback = input.int(10, "How far to look for 'Armed' (candles)", group="Entry Logic")
// --- Indicator #1: Volatility Momentum Index (VMI) ---
current_atr = ta.atr(atr_period)
atr_change = current_atr - current_atr[1]
up_accel = atr_change > 0 ? atr_change : 0
down_accel = atr_change < 0 ? -atr_change : 0
avg_up_accel = ta.rma(up_accel, vmi_length)
avg_down_accel = ta.rma(down_accel, vmi_length)
rs_vmi = avg_down_accel == 0 ? 0 : avg_up_accel / avg_down_accel
vmi = avg_down_accel == 0 ? 100 : avg_up_accel == 0 ? 0 : 100 - (100 / (1 + rs_vmi))
// --- Indicator #2: Volume-Weighted Price Center (VWPC) ---
// Function to calculate VWPC
f_vwpc(length) =>
sum_price_volume = 0.0
sum_volume = 0.0
// We use the typical price, which better represents the candle
typical_price = (high + low + close) / 3
for i = 0 to length - 1
sum_price_volume += typical_price[i] * nz(volume[i])
sum_volume += nz(volume[i])
sum_volume == 0 ? typical_price : sum_price_volume / sum_volume
vwpc = f_vwpc(vwpc_length)
// --- Strategy Logic ---
// Trend Definition
is_uptrend = close > vwpc
is_downtrend = close < vwpc
// Phase 1: "Armed" Condition (Setup)
// We check if VMI WAS in the calm zone in the recent past
was_calm_recently = ta.barssince(vmi < vmi_calm_zone) < setup_lookback
// Phase 2: "Fire" Condition (Trigger)
// VMI is currently crossing the Calm Zone upwards
trigger_fire = ta.crossover(vmi, vmi_calm_zone)
// Combination for ENTRY
buy_signal = is_uptrend and was_calm_recently and trigger_fire
sell_signal = is_downtrend and was_calm_recently and trigger_fire
// Condition for EXIT ("Exhaustion")
// The same condition applies for both long and short - peak chaos
exit_signal = ta.crossover(vmi, vmi_chaos_zone)
// --- Executing Orders ---
// Entry Conditions
allow_longs = trade_direction == "Long" or trade_direction == "Both"
allow_shorts = trade_direction == "Short" or trade_direction == "Both"
// Entries
if (buy_signal and allow_longs)
strategy.entry("Buy", strategy.long, comment="Enter LONG (Armed->Fire)")
if (sell_signal and allow_shorts)
strategy.entry("Sell", strategy.short, comment="Enter SHORT (Armed->Fire)")
// Exits
if (strategy.position_size > 0 and exit_signal)
strategy.close("Buy", comment="Exit LONG (Chaos)")
if (strategy.position_size < 0 and exit_signal)
strategy.close("Sell", comment="Exit SHORT (Chaos)")
// --- Plotting on the chart for visual inspection ---
plot(vwpc, "VWPC Center of Gravity", color=color.new(color.yellow, 0), linewidth=2)
plotshape(buy_signal and allow_longs, "LONG Entry", shape.labelup, location.belowbar, color=color.new(color.aqua, 0), text="ENTRY ↑", textcolor=color.white, size=size.small)
plotshape(sell_signal and allow_shorts, "SHORT Entry", shape.labeldown, location.abovebar, color=color.new(color.fuchsia, 0), text="ENTRY ↓", textcolor=color.white, size=size.small)
// Plotting the exit signal for a better overview
exit_marker_y_pos = strategy.position_size > 0 ? high : low
plotshape(series=(exit_signal and strategy.position_size != 0 ? exit_marker_y_pos : na), title="Exit", style=shape.xcross, location=location.absolute, color=color.new(color.orange, 0), size=size.tiny, text="END")