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

다중 지표 추세 옵션 거래 EMA 크로스 전략

저자:차오장, 날짜: 2024-12-20 14:49:04
태그:EMASMAVWAPMACDRSITP

img

전반적인 설명

이 전략은 트렌드를 따르는 옵션 거래 시스템으로 여러 가지 기술적 지표를 결합합니다. 트렌드 확인을 위해 SMA와 VWAP와 함께 EMA 크로스오버를 핵심 신호로 사용하고 MACD와 RSI를 신호 필터링을위한 보충 지표로 사용합니다. 이 전략은 위험 관리에 대한 고정 수익 수준을 고용하고 엄격한 입시 조건과 위치 관리를 통해 거래 성공을 향상시킵니다.

전략 원칙

이 전략은 8주기 및 21주기 EMA의 크로스오버를 주요 거래 신호로 사용합니다. 단기 EMA가 장기 EMA를 넘어서 다음 조건을 충족하면 긴 (콜) 신호가 유발됩니다. 가격은 100 및 200주기 SMA 이상, MACD 라인은 신호 라인 이상, RSI는 50 이상입니다. 짧은 (푸트) 신호는 반대 조건에서 유발됩니다. VWAP는 상대 가격 위치를 평가하는 데 도움이되는 가격 가중된 참조로 통합됩니다. 각 거래는 5%의 영리 수준과 함께 1 계약의 고정 위치 크기를 사용합니다. 플래그 전략은 포지션 상태를 추적하여 한 번에 하나의 포지션만 보유하도록합니다.

전략적 장점

  1. 여러 지표가 시너지 효과를 발휘하고, 서로 다른 기간과 지표 유형을 통해 신호를 교차 검증합니다.
  2. 추세와 단기 동력을 포착하기 위해 추세와 동력 지표를 결합합니다.
  3. 고정 된 이익 수급 수준 은 이익 을 보호 하고 과도 한 탐욕 을 방지 하는 데 도움 이 된다
  4. 엄격한 포지션 관리는 포지션 중복을 방지하고 위험 노출을 줄여줍니다.
  5. EMA, SMA, VWAP 트렌드와 신호 마커를 포함한 명확한 시각화

전략 위험

  1. 다양한 시장에서 자주 잘못된 신호를 생성 할 수 있습니다.
  2. 고정된 수익률은 수익 잠재력을 제한할 수 있습니다.
  3. 스톱 로스의 부재는 극단적인 시장 조건에서 상당한 손실을 초래할 수 있습니다.
  4. 여러 가지 지표로 인해 신호가 지연될 수 있습니다.
  5. 유동성이 낮은 옵션 계약에서 미끄러짐 위험이 발생할 수 있습니다.

전략 최적화 방향

  1. 시장 변동성에 기반한 적응적 인 수익 및 손실 중지 메커니즘을 구현합니다.
  2. 계정 크기와 시장 조건에 따라 동적으로 조정할 수 있는 위치 사이징 모듈을 추가
  3. 높은 변동성 환경에서 전략 매개 변수를 조정하기 위해 변동성 필터를 포함합니다.
  4. 일정한 기간 대신 적응 기간을 고려하여 지표 매개 변수를 최적화
  5. 매우 변동적인 시장 개장 및 폐쇄 기간 동안 거래를 피하기 위해 시간 필터를 추가합니다.

요약

이 전략은 잘 구성되어 있으며 논리적으로 건전한 다중 지표 트렌드 추후 옵션 거래 전략입니다. 여러 기술적 지표의 조율을 통해 거래 신호 신뢰성을 향상시키고 고정된 영리 수준을 사용하여 위험을 관리합니다. 전략에는 일부 내재적인 위험이 있지만 제안된 최적화 방향은 안정성과 수익성을 더욱 향상시킬 수 있습니다. 전략의 시각화 디자인은 또한 거래자가 직관적으로 거래 신호를 이해하고 실행하는 데 도움이됩니다.


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

//@version=5
strategy("OptionsMillionaire Strategy with Take Profit Only", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// Define custom magenta color
magenta = color.rgb(255, 0, 255)  // RGB for magenta

// Input settings for Moving Averages
ema8 = ta.ema(close, 8)
ema21 = ta.ema(close, 21)
sma100 = ta.sma(close, 100)
sma200 = ta.sma(close, 200)
vwap = ta.vwap(close)  // Fixed VWAP calculation

// Input settings for MACD and RSI
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
rsi = ta.rsi(close, 14)

// Define trend direction
isBullish = ema8 > ema21 and close > sma100 and close > sma200
isBearish = ema8 < ema21 and close < sma100 and close < sma200

// Buy (Call) Signal
callSignal = ta.crossover(ema8, ema21) and isBullish and macdLine > signalLine and rsi > 50

// Sell (Put) Signal
putSignal = ta.crossunder(ema8, ema21) and isBearish and macdLine < signalLine and rsi < 50

// Define Position Size and Take-Profit Level
positionSize = 1  // Position size set to 1 (each trade will use one contract)
takeProfitPercent = 5  // Take profit is 5%

// Variables to track entry price and whether the position is opened
var float entryPrice = na  // To store the entry price
var bool positionOpen = false  // To check if a position is open

// Backtesting Execution
if callSignal and not positionOpen
    // Enter long position (call)
    strategy.entry("Call", strategy.long, qty=positionSize)
    entryPrice := close  // Store the entry price
    positionOpen := true  // Set position as opened

if putSignal and not positionOpen
    // Enter short position (put)
    strategy.entry("Put", strategy.short, qty=positionSize)
    entryPrice := close  // Store the entry price
    positionOpen := true  // Set position as opened

// Only check for take profit after position is open
if positionOpen
    // Calculate take-profit level (5% above entry price for long, 5% below for short)
    takeProfitLevel = entryPrice * (1 + takeProfitPercent / 100)

    // Exit conditions (only take profit)
    if strategy.position_size > 0
        // Long position (call)
        if close >= takeProfitLevel
            strategy.exit("Take Profit", "Call", limit=takeProfitLevel)
    if strategy.position_size < 0
        // Short position (put)
        if close <= takeProfitLevel
            strategy.exit("Take Profit", "Put", limit=takeProfitLevel)

// Reset position when it is closed (this happens when an exit is triggered)
if strategy.position_size == 0
    positionOpen := false  // Reset positionOpen flag

// Plot EMAs
plot(ema8, color=magenta, linewidth=2, title="8 EMA")
plot(ema21, color=color.green, linewidth=2, title="21 EMA")

// Plot SMAs
plot(sma100, color=color.orange, linewidth=1, title="100 SMA")
plot(sma200, color=color.blue, linewidth=1, title="200 SMA")

// Plot VWAP
plot(vwap, color=color.white, style=plot.style_circles, title="VWAP")

// Highlight buy and sell zones
bgcolor(callSignal ? color.new(color.green, 90) : na, title="Call Signal Background")
bgcolor(putSignal ? color.new(color.red, 90) : na, title="Put Signal Background")

// Add buy and sell markers (buy below, sell above)
plotshape(series=callSignal, style=shape.labelup, location=location.belowbar, color=color.green, text="Buy", title="Call Signal Marker")
plotshape(series=putSignal, style=shape.labeldown, location=location.abovebar, color=color.red, text="Sell", title="Put Signal Marker")


관련

더 많은