슈퍼트렌드와 MACD를 기반으로 한 위험관리 전략


생성 날짜: 2024-03-11 11:24:20 마지막으로 수정됨: 2024-03-11 11:24:20
복사: 0 클릭수: 699
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

슈퍼트렌드와 MACD를 기반으로 한 위험관리 전략

개요

이 전략은 슈퍼 트렌드 지표와 MACD 지표를 결합하여 작은 트렌드를 포착하여 수익을 얻습니다. 전략은 슈퍼 트렌드 지표를 사용하여 현재 시장 추세를 판단하고, MACD 지표를 입점과 출구에 대한 보조 조건으로 사용합니다. 전략 논리는 명확하고 이해하기 쉽고 구현됩니다.

전략 원칙

  1. ta.supertrend 함수를 사용하여 슈퍼 트렌드 지표를 계산하고, ATR 주기 및 곱하기 인자를 매개합니다.
  2. 슈퍼 트렌드 지표의 방향 변화에 따라 다공계 트렌드를 판단합니다. 방향이 0보다 크거나 0보다 작을 때 상승 추세로 간주되며, 반대로 하향 추세로 간주됩니다.
  3. request.security 함수를 사용하여 MACD 라인, 신호 라인 및 기둥 도표를 포함하는 30 분 주기 MACD 지표 값을 얻습니다.
  4. 상승 추세에서, MACD 기둥이 0보다 크다면, 더 많은 포지션을 열고, 이전 빈 포지션을 평행한다.
  5. 하향 추세에서, MACD 기둥이 0보다 작다면, 공백 포지션을 열고, 이전 과잉 포지션을 청산한다.

우위 분석

  1. 트렌드 추적과 동력 지표가 결합되어 다양한 시장 상황에 더 잘 적응할 수 있습니다.
  2. 더 긴 주기의 MACD 지표를 보조 조건으로 사용하여, 일부 가짜 신호를 효과적으로 필터링 할 수 있습니다.
  3. 이 전략의 논리는 간단하고, 이해하기 쉽고, 실행하기 쉬우며, 초보자들도 배울 수 있습니다.
  4. 전략의 매개 변수는 조정할 수 있으며, 다른 시장과 품종에 따라 최적화할 수 있다.

위험 분석

  1. 전략: 불안정한 시장에서 거래 신호가 많이 발생하여 거래 빈도와 높은 슬라이드 포인트 비용이 발생할 수 있습니다.
  2. 슈퍼 트렌드 지표는 변수에 민감하며, 다른 변수 설정은 다른 결과를 얻을 수 있다.
  3. MACD 지표는 가격과 오차가 발생할 수 있으며, 이는 잘못된 거래 신호로 이어질 수 있다.
  4. 전략은 중단 조치를 취하지 않고, 지속적 약점이나 갑작스러운 사건으로 인해 더 큰 위험을 감수할 수 있습니다.

최적화 방향

  1. 더 많은 필터링 조건을 추가하는 것이 고려될 수 있습니다. 예를 들어, 가격이 중요한 지원 또는 저항 지점을 돌파하거나 거래량 변화를 통해 신호의 신뢰성을 높일 수 있습니다.
  2. 흔들리는 시장의 경우, 더 짧은 주기의 MACD 지표 또는 흔들리는 시장에 적합한 다른 지표를 사용하여 추세를 판단 할 수 있습니다.
  3. 단편 거래의 최대 위험을 제어하기 위해 고정 점수 중지, 이동 중지 등의 손실 조치를 추가 할 수 있습니다.
  4. 다른 시장과 품종에 대한 파라미터 최적화를 통해 가장 적합한 파라미터 조합을 찾을 수 있다.

요약하다

이 전략은 슈퍼 트렌드 지표와 MACD 지표를 결합하여 작은 트렌드를 포착하면서도 트렌드의 지속성을 고려하여 보다 포괄적이고 균형 잡힌 전략이다. 전략의 장점은 논리적으로 명확하고 이해하기 쉽고 구현되며, 더 긴 주기 MACD 지표를 보조 조건으로 사용하여 일부 가짜 신호를 효과적으로 필터링 할 수 있다. 그러나 전략에는 약간의 위험이 있습니다.

전략 소스 코드
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Samsuga supertrend", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)


atrPeriod = input.int(7,    "ATR Length", minval = 1)
factor =    input.float(1.0, "Factor",     minval = 0.01, step = 0.01)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

supertrend := barstate.isfirst ? na : supertrend
upTrend =    plot(direction <= 0 ? supertrend : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend =  plot(direction <= 0 ? na : supertrend, "Down Trend", color = color.red,   style = plot.style_linebr)
bodyMiddle = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)
longcondition = direction[1] > direction 
shortCondition = direction[1] < direction 

macdp1 = 3
macdp2=10
macdp3=6

[macdLine, signalLine, histLine] =request.security(symbol = syminfo.tickerid, timeframe = "30",expression = ta.macd(close,macdp1,macdp2,macdp3),lookahead=barmerge.lookahead_on)
// plot(macdLine,   title = "MACD",   color = #2962FF)
// plot(signalLine, title = "Signal", color = #FF6D00)
// 8, 21, 5
// 8,13,9
// 12,26,9
//  1--> 3, 17, 5
// 3, 10, 16
// log.info(str.tostring(syminfo.tickerid)+str.tostring(histLine[0]))
//  /////////----------------METHOD 1-----------------////////////////
// if(longcondition)
//     if(strategy.opentrades>0)
//         strategy.close("Long","Prev Exit", immediately = true)
//     if( histLine[0] > 0.1)
//         strategy.entry(id= "Long", direction=strategy.long,  comment = "update long")

    
// else if(shortCondition and strategy.openprofit<=0.1) 
//     strategy.close("Long",comment = "Close",immediately = true)
//  /////////----------------METHOD 2-----------------////////////////
// if(longcondition)
//     if(histLine[0] > 0)
//         strategy.entry(id= "Long", direction=strategy.long,  comment = "update long" )
//         strategy.exit("Long", loss = close*0.2)


    
// else if(shortCondition ) 
//     strategy.close("Long",comment = "Close",immediately = true)
//  /////////----------------METHOD 3-----------------////////////////
// log.info(str.tostring(syminfo.tickerid)+str.tostring(histLine[0]))
if(longcondition)
    if(histLine[0] > 0)    
        strategy.close("Short",comment = "E-S", alert_message = "E-S",disable_alert = true)
        strategy.entry(id= "Long", direction=strategy.long,  comment = "L",alert_message = "L")
else if(shortCondition) 
    if(histLine[0] < 0)    
        strategy.close("Long",comment = "E-L",alert_message = "E-L",disable_alert = true)
        strategy.entry(id= "Short", direction=strategy.short,  comment = "S",alert_message = "S")