리소스 로딩... 로딩...

다단계 동적 MACD 트렌드 52주 높은/저한 연장 분석 시스템

저자:차오장, 날짜: 2024-12-27 14:27:51
태그:MACDMAEMASMARSI

img

전반적인 설명

이 전략은 여러 시간 프레임에서 MACD 크로스 신호를 동적 지원 및 저항 수준과 결합하여 52 주 최고 및 최저치를 기반으로합니다. 이 전략은 수익을 보장하면서 위험을 효과적으로 제어하기 위해 동적 스톱 로스 메커니즘을 사용합니다.

전략 원칙

이 전략은 다음과 같은 핵심 논리에 기반합니다.

  1. 엔트리 신호는 주간 및 일일 MACD 황금 십자가로 확인되며 두 시간 프레임에서 상승 신호가 필요합니다.
  2. 출구 신호는 매일 MACD 죽음의 교차로 인해 발생하며, 하락 신호가 나타나면 포지션은 닫습니다.
  3. 동적 스톱 로스는 출구 신호가 발사되는 날의 최저 가격으로 설정됩니다.
  4. 52주 최고/하위 라인은 사용자가 선택한 계산 기준 (최고/하위 또는 종료 가격) 을 기반으로 동적으로 생성되며 중요한 기준 수준으로 오른쪽으로 확장됩니다.
  5. 이 전략은 5%의 위치 관리를 사용하며 거래당 1 통화 단위의 거래 비용을 사용합니다.

전략적 장점

  1. 멀티 타임프레임 확인: 주간 및 일일 수준에서 MACD 신호의 공명으로 잘못된 브레이크를 필터하여 거래 정확도를 향상시킵니다.
  2. 역동적 지지/저항: 52주 높은/저하선은 중요한 심리적 가격 참조를 제공하여 트렌드 강도를 평가하는 데 도움이됩니다.
  3. 종합적인 위험 관리: 동적 스톱 로스 메커니즘은 수익을 보호하기 위해 시장 변동에 따라 조정됩니다.
  4. 높은 시각화: 명확한 그래픽 인터페이스는 주요 가격 수준과 신호를 표시하여 이해와 작업을 용이하게합니다.
  5. 체계적인 거래: 엄격한 입출입 규칙은 감정적 간섭을 피하고 거래 객관성을 향상시킵니다.

전략 위험

  1. 범위 시장에 적합하지 않습니다. 측면 시장에서 MACD 크로스오버가 자주 발생하면 과도한 잘못된 신호가 발생할 수 있습니다.
  2. 지연 위험: MACD 지표의 고유 한 지연은 최적의 입점 지점을 놓칠 수 있습니다.
  3. 자금 관리 위험: 고정 비율 포지셔닝은 특정 시장 조건에서 유연성이 부족할 수 있습니다.
  4. 시장 격차 위험: 큰 격차로 인해 실제 스톱 로스 가격은 예상 수준보다 훨씬 낮을 수 있습니다.
  5. 매개 변수 최적화 위험: 과도한 최적화는 과도한 적합성 문제로 이어질 수 있습니다.

전략 최적화 방향

  1. 부피 가격 관계 분석을 포함: 기존 MACD 신호에 부피 확인을 추가하는 것을 고려하십시오.
  2. 포지션 관리 최적화: 더 유연한 포지션 관리 메커니즘을 설계하고 시장 변동에 동적으로 조정하십시오.
  3. 스톱 로스 메커니즘을 강화합니다. 후속 스톱 또는 ATR 기반 동적 스톱을 추가하는 것을 고려하십시오.
  4. 시장 환경 필터링을 추가합니다. 트렌드 강도 지표를 도입하고, 강한 트렌드 시장에서만 포지션을 개설합니다.
  5. 신호 필터링 메커니즘 개발: 잘못된 신호를 줄이기 위해 더 엄격한 신호 확인 조건을 설계합니다.

요약

이 전략은 다중 타임프레임 MACD 크로스 신호를 52주간의 최고와 최저에 기반한 동적 지원 및 저항 라인과 결합하여 완전한 트렌드-추천 거래 시스템을 구축합니다. 이 전략의 장점은 신호 확인 신뢰성과 포괄적인 위험 통제에 있습니다. 시장 및 지연 위험에 주의를 기울여야만 합니다. 지속적인 최적화 및 개선을 통해이 전략은 트렌딩 시장에서 안정적인 수익을 달성하는 것을 약속합니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("MACD Bitcoin strategy con 52W High/Low (linee estese)", overlay=true)

// === MACD SETTINGS ===
fastLength = 12
slowLength = 26
signalSmoothing = 9

// Funzione per ottenere i valori MACD
getMACD(source, timeframe) =>
    [macdLine, signalLine, _] = ta.macd(source, fastLength, slowLength, signalSmoothing)
    [macdLine, signalLine]

// Valori MACD Settimanali
[macdWeekly, signalWeekly] = request.security(syminfo.tickerid, "W", getMACD(close, "W"), lookahead=barmerge.lookahead_on)

// Valori MACD Giornalieri
[macdDaily, signalDaily] = getMACD(close, "D")

// Variabile per lo stop loss
var float lowOfSignalCandle = na

// Condizione per l'ingresso
longConditionWeekly = ta.crossover(macdWeekly, signalWeekly)
exitConditionDaily = ta.crossunder(macdDaily, signalDaily)

// Imposta Stop Loss sulla candela giornaliera
if (exitConditionDaily)
    lowOfSignalCandle := low

// Condizione di ingresso nel trade
enterTradeCondition = macdWeekly > signalWeekly and ta.crossover(macdDaily, signalDaily)

if (enterTradeCondition)
    strategy.entry("MACD Long", strategy.long)

if (not na(lowOfSignalCandle))
    strategy.exit("Stop Loss", "MACD Long", stop=lowOfSignalCandle)

if (strategy.position_size == 0)
    lowOfSignalCandle := na

// // === 52 WEEK HIGH/LOW SETTINGS ===
// // Input per selezionare tra Highs/Lows o Close
// high_low_close = input.string(defval="Highs/Lows", title="Base 52 week values on candle:", options=["Highs/Lows", "Close"])

// // Calcolo dei valori delle 52 settimane
// weekly_hh = request.security(syminfo.tickerid, "W", ta.highest(high, 52), lookahead=barmerge.lookahead_on)
// weekly_ll = request.security(syminfo.tickerid, "W", ta.lowest(low, 52), lookahead=barmerge.lookahead_on)
// weekly_hc = request.security(syminfo.tickerid, "W", ta.highest(close, 52), lookahead=barmerge.lookahead_on)
// weekly_lc = request.security(syminfo.tickerid, "W", ta.lowest(close, 52), lookahead=barmerge.lookahead_on)

// // Selezione dei valori in base all'input
// high_plot = high_low_close == "Highs/Lows" ? weekly_hh : weekly_hc
// low_plot = high_low_close == "Highs/Lows" ? weekly_ll : weekly_lc

// // === LINEE ORIZZONTALI ESTESE FINO AL PREZZO ATTUALE ===
// var line highLine = na
// var line lowLine = na

// // Linea Orizzontale per il 52W High
// if (na(highLine))
//     highLine := line.new(bar_index, high_plot, bar_index + 1, high_plot, color=color.green, width=2, style=line.style_dashed, extend=extend.right)
// else
//     line.set_y1(highLine, high_plot)
//     line.set_y2(highLine, high_plot)

// // Linea Orizzontale per il 52W Low
// if (na(lowLine))
//     lowLine := line.new(bar_index, low_plot, bar_index + 1, low_plot, color=color.red, width=2, style=line.style_dashed, extend=extend.right)
// else
//     line.set_y1(lowLine, low_plot)
//     line.set_y2(lowLine, low_plot)

// // Etichette per le linee orizzontali
// var label highLabel = na
// var label lowLabel = na

// if (na(highLabel))
//     highLabel := label.new(bar_index, high_plot, "52W High", color=color.green, textcolor=color.white, style=label.style_label_down, size=size.small)
// else
//     label.set_y(highLabel, high_plot)
//     label.set_x(highLabel, bar_index)

// if (na(lowLabel))
//     lowLabel := label.new(bar_index, low_plot, "52W Low", color=color.red, textcolor=color.white, style=label.style_label_up, size=size.small)
// else
//     label.set_y(lowLabel, low_plot)
//     label.set_x(lowLabel, bar_index)

// // Tracciamento delle Linee Estese
// plot(high_plot, title="52W High", color=color.green, style=plot.style_linebr)
// plot(low_plot, title="52W Low", color=color.red, style=plot.style_linebr)


관련

더 많은