이동 평균에 기초한 트렌드 역전 전략

저자:차오장, 날짜: 2024-02-21 17:03:31
태그:

img

전반적인 설명

이 전략의 주요 아이디어는 장기 트렌드의 방향으로 단기적 인 인기를 거래하는 것입니다. 구체적으로, 200 일 간 간단한 이동 평균은 장기 트렌드의 방향을 결정하는 데 사용되며, 10 일 간 간단한 이동 평균은 단기적 트렌드의 방향을 결정하는 데 사용됩니다. 가격이 200 일 라인을 넘으면 황소 시장입니다. 가격이 200 일 라인을 넘으면 곰 시장입니다. 황소 시장에서 가격이 10 일 라인에 떨어지면 길게 가십시오. 곰 시장에서 가격이 10 일 라인에 상승하면 짧게 가십시오.

전략 논리

이 전략은 시장 추세를 결정하기 위해 200일 간직 이동 평균과 10일 간직 이동 평균을 사용합니다. 가격이 200일 선을 넘으면 황소 시장에 진입하는 것으로 간주됩니다. 가격이 200일 선을 넘으면 곰 시장에 진입하는 것으로 간주됩니다. 황소 시장에서 가격이 10일 선을 넘으면 단기적인 보정으로 나타납니다. 이 시점에서 장기적인 상승 추세를 계속하는 것을 목표로 장기적으로 이동하십시오. 곰 시장에서 가격이 10일 선을 넘으면 단기적인 리바운드를 겪는 것을 의미합니다. 이 시점에서 장기적인 하락 추세를 계속하는 것을 목표로 단기적으로 이동하십시오.

특히, 다음 조건이 충족되면 시장에 진입하기 위해 긴 시장을 선택하십시오: 가격은 200일 라인 이상, 가격은 10일 라인 이하이며 이전 포지션이 없었습니다. 다음 조건이 충족되면 시장에서 빠져 나가는 포지션을 닫습니다: 가격은 10일 라인 이상이며 이전 긴 포지션이있었습니다. 큰 손실을 방지하기 위해 FAILSAFE 스톱 로스를 설정합니다. 가장 높은 지점에서 리트레이크가 10%를 초과하면 직접 종료 로스를 종료합니다.

이 전략의 거래 논리는 주로 이동 평균의 황금 십자와 죽음의 십자 위에 기반을 두고 있음을 알 수 있습니다. 그것은 전형적인 트렌드 추적 전략에 속하는 길고 짧은 이동 평균에 의해 결정되는 방향으로 트렌드 추적에 기반한 pullbacks와 출구에 기반을두고 있습니다.

이점 분석

이 전략의 가장 큰 장점은 초과 수익을 추구하기 위해 저렴한 트렌드 추적입니다. 구체적인 장점은 다음과 같습니다.

  1. 장기 및 단기 이동 평균의 조합을 사용하여 주요 트렌드 및 부차 트렌드의 방향을 결정하면 중장기 트렌드 기회를 효과적으로 차단하고 단기 시장 움직임에 의해 오해되는 것을 피할 수 있습니다.

  2. 단기적 인퇴를 기반으로 입출하면 입시 비용을 최소화하여 상대적으로 높은 수익 잠재력을 얻을 수 있습니다.

  3. FAILSAFE 스톱 로스 메커니즘은 계좌 자금을 보호하기 위해 단일 손실을 효과적으로 제어할 수 있습니다.

  4. 트렌드 추적 출구를 허용하면 알파 초과 수익을 위한 중장기 트렌드 기회를 완전히 활용할 수 있습니다.

  5. 완전히 자동화된 거래 방법을 채택하면 주관적인 감정적 영향을 피하고 전략을 구현하는 것이 더 쉬워집니다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. 백테스트 과도한 적합성 위험: 실제 시장 조건은 역사적 데이터와 다를 수 있으며 결과적으로 실제 거래 성과가 감소 할 수 있습니다.

  2. 거짓 파업 위험: 이동 평균 근처에서 가격이 반전 될 확률은 상대적으로 크며, 작은 축적 손실로 쉽게 이어질 수 있습니다.

  3. 트렌드 역전 위험: 중장기 트렌드에서 갑작스러운 역전이 일반적이며, 포지션을 보유할 때 상대적으로 큰 손실로 이어질 수 있습니다.

대책은 다음과 같습니다.

  1. 견고성 테스트를 위해 샘플 크기를 늘리고 더 많은 역사 데이터를 사용하여 신뢰할 수있는 결과를 보장하십시오.

  2. 신호 품질을 보장하기 위해 이동 평균 시스템 매개 변수 조합을 조정하여 매개 변수를 최적화합니다.

  3. 너무 민감한 스톱 손실을 피하기 위해 일부 가격 리트레이싱을 허용하도록 적절한 스톱 손실 라인을 넓히십시오.

최적화 방향

이 전략은 다음과 같은 측면에서 더 이상 최적화 될 수 있습니다.

  1. 가짜 브레이크로 인한 불필요한 거래를 효과적으로 줄이기 위해 볼륨 필터링과 같은 필터링 조건을 추가합니다.

  2. KDJ 및 MACD와 같은 다른 지표를 통합하여 콤보 신호를 형성하여 거래 신호 품질을 향상시킵니다.

  3. 다른 보유 기간을 테스트하고 Sharpe 비율 등을 더 향상시키기 위해 수익을 취하고 손실을 멈추는 전략을 최적화하십시오.

  4. 동적으로 시장 조건에 따라 매개 변수를 조정하여 전략이 더 견고하게 될 수 있도록 적응적인 매개 변수 최적화 메커니즘을 형성합니다.

  5. 기계 학습 등을 사용하는 알고리즘 거래 모듈을 추가하여 자동으로 거래 신호를 생성하여 인간의 개입을 줄이십시오.

요약

이 전략의 전반적인 논리는 명확하고 안정적인 알파를 달성하기 위해 중장기 트렌드의 저비용 추적을 위해 구현하기가 쉽습니다. 그러나 견고성을 향상시키기 위해 추가 최적화를 필요로하는 트렌드의 잘못된 쪽에 잡히는 위험도 있습니다. 일반적으로이 전략은 트렌드 추적 관점에서 설계되어 추가 연구와 응용 가치가 있습니다. 적절한 매개 변수 조정으로 좋은 라이브 거래 결과를 만들어야합니다.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 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, 
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=1000, // 100% of balance invested on each trade
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.005) // 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)

더 많은