SMA 크로스오버 전략


생성 날짜: 2023-11-08 11:36:51 마지막으로 수정됨: 2023-11-08 11:36:51
복사: 1 클릭수: 646
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

SMA 크로스오버 전략

개요

이 전략은 빠른 이동 평균과 느린 이동 평균의 교차 원리에 기초하여 거래 신호를 생성한다. 빠른 이동 평균이 아래에서 느린 이동 평균을 통과하면 구매 신호를 생성한다. 빠른 이동 평균이 위에서 아래에서 느린 이동 평균을 통과하면 판매 신호를 생성한다.

원칙

이 전략은 sma 함수를 사용하여 빠른 이동 평균과 느린 이동 평균을 계산한다. fast_SMA는 빠른 이동 평균이며, 주기 길이는 fast_SMA_input; slow_SMA는 느린 이동 평균이며, 주기 길이는 slow_SMA_input이다.

전략은 크로스 및 크로스 언더 함수를 사용하여 빠른 이동 평균과 느린 이동 평균의 교차 상황을 판단합니다. 빠른 이동 평균 위에 느린 이동 평균을 통과하면 LONG 변수가 참이며 구매 신호를 발생시킵니다. 빠른 이동 평균 아래에 느린 이동 평균을 통과하면 SHORT 변수가 참이며 판매 신호를 발생시킵니다.

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 전략은 간단하고 이해하기 쉽고 실행이 가능합니다.
  2. 사용자 정의 이동 평균 주기, 다른 시장 환경에 적용.
  3. 일부 시장 소음을 필터링하여 신뢰할 수 있는 거래 신호를 생성할 수 있다.
  4. 트렌드의 시작과 전환을 동시에 포착할 수 있습니다.

위험 분석

이 전략에는 다음과 같은 위험도 있습니다.

  1. 만약 잘못 설정되면 거래 신호가 너무 많이 발생하여 거래가 자주 발생합니다.
  2. 이 시장을 둘러싼 많은 신호들이 무효가 될 수 있습니다.
  3. 트렌드가 얼마나 지속될지 판단할 수 없기 때문에, 너무 일찍 반전될 수도 있습니다.

위험 관리 방법:

  1. 이동 평균 변수를 합리적으로 설정하여 필터링 효과와 감수성을 균형 잡습니다.
  2. 트렌드 지표 필터링과 결합하여 무효 신호
  3. 스톱로스를 설정하고 단편적 손실을 통제합니다.

최적화 방향

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

  1. 필터링 조건을 추가하여 이동 평균을 돌파할 때 거래량이나 변동성 지표를 검사하여 가짜 돌파를 피하십시오.
  2. 트렌드 지표와 결합하여 트렌드의 방향과 강도를 식별합니다.
  3. 기계 학습 모델을 추가하여 이동 평균 변수를 자동으로 최적화합니다.
  4. 지원 저항점, 브린 띠 등 기술 지표와 함께 거래 구역을 매핑하여 진입 정확도를 높인다.

요약하다

이 전략은 이동 평균의 장점을 활용하여 간단하고 효과적으로 거래 신호를 생성한다. 약간의 위험이 있지만, 매개 변수 최적화, 필터링 조건을 추가하는 등의 방법으로 개선할 수 있다. 이동 평균 교차 전략은 더 많은 연구와 응용이 가치가 있다.

전략 소스 코드
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-13 00:00:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@author Jacques Grobler
//
//                  SIMPLE CROSS OVER BOT
//                  =====================
//
// This is a simple example of how to set up a strategy to go long or short
// If you make any modifications or have any suggestions, let me know
// When using this script, every section marked back testing should be 
// uncommented in order to use for back testing, same goes for using the script portion

///////////////////////////////////////////////////////////////////////////////////////
//// INTRO
//// -----
// BACKTESTING
//@version=4
strategy(title="SimpleCrossOver_Bot_V1_Backtester", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0, commission_type=strategy.commission.percent, commission_value=0.1)

// SIGNALS
//study(title="SimpleCrossOver_Bot_V1_Signals", overlay = true)

///////////////////////////////////////////////////////////////////////////////////////
//// INPUTS
//// ------
// BACKTESTING
dateSart_Year = input(2018, title="Start Year", minval=2000)
dateSart_Month = input(1, title="Start Month", minval=1, maxval=12)
dateSart_Day = input(1, title="Start Day", minval=1, maxval=31)
dateEnd_Year = input(2019, title="End Year", minval=2000)
dateEnd_Month = input(1, title="End Month", minval=1, maxval=12)
dateEnd_Day = input(1, title="End Day", minval=1, maxval=31)

// BACKTESTING AND SIGNALS
fast_SMA_input = input(7, title="SMA Fast")
slow_SMA_input = input(25, title="SMA Slow")

///////////////////////////////////////////////////////////////////////////////////////
//// INDICATORS
//// ----------
fast_SMA = sma(close, fast_SMA_input)
slow_SMA = sma(close, slow_SMA_input)

///////////////////////////////////////////////////////////////////////////////////////
//// STRATEGY
//// --------
LONG = cross(fast_SMA, slow_SMA) and fast_SMA > slow_SMA
stratLONG() => crossover(fast_SMA, slow_SMA)
SHORT = cross(fast_SMA, slow_SMA) and fast_SMA < slow_SMA
stratSHORT() => crossunder(fast_SMA, slow_SMA)

///////////////////////////////////////////////////////////////////////////////////////
//// TRIGGERS
//// --------
// BACKTESTING
testPeriodStart = timestamp(dateSart_Year, dateSart_Month, dateSart_Day, 0, 0)
testPeriodStop = timestamp(dateEnd_Year, dateEnd_Month, dateEnd_Day, 0, 0)
timecondition = true

strategy.entry(id="LONG", long = true, when=timecondition and stratLONG())
strategy.entry(id="SHORT", long = false, when=timecondition and stratSHORT())

// SIGNALS
//alertcondition(LONG, title="LONG")
//alertcondition(SHORT, title="SHORT")

///////////////////////////////////////////////////////////////////////////////////////
//// PLOTS
//// -----
// BACKTESTING AND SIGNALS
plot(fast_SMA, color=green, linewidth=1)
plot(slow_SMA, color=yellow, linewidth=1)
plotshape(LONG, title="LONG", style=shape.triangleup, text="LONG", location=location.belowbar, size=size.small, color=green)
plotshape(SHORT, title="SHORT", style=shape.triangledown, text="SHORT", location=location.abovebar, size=size.small, color=red)