MacD200 일간 이동 평균 신호 교차 거래 전략


생성 날짜: 2024-01-03 11:50:56 마지막으로 수정됨: 2024-01-03 11:50:56
복사: 0 클릭수: 930
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

MacD200 일간 이동 평균 신호 교차 거래 전략

개요

이 거래 전략은 MACD 지표의 200 일 이동 평균을 기반으로 신호 교차 작업을 수행하는 정량화 전략이다. 그것은 MACD 지표의 시장 구매 신호를 판단하는 것과 200 일 이동 평균의 시장 추세를 판단하는 이중 기능을 결합하여 더 정확한 입시 및 출구 시기를 탐색하는 것을 목표로 한다.

전략 원칙

이 전략의 핵심은 두 가지입니다.

  1. MACD 지표의 빠르고 느린 선이 교차하면 구매 및 판매 신호가 발생한다. 빠른 선이 하향에서 느린 선을 돌파하면 구매 신호가 발생한다. 빠른 선이 상향에서 하향으로 느린 선을 돌파하면 판매 신호가 발생한다.

  2. 200일 이동 평균선은 시장의 전반적인 움직임을 판단한다. 가격은 200일 평균선 위에 다단시장이 있고, 아래에 공백시장이 있다. 오직 다단시장이 구매 신호를 생성할 때만 구매하고 공백시장이 판매 신호를 생성할 때만 판매한다.

이 두 가지 요인에 따라, 전략의 구체적인 거래 규칙은 다음과 같습니다.

MACD 패스트 라인이 MACD 슬로 라인을 아래로 돌파하고, 기둥 도표는 마이너스이며, 가격이 200일 이동 평균선보다 높을 때, 매입을 한다. MACD 패스트 라인이 MACD 슬로 라인을 아래로 돌파하고, 기둥 도표는 긍정적이며, 가격이 200일 이동 평균선보다 낮을 때, 매매를 한다.

전략적 이점

  1. 이중 판단은 전략의 안정성과 성공률을 높인다. MACD는 거래 신호를 판단하고, 200일평균은 시장의 추세를 판단하고, 이중 판단은 불확실성이 높은 거래 신호를 필터링할 수 있다.

  2. 이 전략은 추세가 강한 시장에서 높은 수익을 가져올 수 있습니다. 특히 황소 시장에서 가격 상승 기회를 빠르게 잡을 수 있습니다.

  3. MACD 지표는 충격적인 정리 단계에서 벗어나는 데에도 민감합니다. 가격이 장기간의 충격적인 정리 과정을 마치고 트렌드 상황에 들어간 후, 이 전략은 새로운 트렌드 방향을 빠르게 잡을 수 있습니다.

위험 분석

  1. 이 정책은 파라미터 설정에 민감하다. MACD 지표 파라미터가 잘못 설정되면 오류 입력과 오류 출력이 발생할 수 있다.

  2. 트렌드 전환점 근처에서 MACD 지표의 매매 신호는 더 많은 오류를 발생시킨다. 이 때 이 전략의 수익은 더 큰 회전이 발생할 수 있다.

  3. 가격이 장기적으로 수평조정 상태에 있을 때, 이 전략은 명확한 추세 방향을 결정할 수 없으며, 이로 인해 손익이익의 변동이 커지고, 회수 시간이 길어진다.

전략 최적화 방향

  1. 다양한 파라미터 조합을 테스트하여 더 정확한 MACD 파라미터를 찾아서 신호를 생성할 수 있다.

  2. 전략의 신뢰성을 높이기 위해 RSI, KD 등과 같은 다른 기술 지표를 추가하는 것이 고려 될 수 있습니다.

  3. 최대 회수량을 제어하기 위해 스톱로스를 설정할 수 있다. 가격에서 큰 역폭이 발생했을 때 즉시 스톱로스를 출전하여 스톱로스가 확장되는 것을 효과적으로 방지할 수 있다.

요약하다

MACD200 일간 평균선 교차 전략은 트렌드 판단과 거래 신호 판단의 이중 기능을 결합하여 수익 가능성을 효과적으로 향상시킬 수 있으며, 비교적 안정적이고 신뢰할 수 있는 양적 거래 전략이다. 그러나 이 전략은 파라미터와 시장 상태에 대한 약간의 의존도도도 있으며, 계속적인 최적화 테스트를 통해 전략의 안정적인 수익성을 더욱 향상시킬 수 있다.[/

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © x11joe

//@version=4
//This strategy is based on a youtube strategy that suggested I do this...so I did!

strategy(title="MacD 200 Day Moving Average Signal Crossover Strategy", overlay=false, precision=2,commission_value=0.26, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

moving_avg_length = input(title="Moving Average Length", type=input.integer, defval=200)
moving_avg = sma(close,moving_avg_length)

moving_avg_normalized = close - moving_avg
plot(moving_avg_normalized, title="Moving Average Normalized", style=plot.style_line, color=color.orange,linewidth=3)

plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)

if(macd>signal and macd<0 and close>moving_avg)
    strategy.entry("buy",strategy.long)

if(close<moving_avg and macd<signal and macd>0)
    strategy.entry("sell",strategy.short)