
다인자 자율적 흔들림 거래 전략은 시장 구조 분석, 동적 지표 및 변동률 측정과 결합된 종합적인 거래 시스템이다. 이 전략은 Heikin Ashi 차트 기술에 기반하며, 여러 가지 이동 평균 (EMA, WMA, SMA, VWAP), RSI 지표 및 거래량 확인을 통합하여 잠재적인 트렌드 전환점을 식별하고 높은 확률 거래를 수행한다. 이 전략의 가장 큰 특징은 두 가지 다른 거래 논리 (RSI 모드 및 단선 모드) 를 적용하고 고정된 위험 수익 비율을 결합하는 것이다.
이 전략의 핵심 원칙은 다중 지표 확인을 통해 시장 구조 변화의 지점을 포착하는 동시에 위험을 엄격히 제어하는 것입니다. 구체적인 구현 메커니즘은 다음과 같습니다:
헤이킨 아시의 변신전략: 우선 표준 K 선을 Heikin Ashi 도표로 변환하여 시장 소음을 줄이고 트렌드 방향을 강조합니다. Heikin Ashi 계산 공식은 다음과 같습니다.
다중 이동 평균 통합이 전략은 34개의 다른 유형의 이동 평균을 계산하고 통합합니다.
이중 모드 거래 논리:
상태 관리 시스템전략: 상태 변수를 사용하여 (“NEUTRAL”, “WAIT_ENTRY”, “BUY”, “SELL”) 거래 상태를 추적하고 관리하여 빈번한 거래와 가짜 신호를 피하십시오.
지능형 상쇄 및 수익 목표:
코드의 심층적인 분석을 통해, 이 전략은 다음과 같은 중요한 장점을 보여준다:
다인자 확인으로 가짜 신호가 감소이동 평균, RSI 지표, 거래량 및 가격 확인과 결합하여 가짜 돌파의 가능성을 크게 줄이고 거래 품질을 향상시킵니다.
적응력두 가지 다른 거래 논리 (RSI와 단선) 를 통해 전략은 다른 시장 환경에 적응할 수 있으며, 추세 시장과 간격의 흔들림 시장에서 효과적으로 작동 할 수 있습니다.
명확한 위험 관리: 고정된 리스크/이익 비율과 시장 구조에 기반한 스톱로스 포지션을 적용하여, 각 거래에는 명확한 리스크 컨트롤이 있으며, 주관적인 판단으로 인한 과도한 손실을 방지합니다.
상태 관리가 과도한 거래를 줄일 수 있습니다.: 상태 변수를 통해 트레이딩 상태를 추적하고 관리하여, 시장의 출입을 자주 피하고, 거래 비용과 감정의 변동을 줄입니다.
헤이킨 아시 (Heikin Ashi) 의 부드러운 처리[Heikin Ashi 기술을 사용하여 시장의 소음을 줄이고 트렌드를 더 명확하게하고 진정한 시장 전환점을 식별하는 데 도움이됩니다.]
유연한 변수 설정: 충격적인 회전 주기와 리스크 수익률과 같은 핵심 매개 변수는 다른 시장과 개인 리스크 선호도에 따라 조정할 수 있다.
다중 이동 평균 분석4개의 다른 종류의 이동 평균을 통합하여 단일 지표가 가져올 수 있는 편차를 줄여서 보다 안정적인 가격 참조를 제공합니다.
이 전략은 정교하게 설계되었지만, 다음과 같은 잠재적인 위험들이 있습니다.
시장의 과도한 거래: 명백한 트렌드가 없는 가로수지 시장에서, 전략은 과도한 거래 신호를 생성할 수 있으며, 이로 인해 시장의 출입과 거래 비용이 증가합니다. 해결책은 가로수지 시장에 도달했을 때 필터 조건을 추가하거나 거래를 중지하는 것입니다.
스탠더드 위치가 너무 멀어질 수도 있습니다.: 진동 높은 낮은 지점을 중지 위치로 사용하는 것은 어떤 경우에는 입구 지점에서 너무 멀리 떨어져있는 중지 위치를 초래할 수 있으며, 단일 거래의 위험 을 증가시킵니다. 최대 중지 거리의 제한을 설정하거나 ATR 배수를 사용하여 중지 위치를 최적화하는 것이 고려 될 수 있습니다.
고정 리스크 수익률의 한계: 다른 시장 환경에서는 최적의 리스크 수익률이 다를 수 있다. 강한 추세 시장에서는 리스크 수익률의 1:3 비율이 너무 작을 수 있다. 반면, 변동성이 적은 시장에서는 달성하기 어려울 수 있다. 시장의 변동률에 따라 리스크 수익률을 조정하는 것을 고려할 수 있다.
역사의 진동점: 전략의 역사적인 흔들림 지점에 대한 의존은 빠르게 변화하는 시장에서 지연될 수 있다. 급격한 변동이 있을 때, 과거의 흔들림 지점은 더 이상 참조 가치가 없을 수 있다. 극단적인 시장 조건에서 추가적인 위험 제어 조치를 추가하는 것이 권장된다.
변동성 적응 장치의 부재: 전략은 시장의 변동성에 따라 매개 변수를 조정하는 메커니즘이 없으며, 높은 변동성과 낮은 변동성 환경에서 일관되지 않을 수 있습니다. ATR 지표를 도입하여 거래 매개 변수를 동적으로 조정하는 것을 고려할 수 있습니다.
코드의 심층적인 분석을 바탕으로 다음과 같은 최적화 방향이 제시되었습니다.
역동적 위험/수익비: 시장의 변동율에 따라 (예: ATR) 자동으로 리스크 수익률을 조정합니다. 낮은 변동율에서 작은 비율을 사용하며 높은 변동율에서 큰 비율을 사용하여 다른 시장 조건에 적응합니다.
트렌드 필터 추가: 더 긴 주기의 트렌드 필터를 도입하고, 주 트렌드 방향과 일치할 때만 거래하여 역전 거래의 위험을 피하십시오.
이동 평균 변수를 최적화합니다.: 현재 전략은 고정된 34주기를 사용하며, 다른 주기 설정을 테스트하거나 다양한 시장 환경에 더 잘 적응하기 위해 적응 주기를 사용하는 것을 고려할 수 있습니다.
일부 수익 잠금제도 도입: 가격이 특정 수익 수준에 도달했을 때, 손실을 비용 수준으로 이동하거나 수익의 일부를 잠금하여 시장 회수로부터 달성 된 수익을 보호합니다.
시간 필터를 추가: 시장의 변동성이 특히 낮은 시간 (아시아 시장과 같은) 또는 중요한 뉴스 발표 이전에 거래하는 것을 피하여 불필요한 위험을 줄여주세요.
양을 확인하는 최적화 조건: 현재 전략은 간단한 거래량 절댓값을 사용한다 ((1.5배 20주기 평균), 더 복잡한 거래량 패턴 식별을 고려할 수 있다. 예를 들어 거래량 트렌드 일관성이나 급격한 거래량 특징이다.
포지션 관리 모듈 추가: 현재 시장의 변동율과 신호 강도에 따라 위치 크기를 조정하고, 높은 확신의 신호에 위치 크기를 늘리고, 모호한 신호에 위치 크기를 줄인다.
회귀주기 최적화: 다양한 진동 회전 주기를 종합적으로 회전하여 다양한 시장 조건에서 가장 안정적으로 수행하는 파라미터 설정을 찾아내십시오.
다인자 자율적 흔들림 거래 전략은 여러 가지 기술 지표와 시장 구조 분석을 결합한 통합 거래 시스템이다. 그것의 핵심 장점은 다중 신호 확인, 유연한 거래 논리 선택 및 엄격한 위험 관리에 있다. Heikin Ashi 기술을 통해 시장 소음을 줄이고, 여러 가지 이동 평균을 가격 참조로 사용하여 RSI와 거래량 확인과 결합하여 전략은 잠재적인 트렌드 전환점을 효과적으로 식별할 수 있다.
고정된 리스크/이익 비율과 진동점 기반의 스톱 포지션은 명확한 리스크 제어 프레임워크를 제공하지만, 또한 몇 가지 제한을 가지고 있습니다. 동적 리스크/이익 비율, 트렌드 필터 및 부분 이익 잠금 장치와 같은 권장된 최적화 조치를 구현함으로써 이 전략은 더욱 더 적응성과 안정성을 향상시킬 수 있습니다.
무엇보다도, 거래자는 전략의 원칙과 한계를 이해하고 자신의 위험 선호와 시장 관찰에 따라 필요한 조정을해야합니다. 완벽한 전략은 없지만, 지속적인 최적화와 엄격한 위험 관리를 통해, 다중 인자 적응 충격 거래 전략은 거래자의 도구 상자에 강력한 무기가 될 수 있습니다.
/*backtest
start: 2025-07-11 00:00:00
end: 2025-08-06 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":5000000}]
*/
//@version=6
strategy("Cnagda Fixed Swing SL & RR 1:3", overlay=true, max_boxes_count=500, max_labels_count=500)
input_strategy = input.string("RSI", "Trade Logic", options=["RSI", "Scalp"])
swing_lookback = input.int(34, "Swing Lookback", minval=5)
rr_multiple = input.int(3, "Risk Reward Multiple", minval=1)
// --- Heikin Ashi Calculation ---
ha_close = (open + high + low + close) / 4
var float ha_open = na
if bar_index == 0
ha_open := (open + close) / 2
else
ha_open := (ha_open[1] + ha_close[1]) / 2
ha_high = math.max(high, math.max(ha_open, ha_close))
ha_low = math.min(low, math.min(ha_open, ha_close))
// --- MA/Signal Logic on Heikin Ashi ---
ma1 = ta.ema(ha_close, 34)
ma2 = ta.wma(ha_close, 34)
wma34 = ta.wma(ha_close, 34)
ema34 = ta.ema(ha_close, 34)
sma34 = ta.sma(ha_close, 34)
vwma34 = ta.vwma(ha_close, 34)
ma_sum = (not na(wma34) ? wma34 : 0) + (not na(vwma34) ? vwma34 : 0) + (not na(ema34) ? ema34 : 0) + (not na(sma34) ? sma34 : 0)
ma_avg = ma_sum / 4
// --- Scalp/Swing Logic ---
buySignal = ta.crossover(ma1, ma2)
sellSignal = ta.crossunder(ma1, ma2)
var string scalp_state = "NEUTRAL"
var float refHigh = na
var float refLow = na
if buySignal or sellSignal
refHigh := ha_high
refLow := ha_low
scalp_state := "WAIT_ENTRY"
if (scalp_state == "WAIT_ENTRY" or scalp_state == "SELL") and not na(refHigh) and ha_close > refHigh
scalp_state := "BUY"
if (scalp_state == "WAIT_ENTRY" or scalp_state == "BUY") and not na(refLow) and ha_close < refLow
scalp_state := "SELL"
if scalp_state == "BUY" and ha_close < ma_avg
scalp_state := "NEUTRAL"
refHigh := na
refLow := na
if scalp_state == "SELL" and ha_close > ma_avg
scalp_state := "NEUTRAL"
refHigh := na
refLow := na
// --- RSI Logic ---
rsi_val = ta.rsi(ha_close, 14)
rsi_ema_3 = ta.ema(rsi_val, 3)
rsi_ema_10 = ta.ema(rsi_val, 10)
high_vol = volume > ta.sma(volume, 20) * 1.5
bar_is_high = high_vol
prev_bar_is_high = high_vol[1]
any_high_bar = bar_is_high or prev_bar_is_high
_base_rsi_cross_bull = ta.crossover(rsi_ema_3, rsi_ema_10) and any_high_bar
_base_rsi_cross_bear = ta.crossunder(rsi_ema_3, rsi_ema_10) and any_high_bar
rsi_cross_bull = _base_rsi_cross_bull and (ha_close < ma_avg)
rsi_cross_bear = _base_rsi_cross_bear and (ha_close > ma_avg)
// ENTRY LOGIC
var float rsi_signal_high = na
var float rsi_signal_low = na
var int rsi_signal_bar = na
var string rsi_entry_state = ""
if rsi_cross_bull
rsi_signal_high := high
rsi_signal_low := na
rsi_signal_bar := bar_index
rsi_entry_state := "WAIT ENTRY"
else if rsi_cross_bear
rsi_signal_low := low
rsi_signal_high := na
rsi_signal_bar := bar_index
rsi_entry_state := "WAIT ENTRY"
else if not na(rsi_signal_bar)
if not na(rsi_signal_high)
if close > rsi_signal_high and bar_index > rsi_signal_bar
rsi_entry_state := "BUY"
rsi_signal_high := na
rsi_signal_bar := na
else
rsi_entry_state := "WAIT ENTRY"
else if not na(rsi_signal_low)
if close < rsi_signal_low and bar_index > rsi_signal_bar
rsi_entry_state := "SELL"
rsi_signal_low := na
rsi_signal_bar := na
else
rsi_entry_state := "WAIT ENTRY"
else
rsi_entry_state := ""
else
rsi_entry_state := ""
// --- Swing High/Low (Stoploss reference) ---
swingLow = ta.pivotlow(ha_low, swing_lookback, swing_lookback)
swingHigh = ta.pivothigh(ha_high, swing_lookback, swing_lookback)
// -- Entry/Exit conditions --
long_condition = input_strategy == "RSI" ? (rsi_entry_state == "BUY" and rsi_entry_state[1] != "BUY") : (scalp_state == "BUY" and scalp_state[1] != "BUY")
short_condition = input_strategy == "RSI" ? (rsi_entry_state == "SELL" and rsi_entry_state[1] != "SELL") : (scalp_state == "SELL" and scalp_state[1] != "SELL")
exit_long_condition = input_strategy == "RSI" ? (rsi_entry_state == "SELL" and rsi_entry_state[1] != "SELL") : (scalp_state == "SELL" and scalp_state[1] != "SELL")
exit_short_condition = input_strategy == "RSI" ? (rsi_entry_state == "BUY" and rsi_entry_state[1] != "BUY") : (scalp_state == "BUY" and scalp_state[1] != "BUY")
// --- Final Entry & SL/Target (NO TRAIL) ---
var float sl_long = na
var float sl_short = na
var float tg_long = na
var float tg_short = na
if long_condition and not na(swingLow)
sl_long := swingLow // SL = last swing low after entry candle close
entry_price = close
risk = entry_price - sl_long
tg_long := entry_price + (risk * rr_multiple)
strategy.entry("Long", strategy.long)
strategy.exit("Long_SL", from_entry="Long", stop=sl_long, limit=tg_long)
if short_condition and not na(swingHigh)
sl_short := swingHigh // SL = last swing high after entry candle close
entry_price = close
risk = sl_short - entry_price
tg_short := entry_price - (risk * rr_multiple)
strategy.entry("Short", strategy.short)
strategy.exit("Short_SL", from_entry="Short", stop=sl_short, limit=tg_short)
if exit_long_condition
strategy.close("Long")
if exit_short_condition
strategy.close("Short")
// --- Visuals (optional, for clarity) ---
barcolor(long_condition ? color.green : short_condition ? color.red : na)
plot(ma_avg, "MA Avg", color=color.blue, linewidth=2)