이동 평균 크로스오버 전략은 이동 평균을 기반으로 하는 거래 전략이다. 빠른 이동 평균과 느린 이동 평균의 크로스오버를 구매 및 판매 신호로 사용합니다. 빠른 MA가 아래에서 느린 MA보다 높을 때 구매 신호가 생성됩니다. 빠른 MA가 위에서 느린 MA보다 낮을 때 판매 신호가 생성됩니다.
이 전략은 sma 함수를 사용하여 빠른 MA와 느린 MA로 지정된 기간의 간단한 이동 평균을 계산합니다. 기본 빠른 MA 기간은 18 일이며 매개 변수를 통해 조정 할 수 있습니다.
빠른 MA가 아래에서 느린 MA보다 높을 때, 크로스 언더 함수는 크로스 오버 신호를 감지하고 구매 신호를 생성합니다. 빠른 MA가 위에서 느린 MA보다 낮을 때, 크로스 오버 함수는 크로스 오버 신호를 감지하고 판매 신호를 생성합니다.
이 전략은 트랙 신호와 출구 신호를 통해 자동화 된 거래를 실현합니다. 빠른 MA가 느린 MA보다 높을 때 긴 엔트리가 발생하며 빠른 MA가 느린 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)