
여러분이 알고 있는 모든 패러블리 SAR 전략을 잊으세요. 이 HyperSAR Reactor는 고전적인 PSAR을 역사의 쓰레기통으로 바로 보내줍니다. 전통적인 PSAR은 고정된 파라미터를 사용한다. 여기서 동적 강도를 조정한다.
역동적인 단계 조절 메커니즘은 고정 변수 버전보다 약 30%의 가짜 신호를 줄인 것으로 나타났습니다. 시장의 변동이 심해지면 알고리즘은 자동으로 민감도를 높이고 시장이 평온할 때 더 보수적으로 변합니다. 이것은 전통적인 기술 분석이 아니라 양적 거래의 진화입니다.
핵심 혁신은 시그모이드 함수를 도입하여 시장의 강도를 모델링하는 것이다. ATR에 대한 가격 경사율의 비율을 계산함으로써 시스템은 현재 트렌드의 “순수성”을 정량화 할 수 있다. 강도 증가는 4.5로 설정되어 있으며, 중심점은 0.45로 설정되어 있으며, 이는 트렌드 강도가 절벽을 초과할 때 시스템이 반응 속도를 크게 향상 시킨다는 것을 의미한다.
구체적으로 말하자면: 기본 걸음 길이는 0.04, 동적 증강 인자 0.03, 최대 가속 인자 1.0 ᄂ. 강한 트렌드에서, 효과적인 걸음 길이는 0.07 이상으로, 전통적인 PSAR보다 75% 더 빨리 트렌드 전환을 잡습니다. 반면, 흔들리는 시장에서, 걸음 길이는 0.04 근처에 유지하여 과도한 거래를 피합니다.
자료는 거짓말을 하지 않는다: 이 구성 요소는 리스크 조정 수익률이 더 높다는 것을 보여준다.
단순한 기술 지표 신호는 전쟁터에 있는 것 같았습니다. HyperSAR Reactor는 세 가지 방어선을 배치했습니다.
첫 번째: 보호구역 확정○ 0.5배의 ATR의 확인 거리를 설정하여, 가격이 신호를 발동하기 위해 분명히 PSAR 궤도를 뚫어야 합니다. ○ 이것은 90%의 노이즈 거래를 직접 필터링합니다.
두 번째: 변동률 관제현재 ATR이 30주기 평균의 1.0배 이상에 달해야 입장을 열 수 있다. 낮은 변동성 환경에서 휴식을 강제하고,横盘에서 반복적으로 당겨지는 것을 피한다.
세번째로, 트렌드 시스템 식별○ 하위 신호는 54주기 하향 트렌드 확인과 함께 작동해야 한다. ○ 91주기 EMA는 장기 트렌드 기준으로, 명확한 곰 시장 환경에서만 하위 조작이 허용된다.
그 결과, 가짜 신호는 60% 감소했지만, 진짜 트렌드 신호는 하나도 빠지지 않았습니다.
스톱 로직은 동적 PSAR 궤도 추적을 사용하며, 고정 비율 스톱보다 100배 더 똑똑하다. 다중 헤드 스톱은 1.0배의 ATR로 설정되어 있으며, 공허 헤드는 고정 스톱을 설정하지 않는다 (하향 추세가 일반적으로 더 오래 지속되기 때문에).
냉각 기간 메커니즘은 감정적인 연속 거래를 방지한다. 매번 포지션을 열고 나서 강제적으로 기다려야 하며, 동일한 변동에서 반복적으로 입출력을 피한다. 수수료는 0.05%, 슬라이드 5 베이시스 포인트로 설정되어 있으며, 이것들은 실장 거래의 실제 비용이다.
위험 경고: 역사적인 회귀는 미래의 수익을 의미하지 않습니다. 이 전략은 불안한 시장에서 잘 작동하지 않으며, 연속적인 손실의 위험이 남아 있습니다. 포지션 관리와 포트폴리오 분산과 함께 강력히 권장됩니다.
가장 적합한 환경: 중간 높은 변동률의 트렌디 시장. 암호화폐, 상품 선물, 변동성 주식은 이상적인 지표입니다.
피하는 시장저 변동률의 수평 분석, 언론이 주도하는 폭파, 유동성이 극히 낮은 소수 품종.
변수 조정 제안: 강도 증가는 지표의 특성에 따라 조정할 수 있으며, 변동률이 높은 품종은 3.5로 낮출 수 있으며, 안정된 품종은 5.5로 향상시킬 수 있습니다. 확인된 방충 지역은 고주파 품종에서 0.3배 ATR로 낮출 수 있습니다.
위치 추천단일 신호는 총 자금의 10%를 초과하지 않으며, 3가지 이상의 관련 없는 품종을 보유하지 않는다.
이것은 또 다른 “마법 지표”가 아니라 수학 모델링에 기반한 체계화된 거래 방법입니다. 올바른 시장 환경에서, 그것은 당신의 수익 증폭기가 될 것입니다. 잘못된 환경에서, 엄격한 위험 관리가 당신의 자본을 보호 할 것입니다.
/*backtest
start: 2024-10-23 00:00:00
end: 2025-10-21 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"XRP_USDT","balance":5000}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © exlux
//@version=6
strategy("HyperSAR Reactor ", shorttitle="HyperSAR ", overlay=true, pyramiding=0,
initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100,
commission_type=strategy.commission.percent, commission_value=0.05, slippage=5,
process_orders_on_close=false, calc_on_every_tick=false, calc_on_order_fills=false, margin_short = 0, margin_long = 0)
// =============== GROUPS
grp_engine = "Reactor Engine"
grp_filters = "Trade Filters"
grp_risk = "Risk"
grp_view = "View"
// =============== ENGINE INPUTS (your defaults)
start_af = input.float(0.02, "Start AF", minval=0.0, maxval=1.0, step=0.01, group=grp_engine)
max_af = input.float(1.00, "Max AF", minval=0.0, maxval=1.0, step=0.01, group=grp_engine)
base_step = input.float(0.04, "Base step", minval=0.0, maxval=1.0, step=0.01, group=grp_engine)
reg_len = input.int (18, "Strength window", minval=5, group=grp_engine)
atr_len = input.int (16, "ATR length", minval=5, group=grp_engine)
alpha_gain = input.float(4.5, "Strength gain", minval=0.5, step=0.5, group=grp_engine)
alpha_ctr = input.float(0.45, "Strength center", minval=0.1, step=0.05, group=grp_engine)
boost_k = input.float(0.03, "Boost factor", minval=0.0, step=0.01, group=grp_engine)
af_smooth = input.float(0.50, "AF smoothing", minval=0.0, maxval=1.0, step=0.05, group=grp_engine)
trail_smooth = input.float(0.35, "Trail smoothing", minval=0.0, maxval=1.0, step=0.05, group=grp_engine)
allow_long = input.bool(true, "Allow Long", group=grp_engine)
allow_short = input.bool(true, "Allow Short", group=grp_engine)
// =============== FILTERS (your defaults)
confirm_buf_atr = input.float(0.50, "Flip confirm buffer ATR", minval=0.0, step=0.05, group=grp_filters)
cooldown_bars = input.int (0, "Cooldown bars after entry", minval=0, group=grp_filters)
vol_len = input.int (30, "Vol gate length", minval=5, group=grp_filters)
vol_thr = input.float(1.00, "Vol gate ratio ATR over mean", minval=0.5, step=0.05, group=grp_filters)
require_bear_regime = input.bool(true, "Gate shorts by bear regime", group=grp_filters)
bias_len = input.int (54, "Bear bias window", minval=10, group=grp_filters)
bias_ma_len = input.int (91, "Bias MA length", minval=20, group=grp_filters)
// =============== RISK (your defaults)
tp_long_atr = input.float(1.0, "TP long ATR", minval=0.0, step=0.25, group=grp_risk)
tp_short_atr = input.float(0.0, "TP short ATR", minval=0.0, step=0.25, group=grp_risk)
// =============== HELPERS
sigmoid(x, g, c) => 1.0 / (1.0 + math.exp(-g * (x - c)))
slope_per_bar(src, len) =>
corr = ta.correlation(src, float(bar_index), len)
sy = ta.stdev(src, len)
sx = ta.stdev(float(bar_index), len)
nz(corr, 0.0) * nz(sy, 0.0) / nz(sx, 1.0)
atr = ta.atr(atr_len)
drift = math.abs(slope_per_bar(close, reg_len)) / nz(atr, 1e-12)
strength = sigmoid(drift, alpha_gain, alpha_ctr)
step_dyn = base_step + boost_k * strength
vol_ok = atr / ta.sma(atr, vol_len) >= vol_thr
trend_ma = ta.ema(close, bias_ma_len)
bias_dn = close < trend_ma and slope_per_bar(close, bias_len) < 0
// =============== ADAPTIVE PSAR WITH INERTIA
var float psar = na
var float ep = na
var float af = na
var bool up_trend = false
var int next_ok = na // earliest bar allowed to enter again
var float vis_psar = na
init_now = na(psar)
if init_now
up_trend := close >= open
ep := up_trend ? high : low
psar := up_trend ? low : high
af := start_af
next_ok := bar_index
float next_psar = na
bool flipped = false
if up_trend
next_psar := psar + af * (ep - psar)
next_psar := math.min(next_psar, nz(low[1], low), nz(low[2], low))
if close < next_psar
up_trend := false
psar := ep
ep := low
af := start_af
flipped := true
else
// monotone trail with inertia
mid = psar + trail_smooth * (next_psar - psar)
psar := math.max(psar, mid)
if high > ep
ep := high
new_af = math.min(af + step_dyn, max_af)
af := af + af_smooth * (new_af - af)
else
next_psar := psar + af * (ep - psar)
next_psar := math.max(next_psar, nz(high[1], high), nz(high[2], high))
if close > next_psar
up_trend := true
psar := ep
ep := high
af := start_af
flipped := true
else
mid = psar + trail_smooth * (next_psar - psar)
psar := math.min(psar, mid)
if low < ep
ep := low
new_af = math.min(af + step_dyn, max_af)
af := af + af_smooth * (new_af - af)
// visual only
vis_psar := na(vis_psar[1]) ? psar : vis_psar[1] + 0.35 * (psar - vis_psar[1])
vis_psar := up_trend ? math.max(nz(vis_psar[1], vis_psar), vis_psar) : math.min(nz(vis_psar[1], vis_psar), vis_psar)
// =============== ENTRY LOGIC WITH HYSTERESIS AND COOLDOWN
long_flip = up_trend and flipped
short_flip = not up_trend and flipped
need_wait = bar_index < nz(next_ok, bar_index)
pass_long = long_flip and close > psar + confirm_buf_atr * atr and vol_ok and not need_wait
pass_short = short_flip and close < psar - confirm_buf_atr * atr and vol_ok and not need_wait and (not require_bear_regime or bias_dn)
// =============== ORDERS
if allow_long and pass_long
strategy.entry("Long", strategy.long)
next_ok := bar_index + cooldown_bars
if allow_short and pass_short
strategy.entry("Short", strategy.short)
next_ok := bar_index + cooldown_bars
if allow_long
if pass_short
strategy.close("Long")
if allow_short
if pass_long
strategy.close("Short")
// if strategy.position_size > 0
// strategy.exit("Lx", from_entry="Long", stop=psar, limit = tp_long_atr > 0 ? strategy.opentrades.entry_price(0) + tp_long_atr * atr : na)
if strategy.position_size < 0
strategy.exit("Sx", from_entry="Short", stop=psar, limit = tp_short_atr > 0 ? strategy.opentrades.entry_price(0) - tp_short_atr * atr : na)