리소스 로딩... 로딩...

적응 트렌드 흐름 다중 필터 거래 전략

저자:차오장, 날짜: 2025-01-06 11:58:25
태그:EMASMAMACDATRHLC3

img

전반적인 설명

이 전략은 여러 가지 기술 지표 필터를 기반으로 한 적응 트렌드 다음 시스템이다. 기하급수적인 이동 평균 (EMA), 간단한 이동 평균 (SMA), 이동 평균 컨버전스 디버전스 (MACD) 를 포함한 다양한 기술 지표를 결합하여 효율적인 트렌드 캡처 및 위험 통제를 위해 다른 시장 환경에 적응하도록 매개 변수를 동적으로 조정합니다. 이 전략은 계층화된 필터링 메커니즘을 사용하여 여러 기술 지표의 시너지 조합을 통해 거래 신호의 신뢰성을 크게 향상시킵니다.

전략 원칙

핵심 논리는 세 층의 필터링 메커니즘을 기반으로 합니다.

  1. 적응 트렌드 인식 계층: 트렌드 기본 라인을 계산하기 위해 빠르고 느린 EMA의 조합을 사용하여 시장 변동성에 따라 상부 및 하부 채널 라인을 동적으로 조정합니다.
  2. SMA 필터 계층: 단순한 이동 평균을 사용하여 가격 움직임 방향이 전체 추세와 일치하는지 보장합니다.
  3. MACD 확인 계층: MACD 지표의 트렌드 확인 기능을 사용하여 거래 신호를 추가적으로 검증합니다.

거래 신호 생성에는 모든 필터 조건이 충족되어야합니다: 트렌드 전환, SMA 방향 확인 및 MACD 신호 라인 지원. 전략에는 또한 계정 자본에 기반한 동적 위치 관리 시스템이 포함되어 있으며 레버리지 인자를 통해 위치 크기를 자동으로 조정합니다.

전략적 장점

  1. 강력한 적응력: 전략은 동적 매개 변수 조정을 통해 다른 시장 환경에 적응할 수 있습니다.
  2. 포괄적 인 위험 관리: 여러 가지 필터링 메커니즘은 잘못된 신호의 확률을 크게 감소시킵니다.
  3. 높은 사용자 정의성: 사용자는 개인 거래 스타일에 따라 다양한 매개 변수를 조정할 수 있습니다.
  4. 높은 자동화 수준: 자동화 거래 시스템과 쉽게 통합하기 위해 JSON 형식의 경고 메시지를 지원합니다.
  5. 좋은 시각화: 트렌드 밴드 및 신호 마커를 포함한 풍부한 시각 피드백을 제공합니다.

전략 위험

  1. 트렌드 의존성: 오스실레이션 시장에서 빈번한 잘못된 신호를 생성할 수 있습니다.
  2. 지연 위험: 여러 필터링 메커니즘으로 인해 입력 시기가 늦어질 수 있습니다.
  3. 매개 변수 민감성: 다른 매개 변수 조합은 전략 성능의 상당한 변화를 초래할 수 있습니다.
  4. 레버리지 위험: 과도한 레버리지로 손실이 증가할 수 있습니다.

전략 최적화 방향

  1. 변동성 적응: ATR에 기반한 동적 스톱 로스 메커니즘을 추가합니다.
  2. 시장 환경 인식: 다른 시장 환경에서 다른 매개 변수 조합을 사용하기 위해 시장 상태 분류 시스템을 추가합니다.
  3. 신호 품질 점수: 신호 강도에 따라 위치를 동적으로 조정하는 신호 강도 점수 시스템을 구축합니다.
  4. 자본 관리 최적화: 더 정밀한 위치 통제를 위해 더 정교한 돈 관리 알고리즘을 도입하십시오.

요약

이 전략은 다층 필터링 메커니즘과 동적 매개 변수 조정을 통해 비교적 신뢰할 수있는 추세를 달성합니다. 지연 및 매개 변수 의존성의 특정 위험이 있지만 합리적인 매개 변수 최적화 및 위험 관리 조치로 인해 실질적인 거래에서 안정적인 성능을 달성 할 수 있습니다. 거래자는 라이브 거래 전에 개별 위험 용도에 따라 매개 변수 설정을 철저히 백테스트하고 조정하는 것이 좋습니다.


/*backtest
start: 2024-12-29 00:00:00
end: 2025-01-05 00:00:00
period: 45m
basePeriod: 45m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Adaptive Trend Flow Strategy with Filters for SPX", overlay=true, max_labels_count=500, 
     initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.01, slippage=2,
     margin_long=20, margin_short=20, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// User-defined inputs for trend logic
atr           = input.int(14, "Main Length", minval=2, group = "Find more strategies like this on pineindicators.com")
length        = input.int(2, "Main Length", minval=2)
smooth_len    = input.int(2, "Smoothing Length", minval=2)
sensitivity   = input.float(2.0, "Sensitivity", step=0.1)

// User-defined inputs for SMA filter
use_sma_filter = input.bool(true, "Enable SMA Filter?")
sma_length = input.int(4, "SMA Length", minval=1)

// User-defined inputs for MACD filter
use_macd_filter = input.bool(true, "Enable MACD Filter?")
macd_fast_length = input.int(2, "MACD Fast Length", minval=1)
macd_slow_length = input.int(7, "MACD Slow Length", minval=1)
macd_signal_length = input.int(2, "MACD Signal Length", minval=1)
// User-defined inputs for leverage
leverage_factor = input.float(4.5, "Leverage Factor", minval=1.0, step=0.1)
id           = input("besttrader123", title= "Your TradingView username", group = "Automate this strategy with plugpine.com")
key           = input("nc739ja84gf", title= "Unique identifier (UID)")
ticker        = input("SPX", title= "Ticker/symbol of your broker")
bullcolor     = #0097a7
bearcolor     = #ff195f
showbars      = input.bool(true, "Color Bars?")
showbg        = input.bool(true, "Background Color?")
showsignals   = input.bool(true, "Show Signals?")


// Trend calculation functions
calculate_trend_levels() =>
    typical = hlc3
    fast_ema = ta.ema(typical, length)
    slow_ema = ta.ema(typical, length * 2)
    basis = (fast_ema + slow_ema) / 2
    vol = ta.stdev(typical, length)
    smooth_vol = ta.ema(vol, smooth_len)
    upper = basis + (smooth_vol * sensitivity)
    lower = basis - (smooth_vol * sensitivity)
    [basis, upper, lower]

get_trend_state(upper, lower, basis) =>
    var float prev_level = na
    var int trend = 0
    if na(prev_level)
        trend := close > basis ? 1 : -1
        prev_level := trend == 1 ? lower : upper
    if trend == 1
        if close < lower
            trend := -1
            prev_level := upper
        else
            prev_level := lower
    else
        if close > upper
            trend := 1
            prev_level := lower
        else
            prev_level := upper
    [trend, prev_level]

[basis, upper, lower] = calculate_trend_levels()
[trend, level] = get_trend_state(upper, lower, basis)

// SMA filter
sma_value = ta.sma(close, sma_length)
sma_condition = use_sma_filter ? close > sma_value : true

// MACD filter
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
macd_condition = use_macd_filter ? macd_line > signal_line : true

// Signal detection with filters
long_signal = trend == 1 and trend[1] == -1 and sma_condition and macd_condition
short_signal = trend == -1 and trend[1] == 1

// Plotting visuals
p2 = plot(basis, color=trend == 1 ? bullcolor : bearcolor, linewidth=2)
p1 = plot(level, color=close > level ? bullcolor : bearcolor, linewidth=2, style=plot.style_linebr)
// if showsignals and ta.crossover(close, level)
//     label.new(bar_index, level, "▲", color=bullcolor, textcolor=chart.bg_color, style=label.style_label_upper_right)
// if showsignals and ta.crossunder(close, level)
//     label.new(bar_index, level, "▼", color=bearcolor, textcolor=chart.fg_color, style=label.style_label_lower_right)

qty = strategy.equity / close * leverage_factor

// Automated alerts
if long_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "long", "volume": ' + str.tostring(qty) + '}', alert.freq_once_per_bar)
if short_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "closelong"}', alert.freq_once_per_bar)

// Strategy entries and exits
if long_signal
    strategy.entry("Long", strategy.long, qty=qty)
if short_signal
    strategy.close("Long")

// Optional SMA and MACD plot
plot(use_sma_filter ? sma_value : na, color=color.new(color.blue, 80), title="SMA")
plot(use_macd_filter ? macd_line : na, color=color.new(color.orange, 80), title="MACD Line")
plot(use_macd_filter ? signal_line : na, color=color.new(color.red, 80), title="Signal Line")


관련

더 많은