추세를 해소하는 MACD 전략


생성 날짜: 2023-10-30 17:08:16 마지막으로 수정됨: 2023-10-30 17:08:16
복사: 1 클릭수: 641
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

추세를 해소하는 MACD 전략

개요

이 전략은 주식 가격의 추세를 제거하여 MACD 지표의 형태를 더 명확하게 볼 수 있습니다. DEMA 단선과 DEMA 느린선을 계산하여 MACD 직선과 신호선을 얻어서 그들의 교차를 판단하여 거래 신호를 생성합니다. 이 전략은 또한 달, 날짜의 조건 필터링과 상쇄 평정 논리를 결합하여 보다 완전한 전략 시스템을 형성합니다.

전략 원칙

우선, 가격의 EMA를 계산하여 가격의 트렌드를 제거하고, 트렌드가 제거된 후에 가격을 EMA 니다. 그리고는 EMA를 기반으로 각각 빠른 DEMA, 느린 DEMA 및 MACD 직선을 계산합니다. 그 중, 빠른 DEMA 계산 방법은: 먼저 빠른 EMA1을 계산하고, EMA1의 EMA2를 계산하고, DEMA = 2를 계산합니다.*EMA1-EMA2) ᄂ 느린선 DEMA와 신호선의 계산은 동일하다 ᄂ MACD 직선 ((빠른선 DEMA - 느린선 DEMA) 과 신호선을 얻은 후, MACD 직선 상의 신호선을 통과하면 구매 신호가 발생하고, MACD 직선 아래의 신호선을 통과하면 판매 신호가 발생한다. 마지막으로, 달, 날짜 조건과 결합된 신호를 필터링하고, 스톱 로직을 설정한다.

이 전략의 핵심 논리는 다음과 같습니다.

  1. 가격 동향을 제거하고 MACD 지표를 더 명확하게 볼 수 있습니다.

  2. DEMA 고속선, 느린선, MACD 직선 및 신호선을 계산

  3. MACD 직선과 신호선이 교차하면 거래 신호가 발생

  4. 날짜와 달을 필터링하세요

  5. 정지 논리 설정

우위 분석

이 전략의 주요 장점은 다음과 같습니다.

  1. 가격 트렌드를 제거하여 MACD 지표의 교차 상황을 더 명확하게 볼 수 있으며, 트렌드 오해를 피할 수 있습니다.

  2. DEMA 알고리즘을 사용하여 MACD 지표를 계산하여 소음을 필터링하여 신호를 더 명확하게 할 수 있습니다.

  3. 날짜와 달을 합쳐서 필터링을 하면 불필요한 거래를 줄일 수 있습니다.

  4. 스톱 로직을 설정하여 적시에 스톱 로직을 설정하여 위험을 제어할 수 있다.

  5. 교차를 사용하여 신호를 생성하여 잘못된 거래를 줄일 수 있습니다.

  6. 전체적으로, 이 전략은 추세 제거, DEMA 계산 및 조건 필터링과 결합되어 보다 명확하고 신뢰할 수 있는 거래 신호를 생성할 수 있다.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 추세를 제거한 후 MACD 교차 신호가 증가할 수 있으며, 실체 검증이 필요합니다.

  2. DEMA 알고리즘은 일부 잡음을 필터링했지만, 지표 계산은 여전히 더 많은 가짜 신호를 나타낼 수 있다.

  3. 날짜와 달 필터링 조건이 너무 엄격하여 거래 기회를 놓칠 수 있습니다.

  4. 손해배상 위치 설정은 합리적인지를 고려해야 하며, 너무 느슨하면 위험이 증가하고, 너무 엄격하면 자주 손해가 발생한다.

  5. 이 전략은 주로 MACD 지표에 의존하며, 시장이 이 지표를 사용하기에 적합하지 않으면 효과가 영향을 받을 수 있다.

  6. 전략 파라미터를 최적화할 수 있는 여지가 많으며, 피드백과 실 디스크를 통해 더 많은 테스트가 필요합니다.

대책:

  1. 다른 지표 확인을 추가하여 잘못된 신호를 피하십시오.

  2. 날짜 필터링 조건을 최적화하고 적절히 완화하십시오.

  3. 세심한 테스트와 최적화된 스톱포트

  4. 트렌드를 판단하는 메커니즘에 참여하여 역동적인 거래를 피하십시오.

  5. 전체적인 재검토와 최적화 매개 변수, 안정성을 향상한다.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 다른 가격 평균을 테스트하여 더 적합한 대안 EMA의 라인 타입을 찾습니다.

  2. 다른 변수 조합을 시도하여 MACD의 빠른 라인 길이, 느린 라인 길이 및 신호 라인 길이를 최적화하십시오.

  3. 양력 지표와 같은 보조 판단 지표를 증가시켜 잘못된 신호를 피한다.

  4. 손해 중지 전략을 최적화하여 합리적인 이동식 손해 중지 또는 고정 단위 손해 중지 설정을하십시오.

  5. 날짜, 달 필터링 조건을 최적화하여 더 유연하게 만들 수 있습니다.

  6. 트렌드 판단을 추가하고 역전작전을 피하십시오.

  7. 전체적인 변수 최적화를 통해 전략의 안정성을 높여라.

  8. 전략의 장기적 효과를 확인하기 위해 더 긴 시간 주기로 재검토하십시오.

  9. 실체 검증을 수행하고 실체 상황에 따라 정책 매개 변수를 추가 수정하십시오.

요약하다

전반적으로, 이 전략은 트렌드를 제거하는 아이디어를 채택하고, DEMA 형태의 MACD 지표를 계산하고, 날짜 필터링과 결합하여 거래 신호를 생성하는 간단한, 그러나 실행 가능한 전략이다. 그것의 가장 큰 장점은 MACD 형태를 명확하게 볼 수 있고, 가격 트렌드에 영향을 받지 않도록 판단 할 수 있다는 것이다. 그러나 이 전략에는 또한 약간의 위험이 있으며, 매개 변수 최적화 및 위험 제어 수단의 추가가 필요합니다. 이 전략은 실제적으로 적용할 수 있다.

전략 소스 코드
/*backtest
start: 2022-10-23 00:00:00
end: 2023-10-29 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "Trendless MACD  Strategy",shorttitle="MACD-T Strategy",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,commission_type=strategy.commission.percent,commission_value=0.01,initial_capital=100000)



maperiod=input(9)
ema=ema(close,maperiod)


fastmacd = input(12,title='MACD Fast  Line Length')
slowmacd = input(26,title='MACD Slow Line Length')
signalmacd = input(9,title='Signal Line Length')

macdslowline1 = ema(ema,slowmacd)
macdslowline2 = ema(macdslowline1,slowmacd)
DEMAslow = ((2 * macdslowline1) - macdslowline2 )

macdfastline1 = ema(ema,fastmacd)
macdfastline2 = ema(macdfastline1,fastmacd)
DEMAfast = ((2 * macdfastline1) - macdfastline2)

MACDLine = (DEMAfast - DEMAslow)

SignalLine1 = ema(MACDLine, signalmacd)
SignalLine2 = ema(SignalLine1, signalmacd)
SignalLine = ((2 * SignalLine1) - SignalLine2 )


MACDSignal = MACDLine-SignalLine


colorbar= MACDSignal>0?green:red

plot(MACDSignal,color=colorbar,style=columns,title='Histogram',histbase=0)
p1 = plot(MACDLine,color=blue,title='MACDLine')
p2=plot(SignalLine,color=red,title="SignalLine")
fill(p1,p2,color=blue)


longCond =  crossover(MACDLine,SignalLine) 

shortCond =  crossunder(MACDLine,SignalLine) 




monthfrom =input(1)
monthuntil =input(12)
dayfrom=input(1)
dayuntil=input(31)

yearfrom= input(2018)
yearuntil=input(2021)

if (  longCond   ) 
    strategy.entry("LONG", strategy.long, stop=close, oca_name="TREND",  comment="LONG")
    
else
    strategy.cancel(id="LONG")
    



if ( shortCond  ) 

    strategy.entry("SHORT", strategy.short,stop=close, oca_name="TREND", comment="SHORT")
else
    strategy.cancel(id="SHORT")