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

다기술 지표 동적 적응 거래 전략 (MTDAT)

저자:차오장, 날짜: 2024-11-29 14:54:57
태그:MACDRSIBBATRSMASD

img

전반적인 설명

이 전략은 다양한 기술적 지표에 기반한 포괄적인 거래 시스템으로, 트렌드 및 역전 기회를 포착하기 위해 MACD, RSI, 볼링거 밴드 및 ATR을 결합합니다. 이 전략은 역동적 인 스톱 로스 및 수익 취득 메커니즘을 사용하여 시장 변동성에 따라 거래 매개 변수를 조정하고 동시에 위험을 효과적으로 제어합니다. 백테스트 결과는 3 개월 테스트 기간 동안 676.27%의 수익을 보여주며 좋은 시장 적응력을 보여줍니다.

전략 원칙

이 전략은 여러 계층의 기술 지표 검증 시스템을 사용하며 다음을 포함합니다.

  1. 모멘텀 전환 신호를 캡처하기 위한 MACD (MACD,)
  2. 2차 필터로서의 RSI ((14) 는 35 이하의 판독이 과판된 것으로 간주되고 65 이상의 판독이 과판된 것으로 간주됩니다.
  3. 가격 변동성 범위를 식별하기 위한 볼링거 밴드 (Bollinger Bands)
  4. 동적 스톱 로스 및 수익 목표 설정에 대한 ATR, 스톱 로스 3x ATR 및 수익 목표 5x ATR

트레이딩 로직은 트렌드 추적 및 역전 트레이딩 전략을 결합하여 여러 가지 검증을 통해 정확도를 향상시킵니다. 시스템은 실시간 시장 변동성에 따라 자동으로 스톱 로스 및 수익 수준을 조정하여 리스크 관리를 동적으로 최적화합니다.

전략적 장점

  1. 다차원 신호 검증 시스템은 거래 신뢰성을 향상시킵니다.
  2. 동적 스톱 로스 및 이윤 취득 체계는 다른 시장 조건에 적응합니다.
  3. 트렌드 및 역전 거래 접근 방식을 결합하여 거래 기회를 증가시킵니다.
  4. 자동화된 위험 관리 시스템은 인간의 판단 오류를 줄입니다.
  5. 53.99%의 승률과 1.44의 수익률은 전략의 안정성을 보여줍니다.
  6. 전략은 편리한 운영을 위해 실시간 거래 알림을 지원합니다.

전략 위험

  1. 여러 지표가 신호 지연, 빠른 시장에서 기회를 놓칠 수 있습니다.
  2. 56.33% 최대 유출액은 상당한 위험 허용을 요구합니다.
  3. 빈번한 거래는 높은 거래 비용을 초래할 수 있습니다.
  4. 전략은 매우 변동적인 시장에서 상당한 위험에 직면 할 수 있습니다.

위험 관리 권고:

  • 돈 관리 계획의 엄격한 실행
  • 매개 변수 정기 검토 및 조정
  • 주요 뉴스 발표 도중 거래 중지
  • 일일 최대 손실 제한을 설정

전략 최적화 방향

  1. 매개 변수 최적화

    • 적응 기간 지표 매개 변수를 사용하는 것을 고려하십시오
    • ATR 곱셈값 설정을 최적화하여 위험/이익 비율을 향상시킵니다.
  2. 신호 시스템 개선:

    • 부피 지표 검증 추가
    • 시장 감정 지표를 포함합니다.
  3. 리스크 관리 강화:

    • 동적 위치 크기를 구현
    • 시간 기반 필터를 추가합니다
  4. 기술 개선:

    • 시장 변동성 필터를 추가합니다
    • 출입 및 출입 시기를 최적화

요약

이 전략은 여러 가지 기술 지표와 동적 위험 관리 시스템을 결합하여 좋은 거래 결과를 달성합니다. 인수 위험이 있지만 전략은 엄격한 위험 통제와 지속적인 최적화를 통해 좋은 시장 적응력과 안정성을 보여줍니다. 거래자는이 전략을 사용할 때 위험 관리 프로토콜을 엄격하게 구현하고 시장 변화에 따라 매개 변수를 조정하는 것이 좋습니다.


/*backtest
start: 2024-11-21 00:00:00
end: 2024-11-28 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("XAUUSD STRATEGY 10MIN", overlay=true)

// Spread Adjustment (38-point spread)
spread = 38 * syminfo.mintick       

// MACD Calculation
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
macdBuy = ta.crossover(macdLine, signalLine)
macdSell = ta.crossunder(macdLine, signalLine)

// RSI Calculation
rsi = ta.rsi(close, 14)
rsiOverbought = rsi > 65
rsiOversold = rsi < 35

// Bollinger Bands Calculation
basis = ta.sma(close, 20)
dev = 2 * ta.stdev(close, 20)
upperBand = basis + dev
lowerBand = basis - dev

// ATR Calculation for Volatility-Based Stop Loss and Take Profit
atr = ta.atr(14)
stopLoss = 3 * atr
takeProfit = 5 * atr

// Variables to track entry price and line
var line entryLine = na
var int tradeNumber = 0
var string tradeType = ""
var string tradeSignalComment = ""

// Buy Condition
buyCondition = (macdBuy or rsiOversold or close < lowerBand)

// Sell Condition
sellCondition = (macdSell or rsiOverbought or close > upperBand)

// Strategy Entry and Alerts
if (buyCondition and strategy.opentrades == 0)  // Open a new buy trade
    // Remove the previous entry line if it exists
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Adjust the entry price by adding the spread (ask price)
    buyPrice = close + spread

    // Enter a new buy trade at the ask price, and close it with the bid price
    strategy.entry("Buy", strategy.long, stop=buyPrice - stopLoss, limit=buyPrice + takeProfit, comment="Enter buy $" + str.tostring(buyPrice))
    tradeNumber := tradeNumber + 1  // Increment trade number
    tradeType := "Entry Long"
    tradeSignalComment := "Enter buy trade"
    
    // Plot new dotted entry line for the current trade
    // entryLine := line.new(bar_index, buyPrice, bar_index + 50, buyPrice, width=1, color=color.green, style=line.style_dotted)
    
    // Send alert for the buy entry
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(buyPrice), alert.freq_once_per_bar_close)

if (sellCondition and strategy.opentrades == 0)  // Open a new sell trade
    // Remove the previous entry line if it exists
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Adjust the entry price by subtracting the spread (bid price)
    sellPrice = close - spread

    // Enter a new sell trade at the bid price, and close it with the ask price
    strategy.entry("Sell", strategy.short, stop=sellPrice + stopLoss, limit=sellPrice - takeProfit, comment="Enter sell $" + str.tostring(sellPrice))
    tradeNumber := tradeNumber + 1  // Increment trade number
    tradeType := "Entry Short"
    tradeSignalComment := "Enter sell trade"
    
    // Plot new dotted entry line for the current trade
    // entryLine := line.new(bar_index, sellPrice, bar_index + 50, sellPrice, width=1, color=color.red, style=line.style_dotted)
    
    // Send alert for the sell entry
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(sellPrice), alert.freq_once_per_bar_close)

// Exit conditions and alerts
if (strategy.position_size > 0 and sellCondition)  // Close buy when sell conditions met
    // Adjust the exit price by subtracting the spread (bid price)
    exitPrice = close - spread
    strategy.close("Buy", comment="Exit buy $" + str.tostring(exitPrice))
    
    // Remove the entry line when the trade is closed
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Send alert for the buy exit
    tradeType := "Exit Long"
    tradeSignalComment := "Exit buy trade"
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - "  + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(exitPrice), alert.freq_once_per_bar_close)

if (strategy.position_size < 0 and buyCondition)  // Close sell when buy conditions met
    // Adjust the exit price by adding the spread (ask price)
    exitPrice = close + spread
    strategy.close("Sell", comment="Exit sell $" + str.tostring(exitPrice))
    
    // Remove the entry line when the trade is closed
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Send alert for the sell exit
    tradeType := "Exit Short"
    tradeSignalComment := "Exit sell trade"
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(exitPrice), alert.freq_once_per_bar_close)

// Plot Indicators
plot(upperBand, title="Upper Bollinger Band", color=color.blue)
plot(lowerBand, title="Lower Bollinger Band", color=color.blue)


관련

더 많은