리소스 로딩... 로딩...

전략에 따른 다중 지표 복합 트렌드

저자:차오장, 날짜: 2024-06-21
태그:MAEMARSIBBVWAPATR슈퍼트렌드

img

전반적인 설명

전략 원칙

  1. 상대적 강도 지표 (RSI): 전략은 14 기간 RSI를 사용합니다. 코드에 거래 신호를 생성하는 데 직접적으로 사용되지 않지만 RSI는 시장이 과소매 또는 과소매인지 결정하는 데 사용될 수 있으며 다른 지표에 대한 보조 참조를 제공합니다.

  2. 볼링거 밴드 (BB): 이 전략은 2개의 표준편차의 폭으로 20기간의 볼링거 밴드를 사용합니다. 볼링거 밴드는 가격 변동 범위를 판단하는 데 사용될 수 있으며, 가격이 상위 또는 하위 밴드를 만지거나 뚫을 때 트렌드 반전을 나타낼 수 있습니다.

  3. 슈퍼트렌드 지표 (Supertrend Indicator): 평균 진역 (ATR) 계산을 기반으로 트렌드를 따르는 지표이다. 슈퍼트렌드 라인이 가격 아래에서 위로 이동할 때 구매 신호를 생성하고, 상위에서 아래로 이동할 때 판매 신호를 생성한다.

  4. 볼륨 가중 평균 가격 (VWAP): VWAP는 차트에 표시되어 있으며, 하루내 평균 수준에 대한 현재 가격 위치를 판단하는 데 사용될 수 있으며 거래 결정에 대한 추가 참조를 제공합니다.

  5. 배경 색상: 전략은 슈퍼트렌드 지표의 트렌드 방향에 따라 차트 배경 색상을 변경합니다. 녹색은 상승 추세를 나타내고 빨간색은 하락 추세를 나타내고 전체 시장 추세를 시각적으로 표시합니다.

최종 거래 신호는 단기 및 장기 이동 평균의 교차를 기반으로 생성됩니다. 단기 MA가 장기 MA를 넘을 때 구매 신호가 발생하고, 아래로 넘을 때 판매 신호가 발생합니다. 이 방법은 트렌드의 초기 단계를 캡처하는 것을 목표로하며, 다른 지표는 신호의 유효성을 확인하는 데 사용될 수 있습니다.

전략적 장점

  1. 다중 지표 종합 분석: 여러 가지 기술적 지표를 결합함으로써 전략은 시그널의 신뢰성과 정확성을 향상시켜 다른 관점에서 시장을 분석 할 수 있습니다. 이 접근법은 단일 지표로 생성 될 수있는 잘못된 신호를 줄일 수 있습니다.

  2. 트렌드 추적: 전략의 핵심은 시장 트렌드를 추적하는 것입니다. 이는 주요 시장 움직임을 파악하고 수익 기회를 높이는 데 도움이됩니다.

  3. 시각화: 전략은 배경 색상의 변화를 포함하여 차트에 여러 지표와 신호를 표시하여 거래자가 직관적으로 시장 조건과 잠재적 인 거래 기회를 이해할 수 있습니다.

  4. 자동화 거래: 이 전략은 TradingView 플랫폼에서 자동화 거래를 위해 구현할 수 있으며, 인간의 감정의 영향을 줄이고 거래의 객관성과 규율을 향상시킵니다.

전략 위험

  1. 과도한 최적화: 여러 지표와 매개 변수 때문에 과도한 최적화의 위험이 있습니다. 이것은 전략이 역사적 데이터에 잘 수행되지만 실제 거래에서 좋지 않을 수 있습니다.

  2. 빈번한 거래: 오스실레이션 시장에서는 이동 평균이 자주 교차하여 과도한 거래 신호와 높은 거래 비용을 초래할 수 있습니다.

  3. 변화하는 시장 조건: 전략은 특정 시장 조건에서 잘 수행 할 수 있지만 시장 환경이 변하면 크게 저조 할 수 있습니다.

  4. 리스크 관리 부족: 코드는 불리한 시장 조건에서 과도한 손실을 초래할 수 있는 명시적인 스톱 로스 (stop loss) 및 리프트 (take profit) 설정을 포함하지 않습니다.

전략 최적화 방향

  1. 동적 매개 변수를 도입하십시오: 다른 시장 환경에 적응하기 위해 시장 변동성에 따라 이동 평균 및 볼링거 밴드의 매개 변수를 동적으로 조정하는 것을 고려하십시오.

  2. 필터링 조건 추가: 부피 확인 또는 트렌드 강도 지표와 같은 추가 필터링 조건이 추가되어 잘못된 신호를 줄이고 거래 품질을 향상시킬 수 있습니다.

  3. 스톱 로스 및 영업 취득을 구현하십시오: 위험을 통제하고 수익을 확보하기 위해 전략에 적절한 스톱 로스 및 영업 취득 메커니즘을 통합하십시오.

  4. 엔트리 타이밍을 최적화하십시오. 예를 들어, RSI가 과잉 구매 / 과잉 판매 영역에 있고 가격이 볼링거 밴드 경계 근처에있을 때 엔트리를 최적화하기 위해 RSI와 볼링거 밴드 신호를 결합하는 것을 고려하십시오.

  5. 감정 지표를 추가하십시오: 시장의 전체 상태와 잠재적 인 전환점을 판단하는 데 도움이되는 용량 또는 변동성에 기반한 시장 감정 지표를 소개하십시오.

  6. 포지션 관리 구현: 신호 강도와 시장 변동성에 따라 포지션 크기를 동적으로 조정하여 위험/이익 비율을 최적화합니다.

결론

전략의 효율성을 더욱 향상시키기 위해 동적 매개 변수 조정, 필터링 조건을 추가하고, 스톱 로스 및 영리 메커니즘을 구현하고, 진입 시기를 최적화하고, 시장 체제 인식을 추가하는 것을 고려할 수 있습니다. 또한 슈퍼트렌드 지표의 사용을 개선하고, 정서 지표를 추가하고, 효과적인 위치 관리를 구현하는 것도 탐구할 가치가 있는 방향입니다.


/*backtest
start: 2023-06-15 00:00:00
end: 2024-06-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Comb Backtest Debug", overlay=true)

// Input Parameters
lengthMA1 = input.int(9, title="Short-term MA Length")
lengthMA2 = input.int(21, title="Long-term MA Length")
lengthRSI = input.int(14, title="RSI Length")
lengthBB = input.int(20, title="Bollinger Bands Length")
multBB = input.float(2.0, title="Bollinger Bands Multiplier")
lengthSupertrend = input.int(3, title="Supertrend Length")
multSupertrend = input.float(3.0, title="Supertrend Multiplier")
Periods = input.int(10, title="ATR Period")
src = input.source(hl2, title="Source")
Multiplier = input.float(3.0, title="ATR Multiplier", step=0.1)
changeATR = input.bool(true, title="Change ATR Calculation Method?")
highlighting = input.bool(true, title="Highlighter On/Off?")

// Moving Averages
ma1 = ta.ema(close, lengthMA1)
ma2 = ta.ema(close, lengthMA2)

// RSI
rsi = ta.rsi(close, lengthRSI)

// Bollinger Bands
basis = ta.sma(close, lengthBB)
dev = multBB * ta.stdev(close, lengthBB)
upperBB = basis + dev
lowerBB = basis - dev

// ATR Calculation
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2

// Supertrend Calculation
up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up

dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn

trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// VWAP
vwap = ta.vwap(close)

// Plotting Supertrend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_line, linewidth=2, color=color.new(color.green, 70))
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_line, linewidth=2, color=color.new(color.red, 70))

// Buy and Sell Signals for Supertrend
buySignal = trend == 1 and trend[1] == -1
sellSignal = trend == -1 and trend[1] == 1

plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 70), text="BUY", transp=0)
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 70), text="SELL", transp=0)

// Highlighting the Trend
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 90) : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 90) : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)

// Plot Moving Averages
plot(ma1, title="Short-term MA", color=color.new(color.blue, 70), linewidth=2)
plot(ma2, title="Long-term MA", color=color.new(color.red, 70), linewidth=2)

// Plot RSI
hline(70, "Overbought", color=color.new(color.red, 70))
hline(30, "Oversold", color=color.new(color.green, 70))
plot(rsi, title="RSI", color=color.new(color.purple, 70), linewidth=2)

// Plot Bollinger Bands
plot(basis, title="BB Basis", color=color.new(color.orange, 70))
p1 = plot(upperBB, title="BB Upper", color=color.new(color.gray, 70))
p2 = plot(lowerBB, title="BB Lower", color=color.new(color.gray, 70))
fill(p1, p2, color=color.new(color.silver, 90), transp=90)

// Plot VWAP
plot(vwap, title="VWAP", color=color.new(color.green, 70), linewidth=2)

// Background Color Based on Supertrend
bgcolor(trend == 1 ? color.new(color.green, 90) : color.new(color.red, 90), title="Background Color", transp=90)

// Simplified Buy and Sell Conditions for Testing
buyCondition = ta.crossover(ma1, ma2)
sellCondition = ta.crossunder(ma1, ma2)

// Debugging plots
plotchar(buyCondition, char='B', location=location.belowbar, color=color.new(color.green, 70), size=size.small, title="Buy Condition")
plotchar(sellCondition, char='S', location=location.abovebar, color=color.new(color.red, 70), size=size.small, title="Sell Condition")

// Strategy orders for backtesting
if (buyCondition)
    strategy.entry("Buy", strategy.long)

if (sellCondition)
    strategy.entry("Sell", strategy.short)

// Alerts for Combined Buy and Sell Conditions
alertcondition(buyCondition, title="Combined Buy Alert", message="Combined Buy Signal")
alertcondition(sellCondition, title="Combined Sell Alert", message="Combined Sell Signal")
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")


관련

더 많은