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

듀얼 타임프레임 동적 지원 거래 시스템

저자:차오장, 날짜: 2024-12-05 16:44:56
태그:SMAEMA

img

전반적인 설명

이 전략은 주간 및 일일 시간 프레임에서 SMA 및 EMA 크로스오버 신호를 결합하는 이중 타임프레임 동적 지원 거래 시스템이다. 이 시스템은 시장 트렌드와 거래 기회를 식별하기 위해 이동 평균 사이에 형성된 지원 대역을 활용하여 두 가지 다른 기간의 신호 확인을 통해 거래 정확성을 향상시킵니다. 이 전략은 비율 기반 포지션 관리를 사용하여 거래 비용과 미끄러짐을 계산합니다.

전략 원칙

핵심 원칙은 이동 평균의 크로스오버와 두 시간 프레임에 대한 상대적 위치를 모니터링하는 것입니다:

  1. 긴 시간 프레임 (주간) 은 20주 SMA와 21주 EMA를 사용하며 짧은 시간 프레임 (일간) 은 50일 SMA와 51일 EMA를 사용합니다.
  2. 긴 시간 프레임에서 EMA가 SMA를 넘을 때 긴 신호가 생성되며, 하향 경로에서 포지션이 폐쇄됩니다.
  3. 짧은 시간 프레임에서 EMA가 SMA를 넘어서고 단기 EMA가 장기 EMA를 넘어서면 긴 신호가 발생합니다.
  4. 모든 긴 포지션은 짧은 시간 프레임이 짧은 신호를 생성하거나 긴 시간 프레임이 하향 교차를 표시하면 닫습니다.
  5. 이 전략은 지정된 시간 범위 내에서 작동하며, 이 범위 밖의 자동 포지션 폐쇄

전략적 장점

  1. 복수 확인 메커니즘: 듀얼 타임프레임 확인을 통해 잘못된 신호를 줄입니다.
  2. 동적 지원 대역: 이동 평균 사이의 지원 대역은 시장 변화에 적응합니다.
  3. 포괄적 리스크 관리: 거래 비용과 지점 크기를 비율에 기초로 하는 미끄러짐을 고려하는 것을 포함한다.
  4. 강력한 적응력: 지원 대역은 시장 변동에 자동으로 조정됩니다.
  5. 명확한 운영 규칙: 잘 정의 된 입국 및 출구 조건, 실행 및 백테스트가 쉽습니다.

전략 위험

  1. 시장을 불안하게 하는 위험: 옆시장에서 빈번한 잘못된 신호를 일으킬 수 있습니다.
  2. 지연 위험: 이동 평균은 고유 한 지연을 가지고 있으며 최적의 입점 지점을 놓칠 수 있습니다.
  3. 매개 변수 민감도: 전략 성과는 이동 평균 기간 선택에 크게 의존합니다.
  4. 시장 환경 의존성: 트렌딩 시장에서 더 잘 수행하지만 매우 변동적인 조건에서 어려움을 겪을 수 있습니다.
  5. 포지션 사이즈 위험: 특정 시장 조건에서 고정 비율 포지셔닝은 과도한 위험을 초래할 수 있습니다.

최적화 방향

  1. 변동성 지표를 포함합니다: 동적 포지션 크기를 위해 ATR을 추가하는 것을 고려하십시오.
  2. 매개 변수 선택 최적화: 시스템 성능을 최적화하기 위해 다른 이동 평균 기간을 백테스트
  3. 시장 환경 필터를 추가합니다. 불합리한 시장 조건을 필터링하기 위해 트렌드 강도 지표를 구현합니다.
  4. 스톱 로스 메커니즘을 강화: 더 나은 위험 통제를 위해 후속 또는 고정 스톱을 추가하는 것을 고려하십시오.
  5. 포지션 관리 개선: 신호 강도 및 시장 변동성에 따라 포지션 크기를 동적으로 조정합니다.

결론

이 전략은 서로 다른 시간 프레임에서 이동 평균 크로스오버 신호를 결합하여 비교적 견고한 거래 시스템을 구축합니다. 지원 밴드 개념을 통해 시장 추세를 식별하고 거래 정확도를 향상시키기 위해 여러 확인 메커니즘을 사용합니다. 전략 설계는 거래 비용, 미끄러짐 및 시간 관리 등 다양한 실용적인 거래 요인을 고려합니다. 내재적인 위험이 있지만 제안된 최적화 방향은 전략의 안정성과 수익성을 더욱 향상시킬 수 있습니다.


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

//@version=5
strategy("Demo GPT - Bull Market Support Band", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_value=0.1, slippage=3)

start_date = input(timestamp("2018-01-01 00:00 +0000"), title="Start Date")
end_date = input(timestamp("2069-12-31 00:00 +0000"), title="End Date")

lsmaLength = input.int(20, title="Long SMA Length", minval=1)
lemaLength = input.int(21, title="Long EMA Length", minval=1)
customLongTimeframe = input.timeframe("W", title="Long Timeframe")  // Khung thời gian dài
ssmaLength = input.int(50, title="Short SMA Length", minval=1)
semaLength = input.int(51, title="Short EMA Length", minval=1)
customShortTimeframe = input.timeframe("D", title="Short Timeframe")  // Khung thời gian ngắn

source = close

// Tính toán SMA và EMA cho khung thời gian dài
smaLong = ta.sma(source, lsmaLength)
emaLong = ta.ema(source, lemaLength)
outSmaLong = request.security(syminfo.tickerid, customLongTimeframe, smaLong)
outEmaLong = request.security(syminfo.tickerid, customLongTimeframe, emaLong)

// Tính toán SMA và EMA cho khung thời gian ngắn
smaShort = ta.sma(source, ssmaLength)
emaShort = ta.ema(source, semaLength)
outSmaShort = request.security(syminfo.tickerid, customShortTimeframe, smaShort)
outEmaShort = request.security(syminfo.tickerid, customShortTimeframe, emaShort)

// Plot các chỉ báo trên biểu đồ
smaPlotLong = plot(outSmaLong, color=color.new(color.red, 0), title='20w SMA (Long)')
emaPlotLong = plot(outEmaLong, color=color.new(color.green, 0), title='21w EMA (Long)')
smaPlotShort = plot(outSmaShort, color=color.new(color.red, 0), title='20d SMA (Short)')
emaPlotShort = plot(outEmaShort, color=color.new(color.green, 0), title='21d EMA (Short)')

// Fill vùng giữa các đường SMA và EMA
fill(smaPlotLong, emaPlotLong, color=color.new(color.orange, 75), fillgaps=true)
fill(smaPlotShort, emaPlotShort, color=color.new(color.orange, 75), fillgaps=true)

// Điều kiện long và short cho khung thời gian dài
longConditionLong = ta.crossover(outEmaLong, outSmaLong)
shortConditionLong = ta.crossunder(outEmaLong, outSmaLong)

// Điều kiện long và short cho khung thời gian ngắn
longConditionShort = ta.crossover(outEmaShort, outSmaShort) and (outEmaShort > outEmaLong)
shortConditionShort = ta.crossunder(outEmaShort, outSmaShort) and (outEmaShort > outEmaLong) // Điều kiện short khi EMA ngắn hạn cắt xuống dưới SMA ngắn hạn và EMA ngắn hạn cao hơn EMA dài hạn

// Kiểm tra điều kiện trong khoảng thời gian được chỉ định
inDateRange = true

// Nếu khung ngắn hạn xuất hiện tín hiệu short, ưu tiên đóng tất cả các lệnh Long
if shortConditionShort and inDateRange
    strategy.close_all()

// Nếu khung dài có tín hiệu short, đóng tất cả các lệnh Long
if shortConditionLong and inDateRange
    strategy.close_all()

// Nếu khung ngắn hạn có tín hiệu long và không có tín hiệu short từ khung dài, vào lệnh Long
if longConditionShort and not shortConditionLong and not shortConditionShort and inDateRange
    strategy.entry("Long", strategy.long)

// Đóng tất cả các lệnh khi không trong khoảng thời gian được chọn
if not inDateRange
    strategy.close_all()


관련

더 많은