삼수가 슈퍼트렌드 MACD 전략

저자:차오장, 날짜: 2024-03-11 11:24:20
태그:

img

전반적인 설명

이 전략은 슈퍼 트렌드 지표와 MACD 지표를 결합하여 수익을 위해 작은 트렌드를 포착합니다. 현재 시장 트렌드를 결정하기 위해 슈퍼 트렌드 지표와 출입 및 출출의 보조 조건으로 MACD 지표를 사용합니다. 전략 논리는 명확하고 이해하기 쉽고 구현됩니다.

전략 원칙

  1. ta.supertrend 함수를 사용하여 ATR 기간 및 곱셈 인자를 위한 매개 변수와 함께 SuperTrend 지표를 계산합니다.
  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")

더 많은