SMA 이동 평균 크로스오버 전략

저자:차오장, 날짜: 2024-03-28 17:50:00
태그:

img

전반적인 설명

이 전략은 간단한 SMA 이동 평균 크로스오버 전략이다. 그것은 서로 다른 길이의 두 가지 간단한 이동 평균 (SMA) 을 사용합니다. 빠른 MA가 느린 MA보다 높을 때, 그것은 긴 지위에 진입합니다. 빠른 MA가 느린 MA보다 낮을 때, 그것은 긴 지위를 닫습니다. 두 MAs의 길이가 사용자 정의 될 수 있으며, 백테스팅을위한 시작 및 종료 날짜도 있습니다.

이 전략의 주요 아이디어는 트레이딩을 위해 이동 평균의 트렌드 특성과 MA 크로스오버의 신호 특성을 활용하는 것입니다. 빠른 MA가 느린 MA보다 높을 때 상승 추세를 나타내고 긴 포지션을 보유해야합니다. 빠른 MA가 느린 MA보다 낮을 때 하락 추세를 나타내고 포지션을 보유해서는 안됩니다.

전략 원칙

  1. 서로 다른 길이의 두 개의 SMA를 계산해 맞춤화할 수 있습니다.
  2. 현재 시간이 백테스팅 창 안에 있는지 확인합니다. 그렇지 않으면 아무 것도 하지 마십시오.
  3. 빠른 MA가 느린 MA를 넘으면 긴 포지션을 입력합니다.
  4. 빠른 MA가 느린 MA보다 낮으면 모든 긴 포지션을 닫습니다.
  5. 다른 경우, 가만히 앉아 아무것도 하지 마세요.

이점 분석

  1. 단순하고 이해하기 쉽고, 명확한 논리로, 초보자 학습 및 사용에 적합합니다.
  2. 이동 평균은 현재 시장의 흐름을 잘 반영할 수 있는 명백한 경향 특성을 가진 널리 사용되는 기술 지표입니다.
  3. MA 크로스오버는 트렌드 변화를 빠르게 파악할 수 있는 전형적인 트렌드 추적 신호입니다.
  4. MA의 길이와 백테스팅 창은 사용자 정의 할 수 있으며 좋은 유연성을 제공합니다.
  5. 강력한 트렌드 특성을 가진 기기와 시간 프레임에 적합합니다.

위험 분석

  1. 이동 평균은 일정 차이를 가지고 있습니다. 시장이 크게 변동하고 추세가 자주 역전되면 과도한 거래와 거래 비용을 증가시키는 빈번한 크로스오버 신호가 발생할 수 있습니다.
  2. 이 전략은 상승 추세를 잡을 수 있을 뿐이며, 범위와 추세에서 무력합니다.
  3. MA 매개 변수 선택은 다른 도구와 시간 프레임에 최적화되어야 합니다. 다른 매개 변수들은 성능에서 큰 차이를 가질 수 있습니다.
  4. 이 전략에는 스톱 로스 조치가 없으며 시장이 급격히 변동할 때 더 큰 마감 위험에 직면 할 수 있습니다.

최적화 방향

  1. 단일 거래의 최대 손실을 제어하기 위해 ATR 기반 트래일링 스톱과 같은 적절한 스톱 로스 조치를 추가하는 것을 고려하십시오.
  2. 일부 잘못된 신호를 필터링하기 위해 거래량과 변동성과 같은 필터링 조건을 추가하는 것을 고려하십시오.
  3. 최적의 매개 변수 조합을 찾기 위해 유전 알고리즘이나 다른 지능 알고리즘을 사용하는 것과 같은 매개 변수를 최적화하는 것을 고려하십시오.
  4. 다른 기술적 지표 또는 거래 신호를 MA 크로스오버와 결합하는 것을 고려하십시오. 예를 들어 MACD와 RSI, 전략의 신뢰성과 효과를 향상시키기 위해.

결론

SMA 이동 평균 크로스오버 전략은 초보자도 익히고 사용할 수 있는 간단하고 이해하기 쉽고 고전적이고 실용적인 트렌드 추후 전략이다. 이동 평균의 트렌드 특성 및 MA 크로스오버의 신호 특성을 활용하여 시장 트렌드의 변화를 빠르게 파악한다. 그러나 이 전략에는 지연, 빈번한 거래 및 스톱 로스 부족과 같은 일부 제한과 위험이 있다. 따라서 실제 응용에서는 전략의 안정성과 수익성을 높이기 위해 특정 조건에 따라 적절히 최적화 및 개선되어야 한다.


/*backtest
start: 2023-03-22 00:00:00
end: 2024-03-27 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/
// © j0secyn

//@version=5
strategy("MA Cross", overlay=true, margin_long=100, margin_short=100, default_qty_value=100, default_qty_type=strategy.percent_of_equity, initial_capital=10000)

// === INPUT BACKTEST RANGE ===
fromDay   = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear  = input.int(defval = 2018,title = "From Year", minval = 1970)
thruDay   = input.int(defval = 30, title = "Thru Day", minval = 1, maxval = 31)
thruMonth = input.int(defval = 9, title = "Thru Month", minval = 1, maxval = 12)
thruYear  = input.int(defval = 2024, title = "Thru Year", minval = 1970)

slow_ma_length = input.int(defval = 100, title = "Slow MA lenght")
fast_ma_length = input.int(defval = 30, title = "Fast MA lenght")

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)            // backtest start  window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)            // backtest finish window
window()  => true

// === LOGIC ===
crossOv = ta.crossover(ta.sma(close, fast_ma_length), ta.sma(close, slow_ma_length))
crossUn = ta.crossunder(ta.sma(close, fast_ma_length), ta.sma(close, slow_ma_length))

// === EXECUTION ===
// strategy.entry("L", strategy.long, when = window() and crossOv)        // enter long when "within window of time" AND crossover
// strategy.close("L", when = window() and crossUn)                       // exits long when "within window of time" AND crossunder         
strategy.entry("L", strategy.long, when = window() and crossOv)        // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and crossUn)                       // exits long when "within window of time" AND crossunder         

더 많은