
이 전략은 여러 가지 기술 지표가 결합된 포괄적 인 거래 시스템으로, 주로 유령 이동 평균 (Ghost Moving Average), 운동 지표 (Momentum Oscillator) 및 피보나치 회귀 수준을 결합하여 완전한 거래 프레임 워크를 구축합니다. 이 전략은 유령 이동 평균을 사용하여 시장 추세 방향을 결정하고, 운동 지표와 결합하여 신호 강도를 검증하고, 피보나치 수준을 사용하여 자동으로 목표와 가격 손실을 설정하여 위험 관리의 자동화를 구현합니다.
유령 이동 평균 (GMA): 이것은 전략의 핵심 구성 요소이며, 전통적인 이동 평균보다 더 민감한 가격 추세 신호를 제공하는 특별한 계산 방법을 사용합니다. 구체적인 계산 공식은 다음과 같습니다: 먼저 2배의 반주기 가중된 이동 평균 ((WMA) 을 계산하고 전체주기 가중된 이동 평균을 빼고, 그 결과에 원주기 제곱근의 가중된 이동 평균으로 한 주기를 다시 적용합니다.
동력 지표: 전략은 현재 가격과 특정 주기 전 가격의 차치를 사용하여 시장의 움직임을 측정하고 지수 이동 평균 ((EMA) 을 통해 부드럽게 처리하고 표준 차기를 통해 통합하여 운동 신호를 더 안정적이고 신뢰할 수 있습니다.
트렌드 판단: 유령 이동 평균의 기울기를 계산하여 시장의 흐름을 결정합니다. 기울기는 긍정적으로 상승 추세를 나타내고, 기울기는 부정적으로 하락 추세를 나타냅니다.
피보나치 목표 가격과 제약전략은 회귀 기간 동안의 최고 가격과 최저 가격을 기반으로 피보나치 레벨을 계산합니다. 각각 0.618, 1.0 및 1.618을 목표 가격으로 사용하고, 0.382를 스톱 스로 수준으로 사용합니다.
입학 조건:
트렌드와 동력의 이중 확인: 유령 이동 평균과 동력 지표를 결합하여, 전략은 가짜 신호를 효과적으로 줄일 수 있으며, 두 지표가 동시에 조건을 충족하면 거래 신호를 유발할 수 있습니다.
적응적 위험 관리이 방법은 시장의 변동성에 따라 자동으로 조정하여, 다양한 시장 조건에서 적절한 리스크-비용 비율을 제공합니다.
시각화 거래 디스플레이전략에 내장된 거래 디스플레이는 트렌드 상태, 거래 신호, 진입 이유 및 목표 가격 및 스톱로스 등의 중요한 정보를 직관적으로 표시하여 거래자가 신속하게 결정을 내릴 수 있도록 도와줍니다.
시장의 변동에 적응하는 것유령 이동 평균은 전통적인 이동 평균에 비해 가격 변화에 더 민감하며, 트렌드 전환을 더 빨리 인식하여 지연을 줄일 수 있습니다.
명확한 거래 규칙전략은 명확한 입출입 조건을 제공하며, 주관적인 판단을 줄여주고, 거래자가 규율을 유지하도록 도와줍니다.
과도한 거래의 위험위기 시장에서, 가격이 유령 이동 평균을 자주 통과하여 과도한 거래 신호를 유발할 수 있습니다. 해결책은 명확한 추세에서만 거래하거나 신호 확인 주기를 늘리는 것과 같은 추가 필터링 조건을 추가하는 것입니다.
손해배상 설정 위험: 고정 비율의 피보나치 스톱은 매우 변동성이 높은 시장에서 충분히 유연하지 않을 수 있으며, 스톱이 너무 느슨하거나 너무 단단하게 될 수 있습니다. 다른 시장 조건에 따라 피보나치 비율을 동적으로 조정하는 것이 좋습니다.
매개변수 민감도: 전략 성능은 GMA 길이, 동력 주기 등과 같은 여러 파라미터의 설정에 크게 의존합니다. 다른 시장과 시간 프레임에 따라 다른 파라미터 조합이 필요할 수 있습니다. 최적의 파라미터를 찾기 위해 재검토를 수행하는 것이 좋습니다.
트렌드 판단 지연: 유령 이동 평균은 전통적인 이동 평균보다 더 민감하지만, 여전히 약간의 지연이 있으며, 트렌드 초기에 일부 기회를 놓칠 수 있습니다. 더 짧은 기간의 지표와 결합하여 트렌드 변화를 일찍 발견하는 것을 고려할 수 있습니다.
오차 감지: 전략의 피보나치 레벨은 역사적 데이터 계산에 기초하여, 앞으로의 편차가 있을 수 있다. 실제 거래에서 이것을 주의해야 하며, 보다 역동적인 방법을 사용하여 핵심 레벨을 계산하는 것을 고려해야 한다.
적응 변수 최적화: 현재 전략은 고정된 매개 변수 설정을 사용하며, 시장의 변동성에 따라 GMA 길이와 동력 주기를 자동으로 조정하는 적응 메커니즘을 도입할 수 있습니다. 이는 전략이 다양한 시장 조건에서 최적의 성능을 유지하도록합니다.
다중 시간 프레임 분석: 여러 시간 프레임에 대한 분석을 추가하고, 여러 시간 프레임의 신호가 일치할 때만 거래를 수행하여 신호 품질과 성공률을 크게 향상시킬 수 있습니다.
동적 정지 목표: 현재 전략은 고정된 피포나치 레벨을 목표 가격으로 사용하며, 시장의 변동적 동력에 따라 목표 가격을 조정하거나, 수익 잠재력을 극대화하기 위해 추적 중지 전략을 시행할 수 있습니다.
거래량 분석: 거래량 지표와 함께 가격 동향의 유효성을 확인하고, 가격과 거래량이 동시에 확인된 경우에만 거래하면 가짜 브레이크 신호를 줄일 수 있다.
기계 학습 강화: 진입 조건과 변수 선택을 최적화하기 위해 기계 학습 알고리즘을 도입하고, 역사 데이터 훈련 모델을 통해 최적의 거래 기회와 위험 관리 전략을 예측한다.
감정 지표 통합: 시장 감정 지표, 예를 들어 변동률 지수 또는 다른 파생 지표를 추가하여 극한 시장 조건에서 전략 행동을 조정하고 위험 관리 능력을 향상시킵니다.
유령 이동 평균과 동적량 결합 된 피보나치 목표 가격 및 중지 전략은 포괄적인 기술 분석 거래 시스템으로, 여러 지표와 기술을 결합하여 체계화된 거래 프레임 워크를 제공합니다. 이 전략의 핵심 장점은 추세와 동력의 이중 확인 메커니즘과 시장의 변동성에 기반한 자기 적응 위험 관리 시스템입니다.
/*backtest
start: 2024-04-02 00:00:00
end: 2025-04-01 00:00:00
period: 3d
basePeriod: 3d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Ghost MA + Momentum + Fib TP/SL + Dashboard", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === INPUTS ===
src = input(close, "Source")
gmaLength = input.int(20, "GMA Length")
momentumLength = input.int(20, "Momentum Length")
momentumSmoothing = input.int(10, "Momentum Smoothing")
swingLookback = input.int(50, "Fibonacci Swing Lookback")
// === GHOST MOVING AVERAGE ===
gma = ta.wma(2 * ta.wma(src, gmaLength / 2) - ta.wma(src, gmaLength), math.round(math.sqrt(gmaLength)))
plot(gma, title="Ghost MA", color=color.teal, linewidth=2)
// === MOMENTUM GHOST OSCILLATOR ===
momentum = src - src[momentumLength]
smoothMomentum = ta.ema(momentum, momentumSmoothing)
normalizedMomentum = smoothMomentum / ta.stdev(momentum, momentumLength)
// === MARKET TREND ===
gmaSlope = gma - gma[1]
marketTrend = gmaSlope > 0 ? "UPTREND" : "DOWNTREND"
// === SWING POINTS FOR FIBONACCI ===
highestHigh = ta.highest(high, swingLookback)
lowestLow = ta.lowest(low, swingLookback)
fibRange = highestHigh - lowestLow
entryPrice = close
// === FIBONACCI TP/SL LEVELS ===
tp1_long = entryPrice + (fibRange * 0.618)
tp2_long = entryPrice + (fibRange * 1.0)
tp3_long = entryPrice + (fibRange * 1.618)
sl_long = entryPrice - (fibRange * 0.382)
tp1_short = entryPrice - (fibRange * 0.618)
tp2_short = entryPrice - (fibRange * 1.0)
tp3_short = entryPrice - (fibRange * 1.618)
sl_short = entryPrice + (fibRange * 0.382)
// === STRATEGY CONDITIONS ===
longCond = ta.crossover(src, gma) and normalizedMomentum > 0
shortCond = ta.crossunder(src, gma) and normalizedMomentum < 0
if (longCond)
strategy.entry("Long", strategy.long)
strategy.exit("TP/SL Long", from_entry="Long", limit=tp1_long, stop=sl_long)
if (shortCond)
strategy.entry("Short", strategy.short)
strategy.exit("TP/SL Short", from_entry="Short", limit=tp1_short, stop=sl_short)
// === SIGNAL LABELS ON CHART ===
if (longCond)
label.new(bar_index, low, "BUY\n" + str.tostring(close, "#.##"), style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)
if (shortCond)
label.new(bar_index, high, "SELL\n" + str.tostring(close, "#.##"), style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)
// === ALERT CONDITIONS ===
alertcondition(longCond, title="Buy Signal", message="Buy Signal Triggered: GMA Cross Up + Momentum Positive")
alertcondition(shortCond, title="Sell Signal", message="Sell Signal Triggered: GMA Cross Down + Momentum Negative")
// === DASHBOARD ===
var table dash = table.new(position.top_right, 1, 8, border_width=1)
if bar_index % 5 == 0
signal = longCond ? "BUY" : shortCond ? "SELL" : "WAIT"
reason = longCond ? "GMA↑ & Momentum+" : shortCond ? "GMA↓ & Momentum−" : "No Clear Signal"
timeframe = timeframe.period
sigColor = signal == "BUY" ? color.new(color.green, 20) : signal == "SELL" ? color.new(color.red, 20) : color.new(color.gray, 60)
trendColor = marketTrend == "UPTREND" ? color.new(color.green, 80) : color.new(color.red, 80)
table.cell(dash, 0, 0, "📊 GHOST TRADING DASHBOARD", text_color=color.black, bgcolor=color.lime, text_size=size.large)
table.cell(dash, 0, 1, "Trend: " + marketTrend, text_color=color.black, bgcolor=trendColor, text_size=size.normal)
table.cell(dash, 0, 2, "Timeframe: " + timeframe, text_color=color.black, bgcolor=color.purple, text_size=size.normal)
table.cell(dash, 0, 3, "Signal: " + signal + " @ " + str.tostring(close, "#.##"), text_color=color.black, bgcolor=sigColor, text_size=size.normal)
table.cell(dash, 0, 4, "Reason: " + reason, text_color=color.black, bgcolor=color.new(color.yellow, 60), text_size=size.normal)
table.cell(dash, 0, 5, signal == "BUY" ? "TP1: " + str.tostring(tp1_long, "#.##") +
" | TP2: " + str.tostring(tp2_long, "#.##") +
" | TP3: " + str.tostring(tp3_long, "#.##")
: signal == "SELL" ? "TP1: " + str.tostring(tp1_short, "#.##") +
" | TP2: " + str.tostring(tp2_short, "#.##") +
" | TP3: " + str.tostring(tp3_short, "#.##") : "-",
text_color=color.black, bgcolor=color.new(color.green, 80), text_size=size.normal)
table.cell(dash, 0, 6, "Reentry: " + str.tostring(gma, "#.##"), text_color=color.black, bgcolor=color.new(color.orange, 80), text_size=size.normal)
table.cell(dash, 0, 7, signal == "BUY" ? "SL: " + str.tostring(sl_long, "#.##") : signal == "SELL" ? "SL: " + str.tostring(sl_short, "#.##") : "-", text_color=color.black, bgcolor=color.new(color.red, 70), text_size=size.normal)