상대적 강도 지표 (RSI): 전략은 14 기간 RSI를 사용합니다. 코드에 거래 신호를 생성하는 데 직접적으로 사용되지 않지만 RSI는 시장이 과소매 또는 과소매인지 결정하는 데 사용될 수 있으며 다른 지표에 대한 보조 참조를 제공합니다.
볼링거 밴드 (BB): 이 전략은 2개의 표준편차의 폭으로 20기간의 볼링거 밴드를 사용합니다. 볼링거 밴드는 가격 변동 범위를 판단하는 데 사용될 수 있으며, 가격이 상위 또는 하위 밴드를 만지거나 뚫을 때 트렌드 반전을 나타낼 수 있습니다.
슈퍼트렌드 지표 (Supertrend Indicator): 평균 진역 (ATR) 계산을 기반으로 트렌드를 따르는 지표이다. 슈퍼트렌드 라인이 가격 아래에서 위로 이동할 때 구매 신호를 생성하고, 상위에서 아래로 이동할 때 판매 신호를 생성한다.
볼륨 가중 평균 가격 (VWAP): VWAP는 차트에 표시되어 있으며, 하루내 평균 수준에 대한 현재 가격 위치를 판단하는 데 사용될 수 있으며 거래 결정에 대한 추가 참조를 제공합니다.
배경 색상: 전략은 슈퍼트렌드 지표의 트렌드 방향에 따라 차트 배경 색상을 변경합니다. 녹색은 상승 추세를 나타내고 빨간색은 하락 추세를 나타내고 전체 시장 추세를 시각적으로 표시합니다.
최종 거래 신호는 단기 및 장기 이동 평균의 교차를 기반으로 생성됩니다. 단기 MA가 장기 MA를 넘을 때 구매 신호가 발생하고, 아래로 넘을 때 판매 신호가 발생합니다. 이 방법은 트렌드의 초기 단계를 캡처하는 것을 목표로하며, 다른 지표는 신호의 유효성을 확인하는 데 사용될 수 있습니다.
다중 지표 종합 분석: 여러 가지 기술적 지표를 결합함으로써 전략은 시그널의 신뢰성과 정확성을 향상시켜 다른 관점에서 시장을 분석 할 수 있습니다. 이 접근법은 단일 지표로 생성 될 수있는 잘못된 신호를 줄일 수 있습니다.
트렌드 추적: 전략의 핵심은 시장 트렌드를 추적하는 것입니다. 이는 주요 시장 움직임을 파악하고 수익 기회를 높이는 데 도움이됩니다.
시각화: 전략은 배경 색상의 변화를 포함하여 차트에 여러 지표와 신호를 표시하여 거래자가 직관적으로 시장 조건과 잠재적 인 거래 기회를 이해할 수 있습니다.
자동화 거래: 이 전략은 TradingView 플랫폼에서 자동화 거래를 위해 구현할 수 있으며, 인간의 감정의 영향을 줄이고 거래의 객관성과 규율을 향상시킵니다.
과도한 최적화: 여러 지표와 매개 변수 때문에 과도한 최적화의 위험이 있습니다. 이것은 전략이 역사적 데이터에 잘 수행되지만 실제 거래에서 좋지 않을 수 있습니다.
빈번한 거래: 오스실레이션 시장에서는 이동 평균이 자주 교차하여 과도한 거래 신호와 높은 거래 비용을 초래할 수 있습니다.
변화하는 시장 조건: 전략은 특정 시장 조건에서 잘 수행 할 수 있지만 시장 환경이 변하면 크게 저조 할 수 있습니다.
리스크 관리 부족: 코드는 불리한 시장 조건에서 과도한 손실을 초래할 수 있는 명시적인 스톱 로스 (stop loss) 및 리프트 (take profit) 설정을 포함하지 않습니다.
동적 매개 변수를 도입하십시오: 다른 시장 환경에 적응하기 위해 시장 변동성에 따라 이동 평균 및 볼링거 밴드의 매개 변수를 동적으로 조정하는 것을 고려하십시오.
필터링 조건 추가: 부피 확인 또는 트렌드 강도 지표와 같은 추가 필터링 조건이 추가되어 잘못된 신호를 줄이고 거래 품질을 향상시킬 수 있습니다.
스톱 로스 및 영업 취득을 구현하십시오: 위험을 통제하고 수익을 확보하기 위해 전략에 적절한 스톱 로스 및 영업 취득 메커니즘을 통합하십시오.
엔트리 타이밍을 최적화하십시오. 예를 들어, RSI가 과잉 구매 / 과잉 판매 영역에 있고 가격이 볼링거 밴드 경계 근처에있을 때 엔트리를 최적화하기 위해 RSI와 볼링거 밴드 신호를 결합하는 것을 고려하십시오.
감정 지표를 추가하십시오: 시장의 전체 상태와 잠재적 인 전환점을 판단하는 데 도움이되는 용량 또는 변동성에 기반한 시장 감정 지표를 소개하십시오.
포지션 관리 구현: 신호 강도와 시장 변동성에 따라 포지션 크기를 동적으로 조정하여 위험/이익 비율을 최적화합니다.
전략의 효율성을 더욱 향상시키기 위해 동적 매개 변수 조정, 필터링 조건을 추가하고, 스톱 로스 및 영리 메커니즘을 구현하고, 진입 시기를 최적화하고, 시장 체제 인식을 추가하는 것을 고려할 수 있습니다. 또한 슈퍼트렌드 지표의 사용을 개선하고, 정서 지표를 추가하고, 효과적인 위치 관리를 구현하는 것도 탐구할 가치가 있는 방향입니다.
/*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!")