멀티 타임프레임 MACD 전략

저자:차오장, 날짜: 2023-11-28 15:33:35
태그:

img

전반적인 설명

멀티 타임프레임 MACD 전략 (Multi Timeframe MACD Strategy) 은 여러 시간 프레임에서 MACD 지표를 사용하여 트렌드를 추적하는 양적 거래 전략이다. 이 전략은 가격 트렌드가 다른 기간 (3 분, 5 분, 15 분, 30 분) 에 걸쳐 일관성 있는지 판단하여 거래 신호를 생성합니다.

전략 논리

이 전략의 핵심 논리는 여러 시간 프레임 (3 분, 5 분, 15 분, 30 분) 에서 MACD 지표 교차 상황을 계산하는 것입니다. 첫째, MACD 지표는 각 시간 프레임에 계산되어 그 시간 프레임에서 가격 트렌드 (상향 또는 하향) 을 판단합니다. 그 다음 여러 시간 프레임에서 가격 트렌드가 포괄적으로 판단됩니다.

  1. 모든 시간 프레임에서 가격이 상승하면 구매 신호가 생성됩니다.
  2. 가격이 모든 시간 프레임에 걸쳐 떨어지면 판매 신호가 생성됩니다.

시간 프레임에 따라 트렌드를 판단함으로써, 단기 시장 소음이 효과적으로 필터링 될 수 있으며, 거래 신호가 더 신뢰할 수 있습니다.

장점

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 시간 프레임에 걸쳐 트렌드를 감지하면 소음을 필터링하고 거래 신호를 더 신뢰할 수 있습니다.
  2. MACD 지표 매개 변수는 다른 시장 환경에 맞게 사용자 정의 할 수 있습니다.
  3. 종합적인 판단을 위한 시간 프레임은 독립적으로 거래 규칙을 정의하기 위해 유연하게 구성될 수 있습니다.

위험 과 해결책

이 전략은 또한 다음과 같은 위험을 가지고 있습니다.

  1. 모든 시간 프레임에 걸쳐 트렌드 일관성을 판단 할 때, 지역 반전은 놓칠 수 있습니다.
  2. MACD 매개 변수 설정이 잘못되면 거래 신호 성능이 떨어질 수 있습니다.

대응 솔루션:

  1. 판단 규칙은 어느 정도 완화되어 개별 시간 프레임에 대한 가격 반전이 더 많은 기회를 잡을 수 있습니다.
  2. MACD 매개 변수는 다른 시장에 따라 조정되어야 거래 신호가 현재 추세에 더 적합 할 수 있습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 더 이상 최적화 될 수 있습니다.

  1. 최적의 조합을 찾기 위해 종합적인 판단에 필요한 시간 프레임의 수를 늘리거나 줄이십시오.
  2. 다른 MACD 지표 매개 변수 설정을 테스트합니다.
  3. 실제 백테스팅 결과를 바탕으로 특정 입출입 규칙을 조정합니다.

요약

멀티 타임프레임 MACD 전략은 시간 프레임에 걸쳐 가격 움직임을 감지하기 위해 MACD 지표의 트렌드 판단 능력을 활용하여 소음을 효과적으로 필터링하고 신호 품질을 향상시킬 수 있습니다. 이 전략은 매개 변수 조정 및 규칙 최적화를 통해 다양한 제품 및 시장 환경에 유연하게 적응 할 수 있으며 강력한 실용성을 가지고 있습니다.


/*backtest
start: 2023-10-28 00:00:00
end: 2023-11-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("[RichG] Easy MTF Strategy", overlay=false)

TF_1_time = input("3", "Timeframe 1")
TF_2_time = input("5", "Timeframe 2")
TF_3_time = input("15", "Timeframe 3")
TF_4_time = input("30", "Timeframe 4")

fastLen = input(title="Fast Length",  defval=12)
slowLen = input(title="Slow Length",  defval=26)
sigLen  = input(title="Signal Length",  defval=9)
[macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen)

width = 5
upcolor = green
downcolor = red
neutralcolor = blue
linestyle = line

TF_1 = request.security(syminfo.tickerid, TF_1_time, open) < request.security(syminfo.tickerid, TF_1_time, close) ? true:false
TF_1_color = TF_1 ? upcolor:downcolor

TF_2 = request.security(syminfo.tickerid, TF_2_time, open) < request.security(syminfo.tickerid, TF_2_time, close) ? true:false
TF_2_color = TF_2 ? upcolor:downcolor

TF_3 = request.security(syminfo.tickerid, TF_3_time, open) < request.security(syminfo.tickerid, TF_3_time, close) ? true:false
TF_3_color = TF_3 ? upcolor:downcolor

TF_4 = request.security(syminfo.tickerid, TF_4_time, open) < request.security(syminfo.tickerid, TF_4_time, close) ? true:false
TF_4_color = TF_4 ? upcolor:downcolor

TF_global = TF_1 and TF_2 and TF_3 and TF_4 
TF_global_bear = TF_1 == false and TF_2 == false and TF_3 == false and TF_4 == false
TF_global_color = TF_global ? green : TF_global_bear ? red : white
TF_trigger_width = TF_global ? 6 : width

plot(1, style=linestyle, linewidth=width, color=TF_1_color)
plot(5, style=linestyle, linewidth=width, color=TF_2_color)
plot(10, style=linestyle, linewidth=width, color=TF_3_color)
plot(15, style=linestyle, linewidth=width, color=TF_4_color)
plot(25, style=linestyle, linewidth=4, color=TF_global_color)    

exitCondition_Long = TF_global_bear
exitCondition_Short = TF_global

longCondition = TF_global
if (longCondition)
    strategy.entry("MTF_Long", strategy.long)

shortCondition = TF_global_bear
if (shortCondition)
    strategy.entry("MTF_Short", strategy.short)
    
strategy.close("MTF_Long", when=exitCondition_Long)    
strategy.close("MTF_Short", when=exitCondition_Short)

더 많은