
다차원 동량 트렌드 자조 거래 시스템은 이론에 기반한 정량 거래 전략으로, 핵심은 이론에 기반한 CETP-Plus 지표로, 이 지표는 이론에 기반한 이론에 기반한 이론에 기반한 이론에 기반한 이론에 기반한 이론에 기반한 CETP-Plus 지표입니다. 이 시스템은 지수 이동 평균의 최근 가중 원리 (EMA), 상대적으로 강한 이론의 동력 편차 (RSI), 평균 실제 범위 (ATR) 의 변동적 축소 (volatility scaling) 및 평균 방향 지수 (average directional index) 의 트렌드 강도를 하나의 평가로 통합합니다. 이 독특한 방법은 여러 지표의 복잡성을 피하고, 초기 트렌드 검출의 정확성과 다차원 거래의 균형성을 향상시킵니다.
이 전략의 핵심 원칙은 금융 시장의 도표 패턴 분석에 Shannon ?? 을 적용하는 것이다. Shannon ?? 은 정보 이론에서 유래하여, 무작위 변수의 불확실성이나 “혼란의 정도”를 정량화하기 위해 사용된다. 이 전략에서, 다음과 같은 방법으로 ?? 을 계산하고 적용한다:
최종 CETP 스코어는 이러한 요소들의 복합적인 산물이며,正值은 부진을 경향이 있고,負值은 부진을 경향이 있다. 거래 논리는 간단하고 직접적이다: CETP 스코어가 설정된正값을 초과할 때 더하고,負값을 초과할 때 공백한다. 미세한 거래를 피하기 위해, 전략에는 최소 가격 이동 필터가 추가되어, 현재 필터 그래프가 거래를 촉발하기에 충분한 범위가 있음을 보장한다. 위험 관리는 퍼센트 스톱, ATR 배수 및 추적 스톱으로 구현된다.
통합 신호CETP-Plus 지표는 여러 전통적인 지표 (EMA, RSI, ATR, ADX) 의 장점을 결합하여 단일하고 명확한 거래 신호를 제공하며 지표 충돌과 과다 적합성의 위험을 피합니다.
적응력전략: 전략은 시장 조건에 따라 자동으로 조정할 수 있으며, 다양한 변동 환경과 트렌드 강도에 적응할 수 있으며, 수동 개입이 필요하지 않고 여러 시장 상태에서 잘 작동합니다.
대칭 다공공 처리이 전략은 다단계 기회와 빈단계 기회에 동등한 무게를 부여하여 투기 시장과 투기 시장에서 효율적으로 작동할 수 있도록 하며, 방향성 편견에 영향을 받지 않습니다.
초기 트렌드 파악의 개념으로 시장 구조의 변화를 포착하여, 전통적인 지표보다 트렌드의 조기에 형성되는 것을 식별할 수 있으며, 더 나은 진입 시점을 제공합니다.
소음의 영향을 줄여라 분석과 직사각형 도표 분기 기술을 통해, 전략은 실제 신호와 시장 잡음을 구분할 수 있고, 가짜 신호의 발생을 줄일 수 있다.
사용자 정의많은 변수들이 서로 다른 거래 종류와 시간 프레임에 따라 최적화될 수 있어 전략은 매우 유연하고 적응할 수 있다.
전체적인 위험 관리: 퍼센티지 스톱, ATR 기반의 동적 스톱 및 추적 스톱, 그리고 최소 거래 필터와 효과적으로 통제된 철회 등의 다단계 위험 제어 메커니즘을 통합한다.
매개변수 민감도: 전략에는 여러 가지 조정 가능한 매개 변수가 포함되어 있으며, 과도한 최적화는 실판 거래에서 좋지 않은 성능을 초래할 수 있습니다. 다른 시장 환경에는 다른 매개 변수 설정이 필요할 수 있으며, 시스템 유지 관리를 복잡하게 만듭니다.
고주파 거래의 위험이 전략은 특히 변동성이 높은 시장에서 과도한 거래, 수수료 비용 증가 및 슬라이드 확대로 인해 많은 거래 신호를 발생시킬 수 있습니다.
계산의 복잡성: 3D 직선 도표 분기 상자 및 계산은 실시간으로 실행할 때 더 높은 컴퓨팅 자원을 필요로 할 수 있으며, 특히 더 짧은 시간 프레임에서 실행 지연을 초래할 수 있다.
알고리즘은 위험을 가정합니다이 전략은 이 시장 패턴을 효과적으로 포착할 수 있다는 가정에 기초하고 있지만, 시장 구조는 시간이 지남에 따라 변할 수 있어 이 가정은 유효하지 않다.
변동성 의존성전략: 변동성 필터와 최소 가격 이동 필터를 사용하여, 낮은 변동성 환경에서 거래 기회를 놓칠 수 있으며, 높은 변동성 환경에서 과민하게 반응 할 수 있습니다.
역사적 적합성 위험이 전략은 여러 지표의 장점을 결합하고 있지만, 역사적인 데이터에 대한 과도한 적합성의 위험이 있으며, 미래의 시장 조건의 변화는 성과 하락을 초래할 수 있습니다.
해결 방법에는: 주기적으로 매개 변수를 다시 최적화하고, 스텝 테스트를 사용하여 매개 변수의 안정성을 검증하고, 더 엄격한 필터링 조건을 적용하여 거래 빈도를 줄이고, 확인 조건을 추가하여 신호 품질을 향상시키고, 실시간 모니터링 시스템 성능을 조정하여 위험 매개 변수.
적응 변수 메커니즘역동적으로 매개 변수를 조정하여 시장의 변동성, 거래량 및 트렌드 강도에 따라 CETP 창, 하위값 및 가중치를 자동으로 최적화합니다. 이러한 최적화는 시스템을 변화하는 시장 조건에 더 잘 적응시키고 수동 개입의 필요성을 줄일 수 있습니다.
다중 시간 프레임 분석 통합: 다른 시간 프레임의 CETP 신호를 통합하여 계층 확인 시스템을 만듭니다. 예를 들어, 상위 시간 프레임의 신호와 거래 시간 프레임의 신호가 일치하는 경우에만 거래를 실행하여 승률을 높인다.
기계 학습 강화: 기계 학습 알고리즘을 도입하여 파라미터 선택 및 신호 필터링을 최적화한다. 모니터링 학습을 통해 가장 잘하는 파라미터 조합을 식별하거나, 또는 집약 알고리즘을 사용하여 다른 시장 상태를 인식하고 그에 따라 전략을 조정한다.
유동성 및 거래량 필터: 거래량과 시장의 깊이에 기반한 필터를 추가하여 유동성이 충분할 때만 거래하도록 하고, 슬라이드 포인트 및 실행 위험을 줄입니다.
다자산 연관성 분석: 관련 시장 (인덱스, 관련 주식 또는 상품과 같은) 의 정보를 통합하여 여러 관련 시장에서 일치하는 신호가 발생했을 때 거래 확신을 강화합니다.
변동성 예측 모델: 변동성 예측 컴포넌트를 개발하고, 임박한 변동성 환경에 대비하기 위해 미리 절댓값과 위험 매개 변수를 조정한다.
자동화된 응답 및 최적화 프레임워크자동화 시스템을 구축하여 새로운 데이터로 정기적으로 전략을 재검토하고 최신 시장 행동에 따라 매개 변수를 조정하여 전략이 적응성을 유지하도록하십시오.
이러한 최적화는 전략의 안정성, 적응성 및 수익성을 높이고, 인간의 개입의 필요성과 과도한 적합성의 위험을 줄이는 것을 목표로합니다. 이러한 최적화를 단계적으로 구현하면 더 지능적이고 자율적인 거래 시스템을 구축 할 수 있습니다.
다차원 동량 트렌드 자율적 거래 시스템은 정보 이론의 개념을 금융 시장에 적용하여 가격 패턴의 질서와 예측성을 포착하는 혁신적인 양적 거래 방법을 나타냅니다. 이 전략의 핵심 장점은 여러 전통적인 기술 지표의 수학적 원리를 통합하여 단일하고 명확한 거래 신호를 생성하여 지표 충돌과 신호 혼동을 피한다는 것입니다.
이 전략은 강력한 적응력과 위험 관리 기능에도 불구하고, 파라미터 민감성, 계산 복잡성, 시장 구조 변화와 같은 과제에 직면해 있습니다. 자율적 파라미터 메커니즘, 다중 시간 프레임 분석 및 기계 학습 강화와 같은 권장 된 최적화 방향을 구현함으로써 전략의 안정성과 장기적 성능을 더욱 향상시킬 수 있습니다.
전반적으로, 이것은 이론적으로 단단하고, 정교하게 설계된, 양자 거래 시스템으로, 프로그래밍과 통계학적인 배경을 가진 거래자가 높은 변동성이 있는 시장에서 사용할 수 있습니다. 신중한 매개 변수 최적화와 지속적인 시스템 모니터링을 통해, 이 전략은 다양한 시장 환경에서 안정적인 위험 조정 수익을 창출할 잠재력을 가지고 있습니다.
/*backtest
start: 2024-08-11 00:00:00
end: 2025-08-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
// @version=6
strategy("Canuck Trading Traders Strategy [Candle Entropy Edition]", overlay=true, default_qty_value = 10)
// Note: Set Properties "Order size" to "100% of equity" for equity-based sizing or fixed contracts (e.g., 100).
// === CETP-Plus Settings ===
cetp_window = input.int(5, "CETP Window", minval=1, maxval=20, group="CETP-Plus Settings")
cetp_bins = input.int(3, "CETP Bins per Dimension", minval=1, maxval=10, group="CETP-Plus Settings")
long_threshold = input.float(0.1, "Long Threshold", minval=0.01, maxval=5.0, step=0.01, group="CETP-Plus Settings")
short_threshold = input.float(-0.1, "Short Threshold", minval=-0.8, maxval=-0.01, step=0.01, group="CETP-Plus Settings")
cetp_k = input.float(0.8, "CETP Momentum Weight", minval=0.1, maxval=5.0, step=0.1, group="CETP-Plus Settings")
mom_scale = input.float(6.0, "Momentum Scale", minval=1.0, maxval=20.0, step=1.0, group="CETP-Plus Settings")
body_weight = input.float(1.0, "Body Ratio Weight", minval=0.0, maxval=2.0, step=0.1, group="CETP-Plus Settings")
upper_weight = input.float(0.8, "Upper Wick Ratio Weight", minval=0.0, maxval=2.0, step=0.1, group="CETP-Plus Settings")
lower_weight = input.float(1.0, "Lower Wick Ratio Weight", minval=0.0, maxval=2.0, step=0.1, group="CETP-Plus Settings")
decay_factor = 0.8 // Hardcoded decay for exponential weighting (recent candles weighted more)
// === Trade Settings ===
min_score_strength = input.float(0.03, "Min CETP Score Strength", minval=0.0, maxval=5, step=0.01, group="Trade Settings")
stop_loss_pct = input.float(0.5, "Stop Loss (%)", minval=0.1, maxval=5.0, step=0.1, group="Trade Settings")
atr_mult = input.float(3.0, "ATR Multiplier", minval=0.5, maxval=10.0, step=0.1, group="Trade Settings")
trail_mult = input.float(5.0, "Trailing ATR Mult", minval=0.5, maxval=10.0, step=0.1, group="Trade Settings")
trail_offset_pct = input.float(1.0, "Trail Start Offset (%)", minval=0.5, maxval=10.0, step=0.1, group="Trade Settings")
min_price_move_mult = input.float(2.0, "Min Price Move ATR Mult (to avoid tiny trades)", minval=0.5, maxval=10.0, step=0.1, group="Trade Settings") // Filter tiny moves
// Indicators (ATR for stops/trails only)
atr = nz(ta.atr(14), 0.0)
// Volatility Filter (CV < 15% to avoid chop)
vol_threshold = ta.stdev(close, 20) / ta.sma(close, 20) * 100
trade_allowed = vol_threshold < 15.0
// Minimum Price Move Filter (candle range > ATR multiple, floored by min tick)
min_price_move = math.max(atr * min_price_move_mult, syminfo.mintick * 10) // Avoid sub-penny moves; 10x tick for robustness
price_move_condition = (high - low) > min_price_move // Fixed: Use high - low instead of ta.range()
// CETP-Plus Calculation (Blended EMA, RSI, ATR, ADX theses)
epsilon = 1e-5
body_ratio = (close - open) / (high - low + epsilon) * body_weight
upper_wick_ratio = (high - math.max(open, close)) / (high - low + epsilon) * upper_weight
lower_wick_ratio = (math.min(open, close) - low) / (high - low + epsilon) * lower_weight
// EMA-like weighting: Exponentially weight recent candles with fixed-size rolling arrays
var float[] body_arr = array.new_float(cetp_window, 0.0)
var float[] upper_arr = array.new_float(cetp_window, 0.0)
var float[] lower_arr = array.new_float(cetp_window, 0.0)
// Shift and decay older values, add new at the end
for i = 0 to cetp_window - 2
array.set(body_arr, i, array.get(body_arr, i + 1) * decay_factor)
array.set(upper_arr, i, array.get(upper_arr, i + 1) * decay_factor)
array.set(lower_arr, i, array.get(lower_arr, i + 1) * decay_factor)
array.set(body_arr, cetp_window - 1, body_ratio)
array.set(upper_arr, cetp_window - 1, upper_wick_ratio)
array.set(lower_arr, cetp_window - 1, lower_wick_ratio)
// Volatility scaling (ATR thesis)
bin_size = 2.0 / cetp_bins * (1 + atr / ta.sma(atr, 14))
hist_size = cetp_bins * cetp_bins * cetp_bins
var int[] hist = array.new_int(hist_size, 0)
array.fill(hist, 0)
for i = 0 to cetp_window - 1
body_val = array.get(body_arr, i)
upper_val = array.get(upper_arr, i)
lower_val = array.get(lower_arr, i)
body_bin = math.max(0, math.min(cetp_bins - 1, math.floor((body_val + 1) / bin_size)))
upper_bin = math.max(0, math.min(cetp_bins - 1, math.floor((upper_val + 1) / bin_size)))
lower_bin = math.max(0, math.min(cetp_bins - 1, math.floor((lower_val + 1) / bin_size)))
bin_idx = body_bin * (cetp_bins * cetp_bins) + upper_bin * cetp_bins + lower_bin
array.set(hist, bin_idx, array.get(hist, bin_idx) + 1)
entropy = 0.0
for i = 0 to hist_size - 1
count = array.get(hist, i)
p = count / cetp_window
if p > 0
entropy := entropy - p * math.log(p)
max_entropy = math.log(hist_size)
norm_entropy = max_entropy > 0 ? entropy / max_entropy : 0.0
// RSI-like momentum bias
avg_gain = ta.rma(math.max(close - close[1], 0), cetp_window)
avg_loss = ta.rma(math.max(close[1] - close, 0), cetp_window)
rsi_bias = avg_loss > 0 ? avg_gain / avg_loss : 1.0
momentum = ta.mom(close, cetp_window) / (close[cetp_window] != 0 ? close[cetp_window] : 1e-5)
momentum_adj = momentum * (1 + rsi_bias)
// ADX-like trend strength (automated and symmetric for bull/bear)
di_plus = ta.rma(math.max(high - high[1], 0), cetp_window) / atr
di_minus = ta.rma(math.max(low[1] - low, 0), cetp_window) / atr
trend_strength = di_plus > di_minus ? 1.2 : (di_minus > di_plus ? 1.2 : 1.0)
// CETP-Plus Score (optimized: no abs on momentum_adj to preserve sign for better short detection)
avg_body = nz(array.avg(body_arr), 0.0)
raw_score = avg_body * (1 - norm_entropy) * (cetp_k + momentum_adj * mom_scale)
cetp_score = nz(raw_score * trend_strength, 0.0)
// Position State
var float entry_price = na
var int bars_held = 0
if barstate.isconfirmed
bars_held := strategy.position_size != 0 ? bars_held + 1 : 0
// Trade Logic: Rely solely on current CETP score for entries/exits/reversals, with min price move filter
if bar_index >= cetp_window and math.abs(cetp_score) > min_score_strength and trade_allowed and price_move_condition
if cetp_score > long_threshold
if strategy.position_size < 0
strategy.close("Short", comment="Reverse to Long")
if strategy.position_size <= 0
strategy.entry("Long", strategy.long)
entry_price := close
sl = entry_price * (1 - stop_loss_pct / 100) - atr * atr_mult
strategy.exit("Long Exit", "Long", stop=sl, trail_points=atr * trail_mult * syminfo.pointvalue, trail_offset=entry_price * (trail_offset_pct / 100))
bars_held := 1
else if cetp_score < short_threshold
if strategy.position_size > 0
strategy.close("Long", comment="Reverse to Short")
if strategy.position_size >= 0
strategy.entry("Short", strategy.short)
entry_price := close
sl = entry_price * (1 + stop_loss_pct / 100) + atr * atr_mult
strategy.exit("Short Exit", "Short", stop=sl, trail_points=atr * trail_mult * syminfo.pointvalue, trail_offset=entry_price * (trail_offset_pct / 100))
bars_held := 1