스탠 더 맨 - 이중 이동 평균과 변동성에 기초한 고급 주식 거래 전략

저자:차오장, 날짜: 2023-12-20 14:54:41
태그:

img

전반적인 설명

이 전략은 주식 거래에 대한 구매 및 판매 신호를 자동화하기 위해 이중 이동 평균 시스템과 상대 강도 지수를 사용하여 주식의 역사적 변동성과 결합합니다. 이점은 장기 및 단기 기술을 결합하여 위험을 효과적으로 제어한다는 것입니다. 그러나 여전히 개선할 여지가 있습니다. 예를 들어 스톱 로스 메커니즘이 추가 될 수 있습니다.

전략 논리

이 전략은 150주 이동 평균과 50일 빠른 이동 평균을 활용하여 이중 MA 시스템을 형성합니다. 또한 20일 초고속 MA를 사용합니다. 가격이 150주 MA를 넘으면 상승 추세를 시작하는 것을 신호합니다. 가격이 50일 MA를 넘으면 하락 추세를 신호합니다. 이것은 상승하는 길에 구매하고 하락하는 길에 판매 할 수 있습니다.

또한, 전략은 또한 변동성 및 상대 강도 지수를 기반으로 한 연간 최대 가격을 사용하여 특정 입구 지점을 결정합니다. 닫기 가격이 변동성에서 계산된 최대 가격보다 높고 RSI가 긍정적 인 경우에만 구매 신호를 전송합니다.

장점

  1. 이중 MA 시스템은 상승세를 추구하고 하락세를 멈추는 트렌드 변화를 효과적으로 식별 할 수 있습니다.

  2. 변동성 척도와 RSI는 우리가 부가 시장에서 휘파람을 맞지 않도록 보장합니다.

  3. 20일 빠른 MA는 더 빠른 스톱 손실을 허용합니다.

위험성

  1. 약간의 지연이 있고, 빨리 손해를 멈추는 것을 실현할 수 없습니다.

  2. 스톱 로즈가 설정되어 있지 않아 큰 손실을 초래할 수 있습니다.

  3. 매개 변수 최적화 부족, 매개 변수 설정은 상당히 임의입니다.

위험을 완화하기 위해 스톱 로스를 추가하거나 스톱 로스 비율로 ATR 배수를 사용할 수 있습니다. 더 엄격한 백테스팅을 통해 매개 변수 최적화도 도움이 될 수 있습니다.

더 나은 기회

  1. 스톱 손실 메커니즘을 추가합니다.
  2. 최적화를 통해 최적의 매개 변수를 찾아
  3. 볼륨과 같은 다른 필터를 추가하는 것을 고려하십시오.
  4. 더 많은 요소를 가진 다중 요소 모델로 만들 수 있습니다.

요약

요약하자면, 이것은 상당히 보수적인 주식 투자 전략이다. 전체 추세를 측정하기 위해 이중 MA 시스템을 사용하여, 시간 입시에 대한 변동성과 강도 측정과 결합하여, 잘못된 브레이크오프를 효과적으로 필터링할 수 있다. 빠른 MA는 또한 빠른 출구를 허용한다. 그러나, 전략은 스톱 로스, 매개 변수 최적화 등을 추가함으로써 더욱 향상될 수 있다. 전반적으로 그것은 장기 주식 투자자들에게 적합하다.


/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Relative Strength
strategy("Stan my man", overlay=true)
comparativeTickerId = input("BTC_USDT:swap",  title="Comparative Symbol")
l = input(50, type=input.integer, minval=1, title="Period")
baseSymbol = security(syminfo.tickerid, timeframe.period, close)
comparativeSymbol = security(comparativeTickerId, timeframe.period, close)
hline(0, color=color.black, linestyle=hline.style_dotted)
res = baseSymbol / baseSymbol[l] /(comparativeSymbol / comparativeSymbol[l]) - 1
plot(res, title="RS", color=#1155CC)

//volume ma
vol1 = sma(volume,20)
// 30 week ma
ema1 = ema(close, 150)
//consolidation
h1 = highest(high[1],365)

fastPeriod = input(title="Fast MA", type=input.integer, defval=50)
slowPeriod = input(title="Slow MA", type=input.integer, defval=150)
fastestperiod = input(title="Fastest MA", type=input.integer, defval=20)

fastEMA = ema(close, fastPeriod)
slowEMA = ema(close, slowPeriod)
fastestEMA = ema(close, fastestperiod)

monitorStrategy = close < close[20]


// trade conditions
buytradecondition1 = close >ema1 and res>0 and volume> 1.5*vol1 and close > h1
buytradecondition2 = close > fastEMA  and volume> 1.5* vol1 
selltradecondition1  = close< 0.95 * fastEMA 
selltradecondition2  = close< 0.90 * open

if (buytradecondition1)
    strategy.entry("long",strategy.long,alert_message ="Seems ready to Buy")
    alert("Buy Alert Price (" + tostring(close) + ") crossed over Slow moving average",alert.freq_all)
    
if (buytradecondition2)
    strategy.entry("long",strategy.long,alert_message ="Seems ready to Buy")
    alert("Buy Alert Price (" + tostring(close) + ") crossed over fast moving average",alert.freq_all)
    
if (selltradecondition1)
    strategy.close("long",alert_message ="Seems ready to Sell")
    alert("Sell Alert Price (" + tostring(close) + ") crossed down fast moving average",alert.freq_all)
    
if (selltradecondition2)
    strategy.close("long",alert_message ="Seems ready to Sell")
    alert("Sell Alert Price (" + tostring(close) + ") crossed down 10% below open price  ",alert.freq_all)

//alertcondition(buytradecondition1,title ="BuySignal", message ="Price Crossed Slow Moving EMA ")

plot(fastEMA, color=color.navy)
plot(slowEMA, color=color.fuchsia)
plot(fastestEMA, color=color.green)

더 많은