치밍 더블 시프트 평균 회귀 트레이딩 전략


생성 날짜: 2023-12-15 16:51:23 마지막으로 수정됨: 2023-12-15 16:51:23
복사: 0 클릭수: 368
1
집중하다
1166
수행원

치밍 더블 시프트 평균 회귀 트레이딩 전략

개요

HYE Mean Reversion SMA 전략은 간단한 이동 평균과 상대적으로 강한 지표를 이용한 평균 회귀 거래 전략이다. 이 전략은 가격이 이동 평균에서 일정 정도 떨어져 있을 때, RSI 지표 필터링 신호와 결합하여 구매 및 판매 신호를 생성하는 짧은 거래 전략에 속한다.

전략 원칙

이 전략은 주로 다음과 같은 규칙에 기반합니다.

  1. 2기 간단한 이동 평균이 5기 간단한 이동 평균에 비해 3% 떨어지면 주식 가격이 평균에서 벗어난 것으로 간주되어 구매 신호가 발생합니다.

  2. 2기 간단한 이동 평균선에서 5기 간단한 이동 평균선을 뚫을 때, 가격 회귀 평균값으로 간주되어 판매 신호를 생성합니다.

  3. 5기 RSI 지표의 지수 이동 평균과 결합하여 RSI가 30보다 낮으면 구매 신호가 발생하고 RSI가 70보다 높으면 판매 신호가 발생하여 불필요한 거래를 피합니다.

이 전략의 주요 아이디어는 가격의 단기간의 변동을 사용하여 평균값 복귀 기회를 잡는 것입니다. 가격이 어느 정도 떨어졌을 때 구매하고, 같은 가격이 다시 평균선 근처로 돌아왔을 때 판매하여 수익을 창출합니다. 동시에, RSI 지표는 과매매 상황을 식별하고 일부 노이즈 거래 신호를 필터링하는 데 사용할 수 있습니다.

전략적 강점 분석

이 전략에는 다음과 같은 장점이 있습니다.

  1. 운영이 간단하고, 실행이 쉬우며, 감시 비용이 낮습니다.

  2. 가격의 이동 평균에서 벗어난 특성을 활용하여 짧은 선의 평균으로 돌아가는 기회를 잡는 데는 역사적인 재검토가 효과적입니다.

  3. RSI 지표는 노이즈 트레이딩을 효과적으로 필터링하여 하락의 추종을 피합니다.

  4. 다른 시장 환경에 적응할 수 있는 유연한 변수 조정

  5. 더 많은 것을 할 수 있고, 더 많은 것을 할 수 있고, 더 많은 것을 할 수 있고, 더 많은 것을 할 수 있습니다.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 회귀 거래는 가격이 평균으로 돌아가는 것에 의존하며, 급격한 가격 변동이 발생하면 손실을 막는 위험이 높습니다.

  2. 잘못된 매개 변수 설정으로 인해 거래가 너무 빈번하거나 기회를 놓치게 될 수 있습니다.

  3. 전략적 성과는 시장과 관련이 많고, 가로수익과 흔들리는 시장에서는 성능이 좋지 않다.

대책:

  1. 단편적 손실을 통제하기 위한 합리적인 정지 손실을 설정합니다.

  2. 매출과 인출의 비율을 점진적으로 최적화하고,

  3. 주식 지수 강화 전략과 결합된 적응성.

최적화 방향

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

  1. 다른 이동 평균 조합을 테스트하여 최적의 변수를 찾습니다.

  2. 다른 지표들과 함께 트렌드를 파악하여 전략의 성공률을 높이는 시도를 하고자 합니다.

  3. “이런 전략은 미국 정부와 미국 정부를 상대로 한 것이 아닙니다.

  4. 이 모든 것은 ‘매매 규칙의 최적화’와 ‘수익 요인’의 개선에 기여합니다.

  5. 기계학습 기술과 결합하여 적응된 매개 변수를 구축한다.

요약하다

설명 쌍방향 평균 회귀 거래 전략은 간단한 실용적인 단선 평균 회귀 전략이다. 가격에 대한 이동 평균의 편차를 활용하여 거래 신호를 생성하고 RSI 지표로 잡음을 필터링하여 회귀에서 우수한 성능을 발휘한다. 이 전략은 작동이 간단하고 실행하기 쉽고, 시장 환경에 따라 변수를 조정할 수 있으며, 단선 평균 회귀를 추적하는 투자자에게 적합하다.

전략 소스 코드
/*backtest
start: 2022-12-08 00:00:00
end: 2023-12-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4

strategy("HYE Mean Reversion SMA [Strategy]", overlay = true )
  
//Strategy inputs
source = input(title = "Source", defval = close)
tradeDirection = input(title="Trade Direction", type=input.string,
     options=["Long Only", "Short Only", "Both"], defval="Long Only") 
smallMAPeriod = input(title = "Small Moving Average", defval = 2)
bigMAPeriod = input(title = "Big Moving Average", defval = 5)
percentBelowToBuy = input(title = "Percent below to buy %", defval = 3)
percentAboveToSell = input(title = "Percent above to sell %", defval = 3)
rsiPeriod = input(title = "Rsi Period", defval = 2)
rsiLevelforBuy = input(title = "Maximum Rsi Level for Buy", defval = 30)
rsiLevelforSell = input(title = "Minimum Rsi Level for Sell", defval = 70)
     
longOK  = (tradeDirection == "Long Only") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short Only") or (tradeDirection == "Both")

// Make input options that configure backtest date range
startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2020, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=31, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=12, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100)
     
inDateRange = true

//Strategy calculation 
rsiValue = rsi(source, rsiPeriod)
rsiEMA   = ema(rsiValue, 5)
smallMA = sma(source, smallMAPeriod)
bigMA =  sma(source, bigMAPeriod) 
buyMA = ((100 - percentBelowToBuy) / 100) * sma(source, bigMAPeriod)[0]
sellMA = ((100 + percentAboveToSell) / 100) * sma(source, bigMAPeriod)[0]

if(crossunder(smallMA, buyMA) and rsiEMA < rsiLevelforBuy and inDateRange and longOK)
    strategy.entry("BUY", strategy.long) 

if(crossover(smallMA, bigMA) or not inDateRange)
    strategy.close("BUY")

if(crossover(smallMA, sellMA) and rsiEMA > rsiLevelforSell and inDateRange and shortOK)
    strategy.entry("SELL", strategy.short)

if(crossunder(smallMA, bigMA) or not inDateRange)
    strategy.close("SELL")