MACD 및 R:R 비율 일중 한도 수렴 전략

MACD
생성 날짜: 2024-06-03 16:47:56 마지막으로 수정됨: 2024-06-03 16:47:56
복사: 3 클릭수: 611
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

MACD 및 R:R 비율 일중 한도 수렴 전략

개요

이 전략은 MACD 지표의 수렴과 분산에 따라 거래 신호를 판단한다. MACD 라인이 신호 라인과 교차하고 MACD 라인의 값이 1.5보다 크거나 1.5보다 작으면 각각 더 많은 것과 더 적은 신호를 발생시킨다. 동시에, 전략은 고정된 중지 손실 지점을 설정하고, 위험 수익률 ((R: R) 의 개념을 도입한다. 또한, 이 전략은 일일 최대 손실과 최대 이익 제한을 채택하고, 더 엄격한 이동 손실 조치를 취하여 위험을 더 잘 제어한다.

전략 원칙

  1. MACD 지표의 MACD 라인 및 신호 라인을 계산한다.
  2. MACD선과 신호선의 교차 상황을 판단하고, MACD선 값이 특정 임계값을 초과하는지 여부를 고려한다.
  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")