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

SMA 크로스오버와 볼륨 필터와 함께 적응형 동적 스톱 로스 및 영업 전략

저자:차오장, 날짜: 2024-07-31 11:20:39
태그:SMA

img

전반적인 설명

이 전략은 간단한 이동 평균 (SMA) 크로스오버와 볼륨 필터링을 기반으로 한 자동화된 거래 시스템이다. 트렌드 강도를 확인하기 위해 볼륨 지표를 통합하는 동시에 엔트리 신호를 생성하기 위해 빠르고 느린 SMA의 크로스오버를 활용합니다. 이 전략에는 또한 역동적 인 스톱 로스 및 영리 메커니즘과 시간 기반 출구 조건이 포함되며 위험 관리 최적화 및 수익성 향상을 목표로합니다.

전략 원칙

이 전략의 핵심 원칙은 다음과 같은 주요 구성 요소에 기반합니다.

  1. SMA 교차 신호:

    • 서로 다른 기간의 두 개의 간단한 이동 평균 (고속 SMA와 느린 SMA) 을 사용합니다.
    • 빠른 SMA가 느린 SMA를 넘을 때 긴 신호를 생성합니다.
    • 빠른 SMA가 느린 SMA 아래를 넘을 때 짧은 신호를 생성합니다.
  2. 볼륨 필터링:

    • 부피의 간단한 이동 평균을 계산합니다.
    • 긴 신호는 현재 부피가 부피 SMA보다 높아야 합니다.
    • 짧은 신호는 현재 부피가 부피 SMA보다 낮아야 합니다.
  3. 동적 스톱 로스 및 영업 취득:

    • 엔트리 가격의 비율을 기준으로 스톱 로스 및 영업 취득 수준을 설정합니다.
    • 스톱 로스 및 트레이프 레벨은 입력 매개 변수를 통해 조정할 수 있습니다.
  4. 시간 기반 출구:

    • 최대 유지 시간을 설정합니다 (바의 수)
    • 최대 보유 시간 후에 자동으로 포지션을 닫습니다. 장기적인 불리한 포지션을 방지하기 위해서입니다.
  5. 백테스트 기간 설정:

    • 사용자가 특정 백테스트 시간 범위를 정의 할 수 있습니다.
    • 전략이 지정된 역사적 기간 내에만 실행되도록 보장합니다.

전략적 장점

  1. 트렌드 추종 및 모멘텀 조합: SMA 크로스오버와 볼륨 필터링을 결합함으로써 전략은 약한 시장에서 빈번한 거래를 피하면서 강력한 트렌드 움직임을 포착 할 수 있습니다.

  2. 유연한 위험 관리 동적 스톱 로스 메커니즘과 이윤 취득 메커니즘은 전략이 시장 변동성에 따라 위험 노출을 자동으로 조정하여 이윤을 보호하고 잠재적 인 손실을 제한하는 데 도움이됩니다.

  3. 과잉 감금 방지: 최대 보유 기간 제한은 전략이 불리한 시장 조건에서 손실 지위를 장기간 보유하는 것을 방지하고 효율적인 자본 사용을 촉진합니다.

  4. 높은 사용자 정의 가능성: 여러 가지 조정 가능한 매개 변수 (SMA 기간, 스톱-러스 및 영업률, 최대 보유 시간 등) 는 전략을 다양한 시장과 거래 스타일에 최적화 할 수 있습니다.

  5. 시각 지원: 이 전략은 차트에 SMA 라인과 거래 신호를 표시하여 전략 성과에 대한 직관적인 이해와 분석을 촉진합니다.

전략 위험

  1. 뒤떨어진 자연: SMA 지표는 본질적으로 뒤쳐져 있으며, 이는 빠르게 역전되는 시장에서 지연된 진입 또는 놓친 기회를 초래할 수 있습니다.

  2. 거짓 탈출 위험: 범위에 있는 시장에서, SMA 크로스오버는 빈번한 잘못된 브레이크아웃 신호를 생성하여 오버 트레이딩과 거래 비용을 증가시킬 수 있습니다.

  3. 부피 의존성: 부피 지표에 과도하게 의존하는 것은 특정 시장 조건에서 특히 유동성이 낮거나 비정상적인 거래량이있는 기간 동안 전략을 오해 할 수 있습니다.

  4. 적립된 비율로 중지/손실/이익 취득: 일정한 비율의 스톱 로스 및 이윤 취득을 사용하는 것은 모든 시장 조건, 특히 급격한 변동성 변화 기간 동안 적합하지 않을 수 있습니다.

  5. 시간 기반 출출의 제한: 고정된 최대 보유 기간은 유리한 동향이 아직 끝나지 않은 상태에서 조기 종료로 이어질 수 있으며 잠재적 수익에 영향을 줄 수 있습니다.

전략 최적화 방향

  1. 동적 매개 변수 조정 다양한 시장 주기와 변동성에 적응하기 위해 SMA 기간, 스톱 로스 및 영업 수익 비율 및 최대 보유 시간을 동적으로 조정합니다.

  2. 추가 필터를 포함: 거래 신호의 정확성을 향상시키기 위해 추가 필터링 조건으로 다른 기술적 지표 (RSI, MACD 등) 를 도입하십시오.

  3. 적응용 부피 기준: 다른 시장 단계에서 용량 특성에 더 잘 적응하기 위해 동적으로 조정되는 용량 문턱 메커니즘을 개발합니다.

  4. 개선된 출입 메커니즘: 시장 구조 또는 동력 지표에 기반한 지능적인 출구 메커니즘을 탐구하여 고정 시간 출구를 대체하여 전략 적응력을 향상시킵니다.

  5. 변동성 조정: 시장의 변동성을 기반으로 동적인 스톱 로스 및 영업 레벨 조정을 실시하여 위험을 더 잘 관리하고 이익을 취득합니다.

  6. 다중 시간 프레임 분석 여러 시간 프레임에서 데이터 분석을 통합하여 시장 추세와 반전을 식별하는 전략의 능력을 향상시킵니다.

  7. 기계 학습 최적화: 기계 학습 알고리즘을 활용하여 전략 매개 변수를 동적으로 최적화하여 다른 시장 환경에서 성능을 향상시킵니다.

결론

SMA 크로스오버 및 볼륨 필터와 함께 동적 동적 스톱-로스 및 테이크-프로프트 전략은 트렌드 추적, 볼륨 분석 및 리스크 관리를 결합한 포괄적인 거래 시스템이다. SMA 크로스오버와 볼륨 필터를 활용함으로써 전략은 강력한 시장 트렌드를 포착하는 것을 목표로 하며, 동적 스톱-로스 및 테이크-프로프트 메커니즘과 시간 기반 출구 기능은 유연한 리스크 제어 기능을 제공합니다. 신호 지연 및 고정 매개 변수에 의존하는 것과 같은 일부 내재 한계점이 있지만, 전략은 동적 매개 변수 조정, 추가 기술 지표 도입 및 기계 학습 기법을 사용하는 등 여러 최적화 방향을 제공합니다. 지속적인 전략 최적화 및 개선을 통해 이것은 다양한 시장 조건과 거래 스타일에 적합한 강력하고 유연한 자동 거래 도구가 될 가능성이 있습니다.


/*backtest
start: 2024-06-30 00:00:00
end: 2024-07-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Simple_CrossOver_Bot_V1_EBO", overlay=true)

// INPUTS
dateStart_Year = input.int(2018, title="Start Year", minval=2000)
dateStart_Month = input.int(1, title="Start Month", minval=1, maxval=12)
dateStart_Day = input.int(1, title="Start Day", minval=1, maxval=31)
dateEnd_Year = input.int(2019, title="End Year", minval=2000)
dateEnd_Month = input.int(1, title="End Month", minval=1, maxval=12)
dateEnd_Day = input.int(1, title="End Day", minval=1, maxval=31)

fast_SMA_input = input.int(7, title="SMA Fast")
slow_SMA_input = input.int(25, title="SMA Slow")
volume_SMA_input = input.int(20, title="Volume SMA")
stop_loss_percent = input.float(1.0, title="Stop Loss (%)", step=0.1) / 100
take_profit_percent = input.float(2.0, title="Take Profit (%)", step=0.1) / 100
max_bars_in_trade = input.int(50, title="Max Bars in Trade", minval=1)

// INDICATORS
fast_SMA = ta.sma(close, fast_SMA_input)
slow_SMA = ta.sma(close, slow_SMA_input)
volume_SMA = ta.sma(volume, volume_SMA_input)

// STRATEGY
LONG = ta.crossover(fast_SMA, slow_SMA) and fast_SMA > slow_SMA and volume > volume_SMA
SHORT = ta.crossunder(fast_SMA, slow_SMA) and fast_SMA < slow_SMA and volume < volume_SMA

// TRIGGERS
testPeriodStart = timestamp(dateStart_Year, dateStart_Month, dateStart_Day)
testPeriodEnd = timestamp(dateEnd_Year, dateEnd_Month, dateEnd_Day)
timecondition = true

// Track bar index for entries
var int long_entry_bar_index = na
var int short_entry_bar_index = na

if timecondition
    if LONG
        strategy.entry(id="LONG", direction=strategy.long)
        long_entry_bar_index := bar_index
    if SHORT
        strategy.entry(id="SHORT", direction=strategy.short)
        short_entry_bar_index := bar_index

    // Exit conditions for LONG
    if not na(long_entry_bar_index) and bar_index - long_entry_bar_index >= max_bars_in_trade
        strategy.close("LONG")
        long_entry_bar_index := na
    
    // Exit conditions for SHORT
    if not na(short_entry_bar_index) and bar_index - short_entry_bar_index >= max_bars_in_trade
        strategy.close("SHORT")
        short_entry_bar_index := na

    // Standard exits
    if LONG
        strategy.exit("Exit LONG", from_entry="LONG", stop=close * (1 - stop_loss_percent), limit=close * (1 + take_profit_percent))
    if SHORT
        strategy.exit("Exit SHORT", from_entry="SHORT", stop=close * (1 + stop_loss_percent), limit=close * (1 - take_profit_percent))

// PLOTS
plot(fast_SMA, color=color.green, linewidth=1, title="Fast SMA")
plot(slow_SMA, color=color.yellow, linewidth=1, title="Slow SMA")
plot(volume_SMA, color=color.blue, linewidth=1, title="Volume SMA")
plotshape(series=LONG, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", size=size.small)
plotshape(series=SHORT, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", size=size.small)

// Uncomment the following lines for alerts
// alertcondition(LONG, title="LONG")
// alertcondition(SHORT, title="SHORT")


관련

더 많은