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

비트코인 모멘텀 후속 정지 전략

저자:차오장, 날짜: 2024-03-08 16:20:16
태그:

img

전략 개요

비트코인 모멘텀 트레일링 스톱 전략 (Bitcoin Momentum Trailing Stop Strategy) 은 동적으로 조정된 스톱 로스를 통해 하향 위험을 완화하면서 비트코인의 상승 추세를 포착하기 위해 고안된 장기적 모멘텀 기반 전략이다. 이 전략은 매우 하향 변동성 (high bearish volatility) 도중 스톱 로스를 강화하고 지속적인 상승 동력 (bullish momentum) 도중 스톱 로스를 느슨하게 하여 수익을 올릴 수 있도록 하는 간단하면서도 똑똑한 모멘텀 트레일링 스톱 기법을 사용한다. 비트코인 가격이 20주 지수 지수 이동 평균 (EMA) 이상인 한 비트코인 가격이 계속 투자되고 가격이 그 밑에 닫을 때 빠져나가는 전략이다. 이 전략은 하나의 포지션만 거래하고 단축하지 않지만 무엇을 하고 있는지 알고 있다면 원하는 대로 쉽게 조정할 수 있다.

전략 원칙

  1. 비트코인의 현재 가격은 더 높은 시간 프레임 EMA (20주 EMA) 이상 거래되어야 합니다.
  2. 비트코인은 ATR의 1.5배 이상의 최근 스윙 고수 마이너스 현재 바의 저수 또는 일일 20 EMA보다 낮은 일일 폐쇄로 정의되는 주의 상태 (caution state) 에 있지 않아야합니다.
  3. 스톱-러스는 최근 스윙 최고점인 ATR 1점을 빼거나 ATR의 20% (예: 0.2 ATR) 를 빼면 주의 상태로 설정됩니다.
  4. 다음 바에 있는 출구는 가격이 스톱 로스 이하로 닫히면 열립니다.

이 전략은 주간 차트와 20주 EMA를 트렌드 필터로 사용하며, 가격이 20주 EMA보다 높을 때만 진입한다. 5주기 ATR은 트렌드가 강할 때 트레일링 스톱의 거리를 동적으로 조정하는 데 사용되며, 이는 주의 상태에서 강화된다. 주의 상태는 두 가지 조건으로 정의된다: 최근 스윙 고위에서 현재 최저까지의 거리는 ATR의 1.5배 이상, 또는 매일 폐쇄는 매일 20 EMA 이하이다. 이 동적 스톱-러스 조정 접근법은 트렌드가 강할 때 더 큰 인회 공간을 허용하고 트렌드가 약해질 때 빠르게 수익을 잠금한다.

전략적 장점

  1. 단순성과 효율성: 전략 논리는 간단하고 명확하며 이해하기 쉽고 구현하기 쉬우며 비트코인의 주요 상승 추세를 효과적으로 포착합니다.

  2. 동적 스톱 로스: 스톱 로스 포지션은 시장의 변동성 조건에 따라 동적으로 조정되며, 수익을 실행시키는 동시에 마감량을 제어합니다. 이는 상대적으로 균형 잡힌 그리고 견고한 스톱 로스 관리 접근법입니다.

  3. 트렌드 필터링: 더 높은 수준의 이동 평균 (20 주 EMA) 을 필터링함으로써 전략은 명확한 상승 추세 동안만 입력되며 전략의 승률과 위험/이익 비율을 크게 향상시킵니다.

  4. 포지션 사이즈: 기본 설정으로는 전체 포지션으로 거래하여 자본 활용도를 극대화하고 자본 효율성을 향상시킵니다. 포지션 크기도 유연하게 조정 할 수 있습니다.

  5. 폭넓은 적용 가능성: 전략 논리는 다른 자산과 시장에 쉽게 포트될 수 있으며 일반화 가능성이 좋습니다.

전략 위험

  1. 매개 변수 적용 가능성: 전략 매개 변수는 비트코인 시장의 특성에 따라 설정되며, 다른 시장에 적용 가능성은 검증되어야 하며, 다른 자산에 대한 매개 변수 최적화가 필요할 수 있습니다.

  2. 트렌드 식별: 전략은 주로 높은 수준의 EMA와 ATR와 같은 기술적 지표에 의존하여 트렌드를 판단합니다. 이는 시장 조건을 파악하는 근본 분석만큼 포괄적이지 않으며 시장 전환점에 오류가 발생할 수 있습니다.

  3. 스톱 로스 위험: 동적 스톱 로스는 위험을 어느 정도 조절할 수 있지만, 극심한 시장 조건 (비폭 하락이나 급격한 심층 변동 등) 에서 여전히 상당한 마감이 발생할 수 있습니다. 또한, 스톱 로스 지위는 상대적으로 좁아서 불안정한 시장에서 빈번한 스톱 아웃으로 이어질 수 있습니다.

  4. 이윤 잠재력: 전략은 일방적 상승 추세에서 잘 수행되지만 범주 시장에서 빈번한 스톱 손실의 딜레마에 빠질 가능성이 높으며 전체 수익 잠재력을 제한할 수 있습니다.

  5. 라이브 성능: 전략은 백테스팅에서 잘 수행되지만 라이브 거래는 미끄러짐 및 수수료와 같은 요인에 영향을 받으며 실제 결과는 이론적 수익과 다를 수 있으므로 신중한 평가가 필요합니다.

최적화 방향

  1. 트렌드 결정: 트렌드 식별의 정확성과 신뢰성을 향상시키기 위해 더 높은 수준의 이동 평균, 변동성 지표 또는 기본 데이터 도입을 고려하십시오.

  2. 동적 매개 변수: 스톱 로스 포지션과 ATR 매개 변수는 다른 시장 상태에 적응하기 위해 가격이나 변동성과 관련된 동적 조정 메커니즘을 도입함으로써 더 이상 최적화 할 수 있습니다.

  3. 포지션 크기: 트렌드 강도와 변동성 등의 지표에 따라 포지션 크기를 동적으로 조정하고, 트렌드가 강할 때 포지션 크기를 증가시키고, 높은 변동성 동안 포지션 크기를 줄여 위험/이익 비율을 향상시킵니다.

  4. 장기/단기 메커니즘: 전략의 적용 가능성과 잠재적 수익성을 확대하기 위해 하부 시장에서 단기 판매 메커니즘을 도입합니다. 그러나 입시 및 스톱 로스 규칙은 재설계되어야합니다.

  5. 전략 조합: 이 전략을 다른 전략 (평균 역전 등) 과 결합하여 서로의 강점을 보완하고 전략 안정성과 수익성을 향상시킵니다.

전략 요약

비트코인 모멘텀 트레일링 스톱 전략 (Bitcoin Momentum Trailing Stop Strategy) 은 비트코인의 강력한 상승 추세를 파악하는 간단하고 효과적인 모멘텀 전략으로, 더 높은 수준의 이동 평균과 ATR 지표를 사용하여 동적으로 조정된 스톱 로스를 통해 하향 위험을 제어합니다. 전략 논리는 명확하고, 구현하고 최적화하는 것이 쉽고, 안정적인 수익을 추구하는 중장기 투자자에게 적합합니다. 그러나 전체 이익 잠재력이 제한되어있는 범위 시장에서 평균적으로 성능을 발휘합니다. 이 전략은 기본 템플릿으로 사용될 수 있으며, 투자자는 트렌드 결정, 매개 변수 최적화, 포지션 관리, 장기/단기 메커니즘과 같은 영역에서의 자신의 필요와 경험을 기반으로 더 정밀화하거나 다른 전략과 결합하여 더 높은 위험/이익 비율을 달성할 수 있습니다. 그러나 전략의 실시간 성능이 백테스팅 결과와 다를 수 있으므로 신중한 위험 평가와 통제가 필요합니다. 모든 전략은 역사 데이터에 대한 철저한 백테스팅 및 사용 전에 앞으로 테스트되어야하며 시장 변화에 따라 역동적으로 조정되어야합니다.


/*backtest
start: 2023-03-08 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
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/
// © ZenAndTheArtOfTrading
// ------------------------------------------------------------------------------------------------------
// System Concept: Capture as much Bitcoin upside volatility as possible while side-stepping downside volatility.
//  Entry Rule #1: Bitcoin must be trading above higher-timeframe EMA (Weekly 20 EMA)
//  Entry Rule #2: Bitcoin must not be in 'caution' condition
//      -> Caution: True if BTC's recent swing high minus its current low is > 1.5x ATR OR close < Daily EMA
//  Trailing Stop: Stop is trailed 1 ATR from recent swing high, OR 20% of ATR if in caution condition
// ------------------------------------------------------------------------------------------------------
// @version=5
strategy("Bitcoin Momentum Strategy", 
     overlay=true)

// Get user input
var const string    G_STRATEGY  = "Strategy Entry Settings"
var const string    G_EXIT      = "Strategy Exit Settings"
var const string    G_FILTER    = "Strategy Filters"
i_HigherTimeframe   = input.timeframe("W", "Higher Timeframe", group=G_STRATEGY, tooltip="Higher timeframe MA reference")
i_EmaLength         = input.int(20, "EMA Length", group=G_STRATEGY, tooltip="Moving average period length")
i_AtrLength         = input.int(5, "ATR Length", group=G_STRATEGY, tooltip="ATR period length")
i_TrailStopSource   = input.source(low, "Trail Stop Source", group=G_EXIT, tooltip="Lowest price source for trailing stop")
i_TrailStopLookback = input.int(7, "Trail Stop Lookback", group=G_EXIT, tooltip="How many bars to look back for trailing price source")
i_TrailStopMulti    = input.float(0.2, "Trailing Stop Ratchet Multiplier", group=G_EXIT, tooltip="When momentum is yellow (caution), shrink ATR distance for TS by this much")
i_StartTime         = input(timestamp("01 Jan 2000 13:30 +0000"), "Start Filter", group=G_FILTER, tooltip="Start date & time to begin searching for setups")
i_EndTime           = input(timestamp("1 Jan 2099 19:30 +0000"), "End Filter", group=G_FILTER, tooltip="End date & time to stop searching for setups")

// Define custom security function which does not repaint
RequestSecurity_NonRP(_market, _res, _exp) => request.security(_market, _res, _exp[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

// Define date filter check
DateFilter(int start, int end) => time >= start and time <= end

// Get indicator values
float   atrValue    = ta.atr(i_AtrLength)
float   emaValue    = ta.ema(close, i_EmaLength)
float   htfEmaValue = RequestSecurity_NonRP(syminfo.tickerid, i_HigherTimeframe, emaValue)
float   marketPrice = close

// Check for bullishness / bearish volatility caution
bool    isBullish   = marketPrice > htfEmaValue
bool    isCaution   = isBullish and (ta.highest(high, 7) - low > (atrValue * 1.5) or marketPrice < emaValue) 

// Set momentum color
color bgCol = color.red
if isBullish[1]
    bgCol := color.green
if isCaution[1]
    bgCol := color.orange

// Handle strategy entry, and reset trailing stop
var float trailStop = na
if isBullish and strategy.position_size == 0 and not isCaution
    strategy.entry(id="Buy", direction=strategy.long)
    trailStop := na

// Update trailing stop
float temp_trailStop = ta.highest(i_TrailStopSource, i_TrailStopLookback) - (isCaution[1] ? atrValue * i_TrailStopMulti : atrValue)
if strategy.position_size > 0
    if temp_trailStop > trailStop or na(trailStop)
        trailStop := temp_trailStop

// Handle strategy exit
if (close < trailStop or close < htfEmaValue) and barstate.isconfirmed
    strategy.close("Buy", comment="Sell")

// Draw trailing stop, HTF EMA and color-coded momentum indicator
plotshape(true, color=bgCol, style=shape.square, location=location.bottom, size=size.auto, title="Momentum Strength")
plot(htfEmaValue, color=close > htfEmaValue ? color.green : color.red, linewidth=2, title="HTF EMA")
plot(emaValue, color=close > emaValue ? color.green : color.red, linewidth=1, title="CTF EMA")
plot(strategy.position_size[1] > 0 ? trailStop : na, style=plot.style_linebr, color=color.red, title="Stop Loss")

더 많은