멀티 타임프레임 이동 평균 회전 거래 전략

저자:차오장, 날짜: 2024-02-29 11:20:28
태그:

img

전반적인 설명

이 전략은 멀티 타임프레임 이동 평균 접근 방식을 채택하고 있으며, 장기 이동 평균을 사용하여 주요 트렌드 방향을 결정하고 단기 이동 평균을 사용하여 단기 트렌드 방향을 결정합니다. 장기 트렌드가 단기 트렌드와 조화를 이루면 그에 따라 포지션을 취합니다. 단기 이동 평균이 장기 이동 평균의 근방으로 되돌아 갈 때 반대의 방향으로 거래 기회를 제시하는 단기 보정을 나타냅니다. 이 전략은 중장기 시간 프레임에서 트렌딩 주식에 가장 잘 작동합니다.

전략 논리

이 전략은 장기 트렌드 방향을 결정하기 위해 200일 간직 이동 평균 (SMA) 을 사용하며, 단기 트렌드 방향을 결정하기 위해 10일 SMA를 사용한다. 가격이 200일 SMA 이상과 10일 SMA 이하로 닫을 때, 단기 인하와 함께 상향 장기 트렌드를 신호하며, 구매 기회를 제시한다. 가격이 200일 SMA 이하로 닫고 10일 SMA 이상으로 닫을 때, 단기 반등과 함께 하향 장기 트렌드를 신호하며, 판매 기회를 제시한다.

특히, 다음 조건이 충족될 때, 긴 엔트리는 시작됩니다: 200일 SMA> 클로즈 AND 10일 SMA < 클로즈. 다음 조건이 충족되면 짧은 엔트리는 시작됩니다: 200일 SMA < 클로즈 AND 10일 SMA > 클로즈.

진입 후, 10%의 스톱 로스 메커니즘이 구현됩니다. 입시 가격에서 리트레이크가 10%를 초과하면 포지션은 중단됩니다. 또한, i_lowerClose 옵션이 활성화되면, 종료하기 전에 낮은 클로스를 기다립니다. 스톱 로스의 과도한 민감성을 피합니다.

이점 분석

이 전략은 멀티 타임프레임 이동 평균을 결합하여 중장기 트렌드 방향을 파악하는 데 높은 확률을 제공합니다. 단기 SMA가 장기 SMA로 되돌아 갈 때 괜찮은 입시 타이밍을 제공합니다. 단일 이동 평균 시스템과 비교하면 단기 수정에 걸리는 확률이 감소합니다.

이 전략에 포함된 위험은 잘 정의되고 제한됩니다. 10%의 스톱 로스 비율은 최대 손실 크기를 제한합니다. 또한 시간 범위 필터는 지정된 시간대에 거래를 피합니다.

위험 분석

이 전략에 걸리는 위험이 여전히 있습니다. 단기 보정이 너무 오래 지속되거나 복귀 진폭이 너무 커지면, 중단 손실이 발생하여 부적절한 시간에 강제 출출출이 발생할 수 있습니다. 이것은 손실 위험을 도입합니다.

이 전략의 적응력은 거래 도구에 제한되어 있습니다. 높은 변동성과 장기 교정 기간을 가진 주식에서이 전략은 저기능 성과를 내는 조기 중단 손실에 도달하는 경향이 있습니다.

시장 전체의 주요 교정, 예를 들어 금융 위기, 이 전략은 큰 손실을 입을 수 있습니다. 이 같은 시기에 수익성이 거의 없습니다.

최적화 방향

더 많은 이동 평균 시스템을 도입하여 복수 필터링 메커니즘을 형성할 수 있습니다. 예를 들어, 50 일간의 SMA를 추가하면 가격이 50 일간의 SMA와 200 일간의 SMA 사이에있을 때만 입상 지위가 고려됩니다. 이것은 열악한 트렌드 특성을 가진 주식을 추가로 필터합니다.

동적 스톱 로스 메커니즘을 구현할 수 있다. 구체적으로, 엔트리 후, 스톱 로스 비율은 고정된 10% 대신 관찰된 변동성에 따라 조정된다. 이것은 하드 스톱 로스의 조기 트리거를 피한다.

시장 조건을 측정하는 다른 지표도 포함될 수 있습니다. 예를 들어 MACD, MACD가 시장의 분리를 나타낼 때, 손실을 피하기 위해이 전략은 일시적으로 비활성화 될 수 있습니다. 전략을 켜고 끄는 시장 타이밍 메커니즘을 추가합니다.

결론

결론적으로 이것은 전형적인 멀티 타임프레임 이동 평균 전략이다. 단기 이동 평균에 의해 밝혀진 단기 인회 기회를 활용하면서 장기 이동 평균에 의해 표시되는 중장기 트렌드 방향을 활용합니다. 위험 요소는 정의되고 잘 제한됩니다. 추가 필터, 적응적 스톱 로스 및 시장 타이밍 메커니즘과 같은 추가 개선은 안정성을 향상시킬 수 있습니다.


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © irfanp056
// @version=5

strategy("Simple Pullback Strategy", 
     overlay=true) // Interactive Brokers rate

// Get user input
i_ma1           = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2           = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose    = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Get indicator values
ma1 = ta.sma(close, i_ma1)
ma2 = ta.sma(close, i_ma2)

// Check filter(s)
f_dateFilter = true

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
sellCondition   = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])
stopDistance    = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice       = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition   = strategy.position_size > 0 and stopDistance > i_stopPercent

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)

더 많은