SMA 크로스오버 전략


생성 날짜: 2024-03-28 17:50:00 마지막으로 수정됨: 2024-03-28 17:50:00
복사: 1 클릭수: 587
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

SMA 크로스오버 전략

개요

이 전략은 간단한 SMA 평균선 교차 전략이다. 이 전략은 두 개의 다른 주기의 간단한 이동 평균을 사용한다. 빠른 선이 아래에서 위로 슬로우 라인을 통과할 때 더 많은 포지션을 열고, 빠른 선이 위에서 아래로 슬로우 라인을 통과할 때 평소 포지션을 한다. 이 전략은 두 개의 평행 선의 길이를 사용자 정의 할 수 있으며, 재측정의 시작 및 종료 날짜를 지정할 수 있다.

이 전략의 주요 아이디어는 평행선의 트렌드 특성과 평행선이 교차하는 신호 특성을 활용하여 거래하는 것입니다. 빠른 선이 느린 선 위에있을 때, 현재 상승 추세에 있음을 나타내는 다단위 포지션을 보유해야합니다. 빠른 선이 느린 선 아래에있을 때, 현재 하향 추세에 있음을 나타내는 공백 포지션을 관찰해야합니다.

전략 원칙

  1. 두 개의 다른 주기의 SMA를 계산하고, 주기 길이를 사용자 정의할 수 있다.
  2. 현재 재검토 시간 창 안에 있는지 판단하고, 그렇지 않다면 어떠한 동작도 하지 않는다.
  3. 만약 빠른 선이 아래에서 위로 느린 선을 통과한다면, 더 많은 돈을 벌 수 있다.
  4. 만약 빠른 선이 위에서 아래로 느린 선을 통과한다면, 모든 다단위 포지션을 평행한다.
  5. 다른 경우에는 빈 창고 관람, 어떤 작업도 수행하지 않습니다.

우위 분석

  1. 간단하고 이해하기 쉽고, 논리적으로 명확하며, 초보자들도 학습하고 사용할 수 있습니다.
  2. 평균선은 널리 사용되는 기술적 지표로, 트렌드 특성이 더 뚜렷하여 현재 시장 추세를 더 잘 반영할 수 있다.
  3. 평행선 교차는 트렌드 트래킹의 고전적인 신호로, 트렌드의 변화를 빠르게 포착할 수 있다.
  4. 평균선 주기 및 회수 시간 창을 사용자 정의할 수 있으며, 유연성이 강하다.
  5. 유행성이 강한 품종과 시간 주기에는 적합하다.

위험 분석

  1. 평균선에는 약간의 지연성이 있으며, 시장의 변동이 큰 경우, 트렌드가 반복되면, 과도한 거래 수와 수수료 비용이 증가하는 등 교차 신호가 자주 발생할 수 있습니다.
  2. 이 전략은 단방향 상승세를 포착할 뿐이며, 동요와 단방향 하락세를 포착할 수 없다.
  3. 평균선 변수의 선택은 다른 품종과 시간 주기에 따라 최적화되어야 하며, 다른 변수는 큰 차이를 나타낼 수 있다.
  4. 이 전략은 아무런 손해배상 조치도 없는 것으로 시장이 급격히 변동할 때 더 큰 회수 위험을 감수할 수 있다.

최적화 방향

  1. 한 거래의 최대 손실을 제어하기 위해 ATR 기반의 이동식 중단과 같은 적절한 손해 방지 조치를 추가하는 것을 고려할 수 있습니다.
  2. 거래량, 변동성 등과 같은 필터링 조건을 추가하여 가짜 신호를 필터링하는 것을 고려할 수 있습니다.
  3. 예를 들어, 유전 알고리즘과 같은 지능형 알고리즘을 사용하여 최적의 변수 조합을 찾기 위해 변수를 최적화하는 것을 고려할 수 있습니다.
  4. 다른 기술 지표나 거래 신호를 MACD, RSI 등과 결합하여 전략의 신뢰성과 효과를 높이는 것을 고려할 수 있습니다.

요약하다

SMA 평선 교차 전략은 초보자 학습 및 사용에 적합한 간단하고 이해하기 쉬운 클래식 트렌드 추적 전략입니다. 그것은 평선의 트렌드 특성과 평선 교차의 신호 특성을 활용하여 시장 추세의 변화를 신속하게 포착 할 수 있습니다. 그러나 이 전략에는 지연성, 빈번한 거래, 중지 부족 등과 같은 몇 가지 제한과 위험이 있습니다. 따라서 실제 응용에서는 전략의 안정성과 수익성을 높이기 위해 상황에 따라 적절한 최적화 및 개선이 필요합니다.

전략 소스 코드
/*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