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

멀티 타임프레임 슈퍼트렌드 동적 트렌드 거래 알고리즘

저자:차오장, 날짜: 2025-01-06 16:38:12
태그:ATRMTFEMARSI

img

전반적인 설명

이 전략은 멀티 타임프레임 슈퍼트렌드 지표에 기반한 적응 트렌드 다음 시스템이다. 포괄적인 트렌드 식별 프레임워크를 구축하기 위해 15 분, 5 분 및 2 분 시간 프레임에서 슈퍼트렌드 신호를 통합합니다. 이 전략은 가장 활동적인 거래 세션 중만 작동을 보장하기 위해 시간 필터를 사용하며 오버나이트 위험을 피하기 위해 하루 말에 자동으로 포지션을 닫습니다.

전략 원칙

핵심 메커니즘은 거래 신호를 확인하기 위해 여러 시간 프레임에 걸쳐 트렌드 일관성에 의존합니다. 구체적으로:

  1. 각 시간 프레임에 대한 ATR 기간과 곱셈 인자를 사용하여 슈퍼 트렌드 라인을 계산합니다.
  2. 트리거는 3가지 시간 프레임 (슈퍼트렌드 라인 위의 가격) 을 모두 따라가는 상승 조건이 있을 때 신호를 구매합니다.
  3. 이니셔는 가격이 5분 슈퍼트렌드 라인을 넘어서거나 거래일 종료 시 신호를 판매합니다.
  4. 시간대 설정과 세션 필터 (예정 09:30-15:30) 를 통해 거래 시간을 제어합니다.

전략적 장점

  1. 다차원 트렌드 확인은 신호 신뢰성을 높이고 거짓 파업 위험을 줄입니다.
  2. 적응성 있는 슈퍼트렌드 매개 변수는 다른 시장 변동성 환경에 대한 전략 조정이 가능합니다.
  3. 엄격한 시간 관리 메커니즘은 비효율적인 거래 기간의 간섭을 제거합니다.
  4. 명확한 시각화 인터페이스는 모든 시간 프레임에서 트렌드 상태를 표시합니다.
  5. 유연한 포지션 관리 시스템은 비율 기반의 구성을 지원합니다.

전략 위험

  1. 다양한 시장에서 과도한 거래 신호를 생성하여 거래 비용을 증가시킬 수 있습니다.
  2. 여러 필터링 조건이 수익 기회를 놓칠 수 있습니다.
  3. 매개 변수 최적화 의존성은 다른 시장 환경에 대한 조정을 요구합니다.
  4. 높은 컴퓨팅 복잡성은 실행 효율성 문제로 이어질 수 있습니다.

최적화 방향

  1. 변동성 적응 메커니즘을 도입하여 슈퍼트렌드 매개 변수를 동적으로 조정합니다.
  2. 트렌드 판단의 정확성을 높이기 위해 부피 확인 지표를 추가합니다.
  3. 지능적인 시간 필터링 알고리즘을 개발하여 최적의 거래 세션을 자동으로 식별합니다.
  4. 보다 정확한 리스크 통제를 위해 포지션 관리 알고리즘을 최적화합니다.
  5. 시장 환경 분류 모듈을 추가하여 다양한 시장 특성에 대한 차별화된 전략을 구현합니다.

요약

이 전략은 다중 타임프레임 트렌드 분석과 엄격한 리스크 제어 메커니즘을 통해 견고한 거래 시스템을 구축합니다. 최적화 할 여지가 있지만 핵심 논리는 견고하고 추가 개발 및 라이브 거래 응용에 적합합니다. 모듈형 설계는 또한 미래의 확장을위한 강력한 토대를 제공합니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Multi-Timeframe Supertrend Strategy", 
         overlay=true, 
         shorttitle="MTF Supertrend TF", 
         default_qty_type=strategy.percent_of_equity, 
         default_qty_value=100, 
         initial_capital=50000, 
         currency=currency.USD)

// === Input Parameters === //
atrPeriod = input.int(title="ATR Period", defval=10, minval=1)
factor = input.float(title="Factor", defval=3.0, step=0.1)

// === Time Filter Parameters === //
// Define the trading session using input.session
// Format: "HHMM-HHMM", e.g., "0930-1530"
sessionInput = input("0930-1530", title="Trading Session")

// Specify the timezone (e.g., "Europe/Istanbul")
// Refer to the list of supported timezones: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
timezoneInput = input.string("Europe/Istanbul", title="Timezone", tooltip="Specify a valid IANA timezone (e.g., 'Europe/Istanbul', 'America/New_York').")

// === Calculate Supertrend for Different Timeframes === //
symbol = syminfo.tickerid

// 15-Minute Supertrend
[st_15m, dir_15m] = request.security(symbol, "15", ta.supertrend(factor, atrPeriod), lookahead=barmerge.lookahead_off)

// 5-Minute Supertrend
[st_5m, dir_5m] = request.security(symbol, "5", ta.supertrend(factor, atrPeriod), lookahead=barmerge.lookahead_off)

// 2-Minute Supertrend
[st_2m, dir_2m] = request.security(symbol, "2", ta.supertrend(factor, atrPeriod), lookahead=barmerge.lookahead_off)

// === Current Timeframe Supertrend === //
[st_current, dir_current] = ta.supertrend(factor, atrPeriod)

// === Time Filter: Check if Current Bar is Within the Trading Session === //
in_session = true

// === Define Trend Directions Based on Supertrend === //
is_up_15m = close > st_15m
is_up_5m  = close > st_5m
is_up_2m  = close > st_2m
is_up_current = close > st_current

// === Buy Condition === //
buyCondition = is_up_15m and is_up_5m and is_up_2m and is_up_current and in_session and strategy.position_size == 0

// === Sell Conditions === //
// 1. Price falls below the 5-minute Supertrend during trading session
sellCondition1 = close < st_5m

// 2. End of Trading Day: Sell at the close of the trading session
is_new_day = ta.change(time("D"))
sellCondition2 = not in_session and is_new_day

// Combined Sell Condition: Only if in Position
sellSignal = (sellCondition1 and in_session) or sellCondition2
sellCondition = sellSignal and strategy.position_size > 0

// === Execute Trades === //
if (buyCondition)
    strategy.entry("Buy", strategy.long)

if (sellCondition)
    strategy.close("Buy")

// === Plot Supertrend Lines === //
// Plotting current timeframe Supertrend
plot(st_current, title="Current TF Supertrend", color=is_up_current ? color.green : color.red, linewidth=2, style=plot.style_line)

// Plotting higher timeframe Supertrend lines
plot(st_15m, title="15m Supertrend", color=is_up_15m ? color.green : color.red, linewidth=1, style=plot.style_line)
plot(st_5m, title="5m Supertrend", color=is_up_5m ? color.green : color.red, linewidth=1, style=plot.style_line)
plot(st_2m, title="2m Supertrend", color=is_up_2m ? color.green : color.red, linewidth=1, style=plot.style_line)

// === Plot Buy and Sell Signals === //
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, 
          color=color.green, style=shape.labelup, text="BUY", size=size.small)

plotshape(series=sellCondition, title="Sell Signal", location=location.abovebar, 
          color=color.red, style=shape.labeldown, text="SELL", size=size.small)

// === Optional: Background Color to Indicate Position === //
bgcolor(strategy.position_size > 0 ? color.new(color.green, 90) : na, title="In Position Background")

// === Alerts === //
// Create alerts for Buy and Sell signals
alertcondition(buyCondition, title="Buy Alert", message="Buy signal generated by MTF Supertrend Strategy with Time Filter.")
alertcondition(sellCondition, title="Sell Alert", message="Sell signal generated by MTF Supertrend Strategy with Time Filter.")


관련

더 많은