MACD 제어 위험 거래 전략

저자:차오장, 날짜: 2023-10-26 15:51:34
태그:

img

전반적인 설명

이 전략은 MACD 지표에 기반하여 각 거래의 위험을 제어하는 장기 거래 전략을 설계합니다. 전통적인 장기 단기 플립 전략과 비교하면이 전략은 각 거래의 위험을 제어하는 데 더 초점을 맞추고 있습니다. 합리적인 스톱 로스 및 수익 레벨을 계산하고 적절한 포지션 크기를 설정함으로써 각 거래의 최대 손실을 제한합니다. 이것은 인하를 효과적으로 제어하고 장기적으로 안정적인 이익을 얻을 수 있습니다.

원칙

이 전략은 먼저 MACD 라인과 MACD 지표의 신호 라인을 계산합니다. MACD 라인이 신호 라인의 위를 넘을 때, 그것은 구매 신호로 결정됩니다. 가짜 브레이크오프를 필터링하기 위해 전략은 바스인 (crossover (crossover (macd_line, signal_line)) <= 5) 를 필요로 합니다. 즉, 브레이크오프는 가장 최근의 5 바 내에서 발생했습니다. 또한 MACD와 신호 라인이 0 이하로, 과판 상태를 나타내고, 클로즈가 WMA 라인의 위를 나타내고, 상승 추세를 나타냅니다. 위의 조건이 충족되면 긴 지위가 열립니다.

각 거래에 대해 전략은 합리적인 스톱 로스 및 수익을 취하는 수준을 계산합니다. 스톱 로스는 가장 최근의 3 바의 가장 낮은 수준으로 설정됩니다. 이윤을 취하는 것은 엔트리 가격과 스톱 로스와 엔트리 가격 사이의 거리의 4 배로 설정됩니다.

핵심은 전략이 최대 합리적인 위험을 기반으로 특정 포지션 크기를 계산한다는 것입니다. 파라미터 인 자본_ 위험은 각 거래에 손실 될 수있는 총 자본의 비율을 설정합니다. USD에서의 포지션 크기는 중지 손실 범위에 따라 계산됩니다. 그 다음 실행에 대한 계약으로 변환됩니다.

각 거래의 위험은 총 자본의 1% 내에서 통제되며, 이 때문에 인출을 효과적으로 제어할 수 있습니다. 동시에 높은 수익 목표가 더 높은 수익을 제공합니다.

장점

  • 리스크 통제가 우선이고, 거래별 리스크는 통제 가능
  • 자본 사용량을 극대화하기 위해 최적화된 포지션 사이즈
  • 스톱 로스 전략은 인출을 효과적으로 제어합니다.
  • 합리적인 수익은 높은 수익 잠재력을 제공합니다.

위험 과 개선

  • MACD가 뒤떨어지고 빠른 트렌드 변화를 놓칠 수 있습니다.
  • 부적절한 스톱 로스 또는 수익 취득 설정은 수익을 줄이거나 위험을 증가시킬 수 있습니다.
  • 높은 거래 빈도는 거래 비용을 증가시킬 수 있습니다.

개선 가능점:

  • 추세를 결정하기 위해 다른 지표를 포함하고 MACD 지연을 피하십시오.
  • 더 유연하게 스톱 로스 및 수익 알고리즘을 최적화
  • 거래 비용을 줄이기 위해 거래 주파수를 느리게

요약

이 전략은 MACD를 사용하여 트렌드 방향을 결정하고 최적화된 포지션 사이징으로 거래의 우선 순위로 위험 통제를 취합니다. 열쇠는 장기적으로 안정적인 이익을 얻을 수 있는 위험 통제 및 포지션 사이징입니다. 그러나 MACD는 몇 가지 결함이 있으며, 스톱 로스/트레이프 메커니즘은 추가 최적화가 필요합니다. 더 이상 지표 사용, 스톱 로스/트레이프 설정 및 거래 빈도를 줄이는 것이 전략을 더욱 강력하게 만들 수 있습니다.


/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy( "McDonalds ", shorttitle="Ur Lovin' It", initial_capital=10000, default_qty_type=strategy.cash, currency=currency.USD )

capital_risk    = input( 1.0, "% capital risk per trade" ) / 100
r_exit          = input( 4.0, "Take Profit in 'R'" )
wma_length      = input( 150, 'WMA Bias Length' )

[macd_line, signal_line, hist ] = macd(close, 12, 26, 9)

w_line = wma( close, wma_length )

golong = barssince(crossover(macd_line, signal_line)) <= 5 and ( macd_line < 0 and signal_line < 0 ) and ( close > w_line ) and strategy.opentrades == 0

float stop = na
float tp = na

// For a stop, use a recent low 
stop := golong ? lowest(low, 3)[1] : stop[1]
range = abs(close - stop)
tp := golong ? close + (r_exit * range) : tp[1]


// This is the bit that calculates how much size to use so we only lose 1% of the `strategy.equity`
how_much_willing_to_lose = strategy.equity * capital_risk
// Spread the risk across the stop range 
position_size_in_usd = how_much_willing_to_lose / (range / close)
// Sized specified in base contract
position_size_in_contracts = position_size_in_usd / close

// Enter the position
if golong
    strategy.entry("long", strategy.long, qty=position_size_in_contracts)
    strategy.exit("long exit","long", stop=stop, limit=tp)

// experimental exit strategy
// hist_strength = hist >= 0 ? ( hist[1] < hist ? 'strong' : 'weak') : ( hist[1] < hist ? 'weak' : 'strong' )
// if hist < 0 and hist_strength == 'strong' and falling( hist, 8 )
//     strategy.close("long")


plot( strategy.equity,  color=strategy.equity > 10000 ? color.green : color.red, linewidth=2 )

더 많은