동적 위험 관리 전략에 따른 자동화된 거래 추세

MA MACD ATR TP/SL VOL
생성 날짜: 2025-04-03 13:43:11 마지막으로 수정됨: 2025-04-03 13:43:11
복사: 4 클릭수: 400
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

동적 위험 관리 전략에 따른 자동화된 거래 추세 동적 위험 관리 전략에 따른 자동화된 거래 추세

개요

이것은 이동 평균, MACD 지표 및 거래량 필터를 결합한 자동 거래 전략으로, 다중 기술 지표를 통해 트렌드 방향을 결정하고 거래 위험을 관리합니다. 전략은 단기 및 장기 이동 평균을 통해 시장 추세를 판단하고, MACD를 사용하여 트렌드 신호를 확인하고, 거래량 필터와 동적 위험 관리 메커니즘을 결합하여 거래의 정확성과 안정성을 향상시킵니다.

전략 원칙

이 전략은 크게 네 가지 핵심 기술로 구성되어 있습니다.

  1. 이동 평균 트렌드 판단: 단기 ((20주기) 와 장기 ((100주기) 이동 평균을 교차하여 시장 트렌드 방향을 판단한다.
  2. MACD 신호 확인: MACD 선과 신호 선의 상대적인 위치를 통해 트렌드 신호의 유효성을 검증한다.
  3. 거래량 필터링: 거래량이 현재 거래량과 역사 평균 거래량과 비교하여 거래가 활발한 시장 조건에서 이루어지는 것을 보장합니다.
  4. 다이내믹 리스크 관리: ATR 지표를 사용하여 스톱 스톱 손실을 계산하고 일일 최대 손실과 최대 인출 제한을 설정합니다.

전략적 이점

  1. 다중 지표 검증: 이동 평균, MACD 및 거래량과 결합하여 신호의 정확도를 크게 향상시킵니다.
  2. 동적 위험 제어: 유연한 포지션 규모 계산 및 위험 관리 메커니즘, 개별 거래 및 전체 위험을 효과적으로 제어한다.
  3. 트렌드 추적 능력: 시장의 중기 트렌드를 포착하고, 불안정한 시장에서 무효 거래를 줄일 수 있다.
  4. 매개 변수 조정 가능: 다양한 시장 환경에 맞는 전략 최적화를 위한 다양한 사용자 정의 매개 변수를 제공합니다.

전략적 위험

  1. 지연 위험: 이동 평균과 MACD에는 지연이 존재하여 트렌드 전환점을 잡는 데 지연 될 수 있습니다.
  2. 변수 민감성: 전략의 성능은 선택된 변수에 크게 의존하며, 다른 시장 환경에 따라 계속 조정해야 한다.
  3. 불안정한 시장의 도전: 명확한 추세가 없는 시장에서, 전략은 빈번하고 무효적인 거래 신호를 생성할 수 있다.
  4. 극단적 시장 조건: 급격한 변동이나 블랙 스 사건의 경우, 위험 제어 메커니즘은 중대한 손실을 완전히 피할 수 없습니다.

전략 최적화 방향

  1. 기계 학습 알고리즘을 추가: 동적 변수 조정 메커니즘을 도입하여 시장의 실시간 변화에 따라 최적화 전략 변수.
  2. 다주기 검증: 더 많은 다른 주기의 기술 지표를 도입하여 신호의 신뢰도를 높인다.
  3. 연관성 분석: 시장 연관성 분석을 추가하여 서로 다른 자산 간의 체계적 위험을 줄인다.
  4. 깊이 있는 위험 평가: 더 복잡한 위험 평가 지표와 시나리오 시뮬레이션을 추가하여 위험 모델을 개선합니다.

요약하다

이것은 여러 가지 기술적 분석 도구를 통합적으로 사용하는 자동화 거래 전략이며, 엄격한 위험 관리와 여러 지표 검증을 통해 비교적 안정적이고 신뢰할 수있는 거래 방법을 제공하기위한 전략입니다. 전략의 핵심은 트렌드 캡처 능력과 위험 제어를 균형 잡는 데 있으며, 양적 거래에 대한 유연하고 최적화 가능한 프레임 워크를 제공합니다.

전략 소스 코드
/*backtest
start: 2024-04-02 00:00:00
end: 2025-04-02 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Strategia Semmoncino", shorttitle="semmoncino", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.05)

// Inputs
useVolumeFilter = input.bool(true, title="Usa Filtro di Volume")
volumeThreshold = input.float(1.5, title="Soglia Volume (x Media)", minval=1)
atrPeriod = input.int(14, title="ATR Period", minval=1)
atrMultiplier = input.float(2.0, title="ATR Multiplier", minval=0.1)
takeProfitMultiplier = input.float(6.0, title="Take Profit Multiplier", minval=1.0)  // Aumentato per ottimizzare
riskPerTrade = input.float(2.0, title="Rischio per Trade (%)", minval=0.1) / 100
maxDailyLoss = input.float(2.0, title="Perdita Massima Giornaliera (%)", minval=0.1) / 100
maxDrawdown = input.float(10.0, title="Drawdown Massimo (%)", minval=0.1) / 100
shortMAPeriod = input.int(20, title="MA Breve Termine", minval=1)
longMAPeriod = input.int(100, title="MA Lungo Termine", minval=1)

// MACD Inputs
macdFastLength = input.int(12, title="MACD Fast Length")
macdSlowLength = input.int(26, title="MACD Slow Length")
macdSignalLength = input.int(9, title="MACD Signal Length")

showSignals = input.bool(true, title="Mostra Segnali di Entrata")

// Prezzi di Apertura e Chiusura delle Candele Precedenti (senza repainting)
prevOpen = ta.valuewhen(1, open, 0)
prevClose = ta.valuewhen(1, close, 0)

// Calculate ATR
atr = ta.atr(atrPeriod)

// Calculate Volume Filter
volumeAvg = ta.sma(volume, 20)
volumeFilter = useVolumeFilter ? volume > (volumeAvg * volumeThreshold) : true

// Calculate Moving Averages
shortMA = ta.sma(close, shortMAPeriod)
longMA = ta.sma(close, longMAPeriod)

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength)
macdConditionLong = macdLine > signalLine
macdConditionShort = macdLine < signalLine

// Determine Trend Direction
uptrend = shortMA > longMA
downtrend = shortMA < longMA

// Determine Order Conditions
longCondition = prevClose > prevOpen and volumeFilter and uptrend and macdConditionLong
shortCondition = prevClose < prevOpen and volumeFilter and downtrend and macdConditionShort

// Calcola la dimensione della posizione basata sul capitale iniziale
initialCapital = strategy.initial_capital
positionSize = (initialCapital * riskPerTrade) / (atr * atrMultiplier)

// Calculate Take Profit and Stop Loss Levels dynamically using ATR
takeProfitLong = close + (atr * takeProfitMultiplier)
stopLossLong = close - (atr * 1.5)  // Ridotto per ottimizzare
takeProfitShort = close - (atr * takeProfitMultiplier)
stopLossShort = close + (atr * 1.5)  // Ridotto per ottimizzare

// Limite di Perdita Giornaliera
var float dailyLossLimit = na
if na(dailyLossLimit) or (time - time) > 86400000 // Se è un nuovo giorno
    dailyLossLimit := strategy.equity * (1 - maxDailyLoss)

// Drawdown Massimo
var float drawdownLimit = na
if na(drawdownLimit)
    drawdownLimit := strategy.equity * (1 - maxDrawdown)

// Controllo delle Perdite
if strategy.equity < dailyLossLimit
    strategy.cancel_all()
    strategy.close_all()
    label.new(bar_index, high, text="Perdita Giornaliera Massima Raggiunta", color=color.red)

if strategy.equity < drawdownLimit
    strategy.cancel_all()
    strategy.close_all()
    label.new(bar_index, high, text="Drawdown Massimo Raggiunto", color=color.red)

// Strategy Entries
if (longCondition)
    strategy.entry("Long", strategy.long, qty=positionSize)
    strategy.exit("Take Profit/Stop Loss Long", from_entry="Long", limit=takeProfitLong, stop=stopLossLong)

if (shortCondition)
    strategy.entry("Short", strategy.short, qty=positionSize)
    strategy.exit("Take Profit/Stop Loss Short", from_entry="Short", limit=takeProfitShort, stop=stopLossShort)

// Plot Entry Signals
plotshape(series=longCondition and showSignals ? close : na, location=location.belowbar, color=color.green, style=shape.labelup, text="LONG")
plotshape(series=shortCondition and showSignals ? close : na, location=location.abovebar, color=color.red, style=shape.labeldown, text="SHORT")

// Plot Moving Averages
plot(shortMA, color=color.blue, title="MA Breve Termine", linewidth=2)
plot(longMA, color=color.orange, title="MA Lungo Termine", linewidth=2)

// Plot MACD
hline(0, "Zero Line", color=color.gray)
plot(macdLine - signalLine, title="MACD Histogram", color=color.red, style=plot.style_histogram)