이동 평균 크로스오버 전략

저자:차오장, 날짜: 2023-11-23 13:38:02
태그:

img

전반적인 설명

이동 평균 크로스오버 전략은 이동 평균을 기반으로 하는 거래 전략이다. 빠른 이동 평균과 느린 이동 평균의 크로스오버를 구매 및 판매 신호로 사용합니다. 빠른 MA가 아래에서 느린 MA보다 높을 때 구매 신호가 생성됩니다. 빠른 MA가 위에서 느린 MA보다 낮을 때 판매 신호가 생성됩니다.

전략 논리

이 전략은 sma 함수를 사용하여 빠른 MA와 느린 MA로 지정된 기간의 간단한 이동 평균을 계산합니다. 기본 빠른 MA 기간은 18 일이며 매개 변수를 통해 조정 할 수 있습니다.

빠른 MA가 아래에서 느린 MA보다 높을 때, 크로스 언더 함수는 크로스 오버 신호를 감지하고 구매 신호를 생성합니다. 빠른 MA가 위에서 느린 MA보다 낮을 때, 크로스 오버 함수는 크로스 오버 신호를 감지하고 판매 신호를 생성합니다.

이 전략은 트랙 신호와 출구 신호를 통해 자동화 된 거래를 실현합니다. 빠른 MA가 느린 MA보다 높을 때 긴 엔트리가 발생하며 빠른 MA가 느린 MA보다 낮을 때 짧은 엔트리가 발생합니다. 대응하는 출구 신호는 역차선에서도 생성됩니다.

이점 분석

  • 이동 평균은 트렌드를 효과적으로 추적하고 가격 동력을 잡을 수 있습니다.
  • MA 전략은 간단하고 직설적이며 이해하기 쉽고 실행하기 쉽습니다.
  • 매개 변수는 다른 시장 환경에 적응하도록 최적화 할 수 있습니다.
  • 이 전략은 수동 개입 없이 거래를 자동화하여 거래 비용을 줄여줍니다.

위험 과 해결책

  • 가격 변동은 여러 가지 잘못된 신호와 높은 거래 빈도를 유발할 수 있습니다. 추가 필터는 이것을 피할 수 있습니다.
  • 매개 변수 최적화는 매우 중요하며 성능에 상당한 영향을 줄 수 있습니다. 백테스트 최적화 및 적응적 MAs는 도움이 될 수 있습니다.
  • 신호가 빠질 위험이 있습니다. 다른 지표가 거래 신호를 필터링하거나 보완하기 위해 결합 될 수 있습니다.
  • 스톱 로스는 단일 트레이드 손실을 조절할 수 있습니다.

최적화 방향

  • 적응적인 이동 평균은 더 나은 추적을 위해 MA 매개 변수를 동적으로 조정하는 데 사용할 수 있습니다.
  • 거래량과 같은 추가 필터는 트렌드가 불분명할 때 잘못된 신호를 피할 수 있습니다.
  • 볼링거 밴드 같은 필터나 추가 조건으로 다른 지표를 결합하면 전략 성능을 향상시킬 수 있습니다.
  • 스톱 로스 전략은 허용 가능한 수준 내에서 단일 거래 손실을 제어합니다.

결론

MA 크로스오버 전략은 고전적이고 간단한 트렌드 추종 전략이다. 주로 MA 크로스오버를 쉬운 논리 및 구현으로 거래 신호로 사용합니다. 매개 변수 조정을 통해 적응 할 수 있습니다. 그러나 오스실레이션과 트렌드 역전, 높은 신호 주파수 등에 대한 민감성과 같은 단점도 있습니다. 필터, 동적 매개 변수, 스톱 로스 등을 통해 개선 할 수 있습니다. 전략은 광범위한 최적화 공간과 방향성을 가지고 있으며 기본적인 양적 거래 전략 중 하나입니다.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-17 04:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "MA Close Strategy", shorttitle = "MA Close",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

MASource   = input(defval = open, title = "MA Source")
MaLength   = input(defval = 18, title = "MA Period", minval = 1)

StartYear = input(2018, "Backtest Start Year")
StartMonth = input(1, "Backtest Start Month")
StartDay = input(1, "Backtest Start Day")
UseStopLoss = input(true,"UseStopLoss")
stopLoss = input(50, title = "Stop loss percentage(0.1%)") 

window() => time >=  timestamp(StartYear, StartMonth, StartDay,00,00) ? true : false

MA = sma(MASource,MaLength)

plot(MA, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)

long = crossunder(MA, close)
short = crossover(MA, close)

if (long)
    strategy.entry("LongId", strategy.long, when = long)
    strategy.exit("ExitLong", from_entry = "LongId", when = short)

if (short)
    strategy.entry("ShortId", strategy.short, when = short)
    strategy.exit("ExitShort", from_entry = "ShortId", when = long)

if (UseStopLoss)
    strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick)
    strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)


더 많은