이동 평균 및 편차 지표 다중 기간 거래 전략


생성 날짜: 2023-12-26 10:13:34 마지막으로 수정됨: 2023-12-26 10:13:34
복사: 0 클릭수: 575
avatar of ChaoZhang ChaoZhang
1
집중하다
1623
수행원

이동 평균 및 편차 지표 다중 기간 거래 전략

개요

이 전략은 이동 평균, 브린 밴드 및 상대적으로 강한 지표의 세 가지 지표를 결합하여 여러 주기적인 주식 거래를합니다. 그것은 구매할 때 빠른 이동 평균에 느린 이동 평균을 가로질러 상대적으로 강한 지표가 50보다 낮고 브린 밴드 중도 궤도보다 낮은 종결 가격의 세 가지 조건을 고려합니다. 판매할 때 상대적으로 강한 지표가 70 이상 및 브린 밴드 궤도 이상의 종결 가격의 두 가지 조건을 고려합니다.

전략 원칙

이 전략은 주로 세 가지 지표를 사용하여 판단한다. 첫째는 MACD 지표이며, 그것은 두 개의 다른 주기의 이동 평균으로 구성되어 있으며, 빠른 선에서 느린 선을 통과하면 구매 신호를 생성한다. 두 번째 지표는 브린 밴드이며, 그것은 중도, 상도, 하도 세 개의 선으로 구성되어 있다. 가격이 하도 궤도에 접근 할 때 진동하는 계곡의 구매 지점이며, 가격이 상도 궤도에 접근 할 때 손실을 중지해야하는 최고점이다.

구체적으로 거래할 때, 이 전략은 먼저 빠른 이동 평균 선에서 느린 이동 평균 선을 통과하도록 요구하며, 주가가 상승하는 동력이 강화된 것을 표시하여 구매할 수 있다. 동시에 RSI가 50보다 낮아 주가가 과매도 지역에 있을 수 있음을 표시하여 구매할 수 있는 시간을 요구한다. 또한, 부린 대역 중도 궤도보다 낮은 종결 가격을 요구하여 주가가 계곡에 있는 것을 나타내며, 비교적 좋은 구매 입지이기도 하다.

스톱 및 스로프 측면에서, RSI가 70보다 높을 때, 주가가 초과 구매 영역에있을 수 있음을 나타내고, 상승 동력이 약화되고, 스톱을 고려해야합니다. 또한, 종결 가격이 부린 밴드보다 높을 때, 주가가 너무 높을 수 있음을 나타내고, 회귀 위험이 있으며, 적절한 스톱을해야합니다.

전략적 이점

이 전략은 이동 평균, 브린 밴드 및 RSI의 세 가지 지표의 장점을 활용하여 구매 및 판매 시간을 더 정확하게 판단 할 수 있습니다. 구체적인 장점은 다음과 같습니다:

  1. 이동 평균은 주가 상승 동력을 판단할 수 있고, 브린 벨트 중간 궤도는 주가 하류의 구매 지점을 찾을 수 있으며, RSI는 주가 구매 고점을 방지할 수 있다. 이 세 가지의 조합은 주가 상승 중간에 비교적 좋은 구매 시점을 결정할 수 있다.

  2. RSI와 브린의 결합은 주가 가격의 절정을 잘 잡을 수 있으며, 과매매 현상을 피하고, 적시에 시각을 잡을 수 있다.

  3. 다주기 판단을 적용하여 다양한 수준의 거래 기회를 포착하고 수익을 창출할 수 있습니다.

  4. 이 전략의 거래 논리는 간단하고 명확하며 이해하기 쉽고 중장기 투자에 적합합니다.

전략적 위험

이 전략은 여러 지표 판단을 통합하여 거래 의사 결정의 정확성을 높였지만 다음과 같은 주요 위험이 있습니다.

  1. 매개 변수 설정 위험. 이동 평균, 브린 밴드 및 RSI의 매개 변수는 실제 상황에 따라 조정되어야하며, 매개 변수 설정이 잘못되면 거래 효과에 영향을 미칠 수 있습니다.

  2. 다자 시장은 더 잘 적용된다. 곰 시장에서는 주가가 더 빨리 떨어지며, 이 전략의 손해 방지 조치는 더 효과적이지 않을 수 있다.

  3. 단일 주식 위험. 이 전략은 포트폴리오에 더 적합하며, 단일 주식 위험은 여전히 존재하며, 분산 투자가 필요합니다.

  4. 거래 빈도가 너무 높을 수 있다. 만약 매개 변수가 제대로 설정된다면, 이 전략은 자주 거래할 수 있다. 이것은 거래 비용과 세금을 증가시킨다.

대응방법:

  1. 피드백 데이터에 따라 파라미터를 조정하여 지표의 신호 주파수를 더 적절하게 조정해야 한다.

  2. 이동 평균 주기를 적절하게 조정하여 구매 빈도를 낮추고 손실을 줄일 수 있습니다.

  3. 투자 종류를 늘리고, 분산 투자로 단일 주식 위험을 줄입니다.

  4. 구매 및 중지 조건을 적절히 완화하고 거래 빈도를 낮추십시오.

전략 최적화 방향

이 전략은 더 개선될 수 있습니다.

  1. 거래량 지표와 같은 더 많은 지표 필터를 도입하여 구매할 때 거래량이 커지고 의사 결정의 정확성을 높일 수 있습니다.

  2. 포지션 관리 모듈을 추가하여 시장 상황에 따라 포지션을 동적으로 조정할 수 있습니다.

  3. 딥러닝 알고리즘과 결합하여 대용량 데이터에 대한 훈련을 통해 자동으로 최적화된 파라미터 설정을 할 수 있다.

  4. 더 많은 시간 주기의 판단을 추가하여 적용 범위를 확장할 수 있습니다.

요약하다

이 전략은 전체적으로 논리적으로 명확하고 이해하기 쉽으며, 여러 지표 판단을 종합적으로 적용하여 잘못된 신호를 어느 정도 감소시킵니다. 파라미터를 최적화하고 더 많은 기술적 지표를 추가함으로써 의사 결정 정확도를 더욱 높이고 전략의 건전성을 향상시킬 수 있습니다. 이 전략은 중장기 투자에 적합하며, 정량 거래에도 사용할 수 있습니다. 그러나 어떤 전략도 시장 위험을 완전히 회피할 수 없으며, 위치 크기 및 손실을 잘 제어해야합니다.

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

//
//@author Alorse
//@version=4
strategy("MACD + BB + RSI [Alorse]", shorttitle="BB + MACD + RSI [Alorse]", overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=1000, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.01) 

txtVer = "1.0.1"
version = input(title="Version", type=input.string, defval=txtVer, options=[txtVer], tooltip="This is informational only, nothing will change.")
src = input(title="Source", type=input.source, defval=close)

// MACD
fast_length = input(title="Fast Length", type=input.integer, defval=12, group="MACD")
slow_length = input(title="Slow Length", type=input.integer, defval=26, group="MACD")
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9, group="MACD")
sma_source = input(title="Oscillator MA Type", type=input.string, defval="EMA", options=["SMA", "EMA"], group="MACD")
sma_signal = input(title="Signal Line MA Type", type=input.string, defval="EMA", options=["SMA", "EMA"], group="MACD")
fast_ma = sma_source == "SMA" ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source == "SMA" ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? sma(macd, signal_length) : ema(macd, signal_length)

// Bollinger Bands
bbGroup = "Bollindger Bands"
length = input(20, title="Length", group=bbGroup)
mult = input(2.0, title="StdDev", minval=0.001, maxval=5, group=bbGroup)

basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev

// RSI
rsiGroup = "RSI"
lenRSI = input(14, title="Length", minval=1, group=rsiGroup)
// lessThan = input(50, title="Less than", minval=1 , maxval=100, group=rsiGroup)
RSI = rsi(src, lenRSI)

// Strategy Conditions
buy = crossover(macd, signal) and RSI < 50 and close < basis
sell = RSI > 70 and close > upper


// Stop Loss
slGroup = "Stop Loss"
useSL = input(false, title="╔══════   Enable   ══════╗", group=slGroup, tooltip="If you are using this strategy for Scalping or Futures market, we do not recommend using Stop Loss.")
SLbased = input(title="Based on", type=input.string, defval="Percent", options=["ATR", "Percent"], group=slGroup, tooltip="ATR: Average True Range\nPercent: eg. 5%.")
multiATR = input(10.0, title="ATR   Mult", type=input.float, group=slGroup, inline="atr")
lengthATR = input(14, title="Length", type=input.integer, group=slGroup, inline="atr")
SLPercent = input(10, title="Percent", type=input.float, group=slGroup) * 0.01

longStop = 0.0
shortStop = 0.0

if SLbased == "ATR"
    longStop := valuewhen(buy, low, 0) - (valuewhen(buy, rma(tr(true), lengthATR), 0) * multiATR)
    longStopPrev = nz(longStop[1], longStop)
    longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

    shortStop := (valuewhen(sell, rma(tr(true), lengthATR), 0) * multiATR) + valuewhen(sell, high, 0)
    shortStopPrev = nz(shortStop[1], shortStop)
    shortStop := close[1] > shortStopPrev ? max(shortStop, shortStopPrev) : shortStop
if SLbased == "Percent"
    longStop  := strategy.position_avg_price * (1 - SLPercent)
    shortStop := strategy.position_avg_price * (1 + SLPercent)

strategy.entry("Long", true, when=buy)
strategy.close("Long", when=sell, comment="Exit")

if useSL
    strategy.exit("Stop Loss", "Long", stop=longStop)