이중 이동 평균 교차 적응형 동적 손절매 및 손절매 전략

SMA MA SL TP ATR
생성 날짜: 2024-11-18 15:32:26 마지막으로 수정됨: 2024-11-18 15:54:16
복사: 0 클릭수: 505
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이중 이동 평균 교차 적응형 동적 손절매 및 손절매 전략

개요

이 전략은 쌍평선 교차 신호에 기반한 정량 거래 시스템으로, 단기 및 장기 이동 평균의 교차로 시장 추세 변화를 식별하고, 동적 스톱 손실 관리와 결합하여 위험을 제어한다. 전략은 시가 단위를 사용하여 거래하며, 신호가 터지면 자동으로 기존 포지션을 청산하고 새로운 포지션을 열고, 스톱 손실 지점을 설정하여 자금을 보호한다.

전략 원칙

전략은 두 개의 다른 주기의 간단한 이동 평균 ((SMA) 을 거래 신호의 주요 기초로 사용합니다. 단기 평균선 위에 장기 평균선을 통과할 때, 시스템은 여러 신호를 생성합니다. 단기 평균선 아래에 장기 평균선을 통과할 때, 시스템은 마이너스 신호를 생성합니다. 시스템은 신호가 생성될 때 현재 포지션 상태를 검사합니다. 역으로 포지션이 있다면 먼저 포지션을 평정합니다.

전략적 이점

  1. 신호 메커니즘의 명확성 - 쌍평선 교차는 고전 기술 지표로, 신호는 명확하고 이해하기 쉽다
  2. 리스크 관리가 완벽합니다. 동적 스톱 스톱 로즈로 거래당 리스크를 제어합니다.
  3. 높은 수준의 자동화 - 신호 인식에서 포지션 관리에 이르기까지 전체 프로세스의 자동화
  4. 적응력 - 다양한 시장 환경에 따라 변수를 조정할 수 있습니다.
  5. 간단한 구조 - 코드의 논리가 명확하고, 유지보수 및 최적화가 용이하다
  6. 실시간 모니터링 - 전략 수행을 추적하기 위해 거래 상기 기능이 설정되었습니다.

전략적 위험

  1. 주파수 시장 위험 - 주파수 주파수 상황에서 자주 거래하여 손실이 발생할 수 있습니다.
  2. 지각 위험 - 시가 단위 실행은 큰 지각에 직면할 수 있습니다.
  3. 매개 변수 감수성 - 평균선 주기 선택이 전략 성능에 큰 영향을 미칩니다.
  4. 가짜 브레이크 위험 - 단기간의 가격 돌파 이후 급격한 회수 가능
  5. 자금 관리 위험 - 고정 비율 상쇄 손실은 모든 시장 환경에 적합하지 않을 수 있습니다.

전략 최적화 방향

  1. 트렌드 필터를 추가하여 불안정한 시장에서 자주 거래하는 것을 피하십시오.
  2. 변동률 지표의 동적 조정 스톱 스톱 손실 비율을 도입
  3. 거래 양 확인 신호를 추가하여 거래 품질을 향상시킵니다.
  4. 포지션 개시 시기를 최적화하고 가격 조정 장치를 도입하는 것을 고려합니다.
  5. 자금 관리 시스템을 개선하고, 동적 포지션 제어
  6. 시장 정서 지표를 늘리고 신호 신뢰도를 높여라

요약하다

이 전략은 구조가 완전하고 논리가 명확한 양적 거래 전략이다. 동적 스톱스톱 손해 관리 위험과 함께 쌍평선 교차로 트렌드 변화를 포착한다. 전략의 장점은 체계화 정도가 높고 위험은 통제 가능하지만 실장에서는 여전히 다양한 종류의 시장 위험에 대처하는 데 주의를 기울여야 한다. 지속적인 최적화 및 개선으로 전략은 다양한 시장 환경에서 안정적인 성능을 유지할 것으로 보인다. 실장 전에 충분한 피드백 검증을 수행하고 실제 상황에 따라 매개 변수 설정을 조정하는 것이 좋습니다.

전략 소스 코드
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("BTCUSD Daily Strategy - Market Orders Only", overlay=true, initial_capital=10000, currency=currency.USD)

// Configurable Inputs
stop_loss_percent = input.float(title="Stop Loss (%)", defval=1.0, minval=0.0, step=0.1)
take_profit_percent = input.float(title="Take Profit (%)", defval=2.0, minval=0.0, step=0.1)
short_ma_length = input.int(title="Short MA Length", defval=9, minval=1)
long_ma_length = input.int(title="Long MA Length", defval=21, minval=1)

// Moving Averages
short_ma = ta.sma(close, short_ma_length)
long_ma = ta.sma(close, long_ma_length)

// Plotting Moving Averages
plot(short_ma, color=color.blue, title="Short MA")
plot(long_ma, color=color.red, title="Long MA")

// Buy and Sell Signals
buy_signal = ta.crossover(short_ma, long_ma)
sell_signal = ta.crossunder(short_ma, long_ma)

// Market Buy Logic
if (buy_signal and strategy.position_size <= 0)
    // Close any existing short position
    if (strategy.position_size < 0)
        strategy.close(id="Market Sell")
    
    // Calculate Stop Loss and Take Profit Prices
    entry_price = close
    long_stop = entry_price * (1 - stop_loss_percent / 100)
    long_take_profit = entry_price * (1 + take_profit_percent / 100)

    // Enter Long Position
    strategy.entry(id="Market Buy", direction=strategy.long)
    strategy.exit(id="Exit Long", from_entry="Market Buy", stop=long_stop, limit=long_take_profit)

    // Alert for Market Buy
    alert("Market Buy Signal at price " + str.tostring(close) + ". Stop Loss: " + str.tostring(long_stop) + ", Take Profit: " + str.tostring(long_take_profit), alert.freq_once_per_bar_close)

// Market Sell Logic
if (sell_signal and strategy.position_size >= 0)
    // Close any existing long position
    if (strategy.position_size > 0)
        strategy.close(id="Market Buy")

    // Calculate Stop Loss and Take Profit Prices
    entry_price = close
    short_stop = entry_price * (1 + stop_loss_percent / 100)
    short_take_profit = entry_price * (1 - take_profit_percent / 100)

    // Enter Short Position
    strategy.entry(id="Market Sell", direction=strategy.short)
    strategy.exit(id="Exit Short", from_entry="Market Sell", stop=short_stop, limit=short_take_profit)

    // Alert for Market Sell
    alert("Market Sell Signal at price " + str.tostring(close) + ". Stop Loss: " + str.tostring(short_stop) + ", Take Profit: " + str.tostring(short_take_profit), alert.freq_once_per_bar_close)