MA MACD BB 다중 지표 거래 전략 백테스팅 도구

MA MACD BB
생성 날짜: 2024-06-03 09:49:08 마지막으로 수정됨: 2024-06-03 09:49:08
복사: 0 클릭수: 684
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

MA MACD BB 다중 지표 거래 전략 백테스팅 도구

개요

MA MACD BB 다중 지표 거래 전략 재검토 도구는 강력한 기능의 양적 거래 전략 개발 및 재검토 플랫폼이다. 이 도구는 세 가지 일반적인 기술 지표를 사용하도록 지원한다. 이동 평균 ((MA), 이동 평균 수렴 스패드 지표 ((MACD) 및 브린 밴드 ((BB), 사용자는 주요 거래 신호 지표 중 하나를 선택할 수 있습니다.

전략 원칙

이 전략의 핵심 원칙은 시장의 경향과 거래 신호를 식별하기 위해 세 가지 일반적인 기술 지표 (MA, MACD, BB) 를 사용하는 것입니다. 구체적으로:

  1. 사용자가 MA를 주요 지표로 선택한 경우, 전략은 지정된 주기 이동 평균을 계산하고, 가격이 이동 평균을 상회하거나 상회할 때 각각 구매 및 판매 신호를 발생시킨다.
  2. 사용자가 MACD를 주요 지표로 선택하면, 전략은 MACD 값과 신호선을 계산하고, MACD가 신호선을 상단하거나 상단하면 각각 구매 및 판매 신호를 발생시킵니다. 또한, 전략은 MACD 기둥 도표를 그리며, 트렌드 강도를 더 직관적으로 보여줍니다.
  3. 사용자가 BB를 주요 지표로 선택하면, 전략은 부린띠의 상·중·아래 궤도를 계산하고, 가격이 하향 궤도를 돌파할 때 구매 신호를 발생시키고, 상향 궤도를 돌파할 때 판매 신호를 발생시키고, 중도 궤도 근처로 돌아오는 경우 매각한다.

특정 거래시, 전략은 사용자가 선택한 거래 방향 (중단 또는 공단) 과 자금 관리 설정에 따라 각 거래의 포지션 크기를 자동으로 계산하고, 신호에 따라 해당하는 개시 및 포지션 작업을 수행합니다.

전략적 이점

  1. 지표의 유연성: 사용자는 자신의 취향과 시장 특성에 따라 MA, MACD 또는 BB를 주요 거래 지표로 선택하여 다른 거래 스타일과 시장 환경에 적응할 수 있습니다.
  2. 양방향 거래: 전략은 다방면 양방향 거래를 지원합니다. 사용자는 시장 추세에 따라 거래 방향을 유연하게 선택할 수 있습니다. 상승하는 상황에서 이익을 얻을 수있을뿐만 아니라 하락하는 상황에서 수익 기회를 얻을 수 있습니다.
  3. 리스크 조절: 사용자는 거래당 자본 비율을 유연하게 설정할 수 있으며, 거래당 리스크 홀트를 합리적으로 제어할 수 있으며, 전략은 계정 잔액에 따라 거래당 포지션 크기를 자동으로 계산하여 과도한 위험을 피할 수 있습니다.
  4. 신호 명확성: 전략은 일반적인 기술 지표를 사용하여 객관적으로 명확한 거래 신호를 생성하고, 그래프를 직관적으로 표시하여 사용자가 트렌드 방향과 거래 시간을 명확하게 식별 할 수 있습니다.
  5. 재검토 편리함: 사용자는 이 도구를 사용하여 역사 데이터를 재검토하고, 전략의 성능을 빠르게 평가하고 최적화하여 실판 거래에 중요한 참고 자료를 제공할 수 있다.

전략적 위험

  1. 시장 위험: 모든 거래 전략은 시장의 변동과 불확실성의 위험에 직면합니다. 이 전략도 예외는 아닙니다. 시장이 급격하게 변동하거나 비합리적으로 행동하면 전략이 잘못된 신호와 손실을 초래할 수 있습니다.
  2. 매개 변수 위험: 이 전략의 성능은 사용자가 선택한 지표 매개 변수, 예를 들어 MA의 주기, MACD의 빠르고 느린 선의 주기, BB의 주기 및 폭 등에 달려 있습니다. 부적절한 매개 변수 설정은 전략의 효과가 좋지 않을 수 있습니다.
  3. 과도한 적합성 위험: 사용자가 피드백에서 과도하게 최적화 된 전략 매개 변수를 사용하면 전략이 특정 역사 데이터에 지나치게 집중되어 실제 시장에서 좋지 않은 성능을 발휘할 수 있습니다. 이는 적합성 문제가 발생합니다.
  4. 검은 천둥 위험: 이 전략은 주로 기술 지표에 의존하여 거래 신호를 생성합니다. 시장에서 중요한 근본적인 변화 또는 극단적인 사건이 발생하면 전략은 적시에 대응할 수 없으며 큰 손실을 초래할 수 있습니다.

위와 같은 위험을 줄이기 위해 사용자는 합리적으로 전략 매개 변수를 설정하고 정기적으로 전략을 평가하고 조정하며 시장 움직임에 주의를 기울이며 필요한 경우 인적 개입을해야합니다. 또한, 정지 손실 및 위치 제한 등의 엄격한 위험 관리 조치가 필수적입니다.

전략 최적화 방향

  1. 동적 변수 최적화: 현재 전략의 지표 변수는 고정되어 있으며, 시장 상태에 따라 변화하는 동적 변수를 조정하여 시장에 더 잘 적응하기 위해 적응 메커니즘을 도입하는 것을 고려할 수 있습니다.
  2. 조합 신호 최적화: 현재 전략은 주로 단일 지표에 기반하여 거래 신호를 생성합니다. MA와 MACD의 조합 신호와 같은 여러 지표의 신호를 조합하여 신호의 신뢰성과 안정성을 높이는 것을 고려 할 수 있습니다.
  3. 포지션 관리 최적화: 현재 전략은 고정 비율의 포지션 관리를 채택하고, 포지션 규모와 위험-수익 비율을 최적화하기 위해 케일리 공식이나 동적 균형 전략과 같은 더 고급 방법을 도입하는 것을 고려할 수 있다.
  4. 스톱 로즈 최적화: 현재 전략에는 명확한 스톱 로직이 없으며, ATR 또는 비율 기반의 동적 스톱 메커니즘을 추가하여 하향 위험을 더 잘 제어 할 수 있습니다.
  5. 다중 시장 최적화: 현재 전략은 단일 시장에만 적용되며, 전략의 안정성과 수익 수준을 높이기 위해 시장 간의 연계를 활용하여 여러 관련 또는 상호 보완 시장으로 확장 할 수 있습니다.

위 최적화 방향은 주로 전략의 적응성, 안정성, 수익성 및 제어 위험을 향상시키는 관점에서 출발하며, 더 진보된 유연한 방법을 도입하여 전략의 성능을 지속적으로 개선하고 개선합니다.

요약하다

MA MACD BB 다중 지표 거래 전략 재검토 도구는 기능이 풍부하고 유연한 실용적인 양적 거래 도구입니다. 그것은 3 가지의 일반적인 기술 지표를 통해 거래 신호를 캡처하고, 동시에 다중 공간 양방향 거래와 유연한 위험 관리를 지원하며, 다양한 시장과 거래 스타일에 적응할 수 있습니다. 사용자는 이 도구를 사용하여 역사적 데이터를 재검토하고 최적화 할 수 있으며 실물 거래에도 적용 할 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-05-28 00:00:00
end: 2024-06-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Future_Billi0naire_

//@version=5
strategy("MA MACD BB Backtester", overlay=true)

//@variable Input for Strategy
which_ta = input.string("MA", title="Select Indicator", options=["MACD", "BB", "MA"])
which_camp = input.string("Long", title="Select Long / Short", options=["Short", "Long"])

//@variable Input parameters for Risk Management
positionSize = input.float(100.0, title="Each position's capital allocation %", minval=0.0, maxval = 100.0) / 100

//@variable Input parameters for MACD
fast_length = input.int(12, title="MACD Fast Length")
slow_length = input.int(26, title="MACD Slow Length")
signal_smoothing = input.int(9, title="MACD Signal Smoothing")
macd_source = input.source(close, title="MACD Source")

//@variable Input parameters for Moving Average
ma_length = input.int(50, title="Moving Average Length")

//@variable Input parameters for Bollinger Bands
bb_length = input.int(20, title="Bollinger Bands Length")
bb_mult = input.float(2.0, title="Bollinger Bands Multiplier")

// Choosing the Strategy
int x = na
if which_ta == "MA"
    x := 1
else if which_ta == "MACD"
    x := 2
else if which_ta == "BB"
    x := 3

// Calculate MACD and Signal line
[macdLine, signalLine, _] = ta.macd(macd_source, fast_length, slow_length, signal_smoothing)

// Calculate Moving Average
ma = ta.sma(close, ma_length)

// Calculate Bollinger Bands
basis = ta.sma(close, bb_length)
dev = bb_mult * ta.stdev(close, bb_length)
upper = basis + dev
lower = basis - dev

// Plotting MACD and Signal lines
plot(x == 2 ? macdLine : na, color=color.blue, title="MACD Line")
plot(x == 2 ? signalLine : na, color=color.red, title="Signal Line")

// Plotting histogram
histogram = macdLine - signalLine
plot(x == 2 ? histogram : na, color=color.gray, style=plot.style_histogram, title="MACD Histogram")

// Plotting Moving Average
plot(x == 1 ? ma : na, color=color.orange, title="Moving Average")

// Plotting Bollinger Bands
plot(x == 3 ? upper : na, color=color.green, title="Upper Bollinger Band")
plot(x == 3 ? lower : na, color=color.red, title="Lower Bollinger Band")
plot(x == 3 ? basis : na, color=color.blue, title="Basis Bollinger Band")

// Generate buy signals
buySignalMACD = ta.crossover(macdLine, signalLine)
buySignalMA = ta.crossover(close, ma)
buySignalBB = close < lower
sellSignalBBExit = close > basis

// Generate sell signals
sellSignalMACD = ta.crossunder(macdLine, signalLine)
sellSignalMA = ta.crossunder(close, ma)
sellSignalBB = close > upper
buySignalBBExit = close < basis

// Plot buy signals on the chart
plotshape(series=buySignalMACD and x == 2 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalMACD : na, title="Buy Signal MACD", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY MACD")
plotshape(series=buySignalMA and x == 1 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalMA : na, title="Buy Signal MA", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY MA")
plotshape(series=buySignalBB and x == 3 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalBB : na, title="Buy Signal BB", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY BB")

// Plot sell signals on the chart
plotshape(series=sellSignalMACD and x == 2 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalMACD : na, title="Sell Signal MACD", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL MACD")
plotshape(series=sellSignalMA and x == 1 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalMA : na, title="Sell Signal MA", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL MA")
plotshape(series=sellSignalBB and x == 3 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalBB : na, title="Sell Signal BB", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL BB")

// Calculate stop loss and take profit levels
accountSize = strategy.equity
positionSizeAmount = accountSize * positionSize

// Calculate order size based on stop loss amount
orderSize = math.floor(positionSizeAmount / close)

// Enter long positions based on buy signals
if strategy.opentrades == 0
    if (buySignalMACD) and x == 2 and which_camp == "Long"
        strategy.entry("Buy MACD", strategy.long, qty=orderSize)
    if (buySignalMA) and x == 1 and which_camp == "Long"
        strategy.entry("Buy MA", strategy.long, qty=orderSize)
    if (buySignalBB) and x == 3 and which_camp == "Long"
        strategy.entry("Buy BB", strategy.long, qty=orderSize)

// Enter short positions based on sell signals
if strategy.opentrades == 0
    if (sellSignalMACD) and x == 2 and which_camp == "Short"
        strategy.entry("Sell MACD", strategy.short, qty=orderSize)
    if (sellSignalMA) and x == 1 and which_camp == "Short"
        strategy.entry("Sell MA", strategy.short, qty=orderSize)
    if (sellSignalBB) and x == 3 and which_camp == "Short"
        strategy.entry("Sell BB", strategy.short, qty=orderSize)

// Close positions based on exit signals
if (sellSignalMACD) and which_camp == "Long"
    strategy.close("Buy MACD")
if (sellSignalMA) and which_camp == "Long"
    strategy.close("Buy MA")
if (sellSignalBBExit) and which_camp == "Long"
    strategy.close("Buy BB")
if (buySignalMACD) and which_camp == "Short"
    strategy.close("Sell MACD")
if (buySignalMA) and which_camp == "Short"
    strategy.close("Sell MA")
if (buySignalBBExit) and which_camp == "Short"
    strategy.close("Sell BB")