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

R:R, 일일 한계 및 더 엄격한 스톱 로스로 MACD 컨버전스 전략

저자:차오장, 날짜: 2024-06-03 16:47:56
태그:MACD

img

전반적인 설명

이 전략은 거래 신호를 생성하기 위해 MACD 지표의 컨버전스 및 디버전스를 사용합니다. MACD 라인이 신호 라인을 통과하고 MACD 라인의 값이 각각 1.5 이상 또는 -1.5 미만일 때 긴 신호와 짧은 신호를 생성합니다. 이 전략은 고정된 영리 및 스톱 로스 수준을 설정하고 리스크 리워드 비율 (R: R) 의 개념을 도입합니다. 또한 매일 최대 손실과 이익 제한과 더 긴 트레일링 스톱 로스를 사용하여 위험을 더 잘 제어합니다.

전략 원칙

  1. MACD 라인과 MACD 표시기의 신호 라인을 계산합니다.
  2. MACD 라인과 신호 라인의 교차 상황을 결정하고 MACD 라인의 값이 특정 임계값 (1.5 및 -1.5) 을 초과하는지 고려합니다.
  3. 긴 신호가 나타나면 현재 가장 높은 가격 + 600 최소 틱 유닛의 이익 취득 가격과 현재 가장 낮은 가격 - 100 최소 틱 유닛의 스톱 로스 가격으로 긴 포지션을 개척합니다.
  4. 쇼트 신호가 나타나면 현재 가장 낮은 가격인 600 최소 틱 유닛과 현재 가장 높은 가격 + 100 최소 틱 유닛의 스톱 로스 가격으로 수익을 취하는 짧은 포지션을 개척합니다.
  5. 트래일링 스톱 로스 로직을 도입합니다. 가격이 진입 가격에 비해 최소 300 틱 유닛 이상 상승 (롱 포지션) 또는 하락 (쇼트 포지션) 할 때, 엔트리 가격 + (폐기 가격 - 진입 가격 - 300) 또는 엔트리 가격 - (엔트리 가격 - 종료 가격 - 300) 로 이동합니다.
  6. 일일 최대 손실 및 이익 제한을 설정합니다. 일일 손실이 최소 600 틱 유닛에 도달하거나 이익이 최소 1800 틱 유닛에 도달하면 모든 포지션을 닫습니다.

이점 분석

  1. MACD 지표와 가격 임계 조건을 결합하면 일부 노이즈 신호가 효과적으로 필터됩니다.
  2. 고정된 위험/이익 비율 (R:R) 은 각 거래의 위험과 이윤을 제어할 수 있게 합니다.
  3. 트레일링 스톱 로스 로직은 트렌드가 형성된 후 수익을 보호하고 마감률을 줄여줍니다.
  4. 일일 최대 손실 및 이익 제한은 일일 위험 노출을 통제하고 과도한 손실이나 이익을 피하고 마취를 피하는 데 도움이됩니다.

위험 분석

  1. MACD 지표는 지연 효과를 가지고 있으며 이는 지연되거나 잘못된 신호로 이어질 수 있습니다.
  2. 고정된 영업률과 스톱 로스 수준은 다른 시장 조건에 적응하지 못할 수 있으며 불안정한 시장에서 자주 발생 할 수 있습니다.
  3. 후속 스톱-러스 논리는 트렌드 역전 시 손실을 제지하지 못하여 수익을 되돌릴 수 있습니다.
  4. 일일 최대 손실 및 이익 제한은 전략이 일일 트렌드가 명확할 때 잠재적인 이윤을 놓치면서 조기에 포지션을 닫을 수 있습니다.

최적화 방향

  1. 신호를 확인하고 신호 정확도를 향상시키기 위해 여러 시간 프레임 MACD 표시기를 사용하는 것을 고려하십시오.
  2. 다른 시장 조건에 적응하기 위해 시장 변동성에 따라 수익을 취하고 손실을 멈추는 수준을 동적으로 조정합니다.
  3. ATR 지표에 기반한 후속 스톱 로스 거리를 설정하는 등 후속 스톱 로스 논리를 최적화하여 가격 변동에 더 잘 적응할 수 있습니다.
  4. 매일 최대 손실 및 이익 제한의 매개 변수를 최적화하여 가능한 한 트렌드 움직임을 포착하면서 위험을 제어하는 적절한 한계 값을 찾습니다.

요약

이 전략은 리스크-어워드 비율, 트레일링 스톱-러스, 그리고 일일 리미트와 같은 리스크 제어 조치를 도입하면서 거래 신호를 생성하기 위해 MACD 지표의 컨버전스 및 분리를 사용합니다. 전략은 트렌드 움직임을 포착하고 어느 정도 위험을 제어 할 수 있지만 여전히 최적화 및 개선의 여지가 있습니다. 미래에 최적화는 더 견고하고 상당한 수익을 얻기 위해 신호 확인, 수익 및 스톱-러스 수준, 트레일링 스톱-러스 및 일일 리미트와 같은 측면에서 고려 될 수 있습니다.


/*backtest
start: 2023-05-28 00:00:00
end: 2024-06-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DD173838

//@version=5
strategy("MACD Convergence Strategy with R:R, Daily Limits, and Tighter Stop Loss", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// MACD settings
fastLength = input.int(12, title="Fast Length", minval=1)
slowLength = input.int(26, title="Slow Length", minval=1)
signalSmoothing = input.int(9, title="Signal Smoothing", minval=1)
source = input(close, title="Source")

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(source, fastLength, slowLength, signalSmoothing)

// Plot MACD and signal line
plot(macdLine, title="MACD Line", color=color.blue)
plot(signalLine, title="Signal Line", color=color.red)

// Define convergence conditions
macdConvergenceUp = ta.crossover(macdLine, signalLine) and macdLine > 1.5
macdConvergenceDown = ta.crossunder(macdLine, signalLine) and macdLine < -1.5

// Define take profit and stop loss

        
    
takeProfit = 600
stopLoss = 100

// Plot buy and sell signals on the chart
plotshape(series=macdConvergenceDown, title="Short Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SHORT")
plotshape(series=macdConvergenceUp, title="Long Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="LONG")

// Execute short and long orders with defined take profit and stop loss
if (macdConvergenceDown)
    strategy.entry("Short", strategy.short, qty=1, stop=high + (stopLoss / syminfo.mintick), limit=low - (takeProfit / syminfo.mintick))

if (macdConvergenceUp)
    strategy.entry("Long", strategy.long, qty=1, stop=low - (stopLoss / syminfo.mintick), limit=high + (takeProfit / syminfo.mintick))

// Trailing stop logic
var float entryPrice = na
var float trailingStopPrice = na

if (strategy.position_size != 0)
    entryPrice := strategy.opentrades.entry_price(0)

if (strategy.position_size > 0)  // For long positions
    if (close - entryPrice > 300)
        trailingStopPrice := entryPrice + (close - entryPrice - 300)

if (strategy.position_size < 0)  // For short positions
    if (entryPrice - close > 300)
        trailingStopPrice := entryPrice - (entryPrice - close - 300)

if (strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice)
    strategy.close("Long", comment="Trailing Stop")

if (strategy.position_size < 0 and not na(trailingStopPrice) and close > trailingStopPrice)
    strategy.close("Short", comment="Trailing Stop")

// Daily drawdown and profit limits
var float startOfDayEquity = na
if (na(startOfDayEquity) or ta.change(time('D')) != 0)
    startOfDayEquity := strategy.equity

maxDailyLoss = 600
maxDailyProfit = 1800
currentDailyPL = strategy.equity - startOfDayEquity

if (currentDailyPL <= -maxDailyLoss)
    strategy.close_all(comment="Max Daily Loss Reached")

if (currentDailyPL >= maxDailyProfit)
    strategy.close_all(comment="Max Daily Profit Reached")


관련

더 많은