피보나치 추세 추적 및 지능적인 손절매 및 손절매 양적 거래 전략

EMA FIBONACCI SL TP 趋势跟踪 自动交易 量化策略 止盈止损 斐波那契回调
생성 날짜: 2025-08-13 14:13:44 마지막으로 수정됨: 2025-08-13 14:13:44
복사: 0 클릭수: 416
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

피보나치 추세 추적 및 지능적인 손절매 및 손절매 양적 거래 전략 피보나치 추세 추적 및 지능적인 손절매 및 손절매 양적 거래 전략

개요

이 전략은 지수 이동 평균 (EMA) 교차 신호와 피포나치 리콜 레벨을 결합한 자동 거래 시스템이다. 이 전략은 EMA 단선과 느린 선의 교차를 식별하여 시장의 트렌드 방향을 결정하며, 자동으로 계산된 피포나치 레벨을 사용하여 스마트 스톱로스 및 스톱 포인트 지점을 설정한다. 이 전략은 시장의 트렌드 변화를 포착하고, 기본 설정된 위험 관리 파라미터를 통해 자금을 보호한다.

전략 원칙

이 전략의 핵심 논리는 다음과 같습니다.

  1. EMA 교차 신호: 시스템은 두 개의 다른 주기의 지수 이동 평균을 사용하여 (고속선 9 주기 및 느린 선 21 주기) 트렌드 변화를 식별합니다. 빠른 선이 느린 선을 상향으로 통과하면 다중 신호가 발생하며, 빠른 선이 느린 선을 하향으로 통과하면 공백 신호가 발생합니다.

  2. 다시 그리기 방지 디자인전략적 사용:barstate.isconfirmed조건은 K선 종결 후에만 신호를 확인하는 것을 보장하여 신호 재화 문제를 효과적으로 피하고, 전략의 신뢰성을 높였다.

  3. 자동 피포나치 레벨: 시스템은 사용자가 설정한 회귀주기 (기본 100 K 선) 의 최고점과 최저점을 자동으로 식별하고, 그 다음에는 핵심 피포나치 회귀 수준을 계산한다 (0.382 및 0.618) .

  4. 지능형 정지 설정:

    • 더 많은 경우, 0.618 피보나치 리턴에 중지 손실을 설정하고, 중지 중지 회귀 기간 동안 최고 지점에 설정
    • 공백을 할 때, 중지 손실은 0.382 피보나치 리셋 지점에 설정, 중지 중지 설정은 회귀 기간의 최저 지점에 설정
  5. 사용자 정의 변수전략은 EMA 주기의 길이를 포함하여 여러 조정 가능한 매개 변수를 제공 합니다. 중지 손실 비율, 중지 손실 비율, 추적 중지 손실 비율, 피포나치 회귀 주기와 거래 수. 사용자는 자신의 위험 선호도와 시장 조건에 따라 최적화 할 수 있습니다.

전략적 이점

  1. 트렌드 추적과 반전 캡처이 전략은 EMA와 피보나치치 레벨의 교차와 결합하여 시장 추세의 변화를 효과적으로 포착할 수 있으며, 중요한 지지부진 지점에서 스톱로즈와 스톱을 설정할 수 있습니다.

  2. 시장 조건에 적응: 자동 피보나치 계산은 전략이 고정된 퍼센티지를 사용하는 대신 다른 시장 환경에 따라 자동으로 스톱 포지션을 조정할 수 있게 해 주며, 이는 다양한 변동률의 시장에서 비교적 안정적인 성능을 유지할 수 있게 해준다.

  3. 다시 그리기 방지 장치사용함:barstate.isconfirmed그리고lookahead=barmerge.lookahead_off매개 변수, 정책은 모든 신호가 닫힌 디스크의 K선을 기반으로 하고, 피드백과 실 디스크 사이의 차이를 피한다.

  4. 다중 시간 프레임 분석: 전략은 사용자가 다른 신호 시간 프레임을 선택할 수 있도록, 시간 프레임 간 분석을 구현하고, 신호 품질을 향상시킵니다.

  5. 비주얼 트레이딩 신호전략: 전략은 거래 논리 및 위험 관리를 직관적으로 이해할 수 있도록 차트에서 구매 및 판매, 중지 및 중지 위치를 명확하게 표시합니다.

  6. 경고 기능 통합: 내장된 거래 신호 경보 기능으로 실시간으로 시장 기회를 감시할 수 있습니다.

전략적 위험

  1. 가짜 침입 위험: EMA 교차 신호는 흔들리는 시장에서 빈번한 가짜 브레이크를 만들어 연쇄 손실을 초래할 수 있다. 가짜 신호를 줄이기 위해 추가적인 필터 조건 (예: 거래량 확인, 변동율 필터 또는 트렌드 강도 지표) 을 추가할 수 있다.

  2. 스탠더드 거리 너무 커요: 특정 시장 조건에서 피보나치 레벨에 기반한 스톱 포지션은 입구 지점으로부터 더 멀리 떨어져서 단일 거래의 위험을 증가시킬 수 있다. 최대 스톱 거리 제한을 설정하거나 ATR을 사용하여 스톱 거리를 동적으로 조정하는 것을 고려할 수 있다.

  3. 변수 최적화 함수: 과도한 최적화 매개 변수는 전략이 역사적 데이터에서 잘 작동하지만 미래 시장에서 실패할 수 있습니다. 전략의 안정성을 검증하기 위해 전향 테스트와 루비티 테스트를 사용하는 것이 좋습니다.

  4. 재정 관리 부족: 전략은 기본으로 고정 수 거래를 사용하며, 계정 규모와 위험에 따라 포지션 크기를 조정하지 않습니다. 고정 위험 비율이나 켈리 기준과 같은 자금 관리 모듈을 통합하여 포지션 크기를 동적으로 조정하는 것이 좋습니다.

  5. 시장 조건의 필터링 부족: 전략은 모든 시장 조건에서 신호를 생성합니다. 트렌드 시장과 충격 시장의 구별이 없습니다. 시장 환경 식별 기능을 추가하여 다른 시장 상태에서 다른 거래 매개 변수를 사용하거나 거래를 중지 할 수 있습니다.

전략 최적화 방향

  1. 다중 시간 프레임 확인을 추가합니다.: 더 긴 주기의 트렌드 확인 메커니즘을 도입할 수 있으며, 주 트렌드 방향이 일치할 때만 거래를 실행하여 역동적인 거래의 수를 줄일 수 있다. 예를 들어, 일선 또는 주경선 트렌드 방향을 검사할 수 있으며, 일선이 상승할 때만 다중 순서를 실행한다.

  2. 통합 변동률 조정: ATR 지표를 도입하여 스톱 및 스톱 거리를 동적으로 조정하여 전략이 다양한 변동률 환경에 적응할 수 있도록합니다. 높은 변동률에 스톱 거리를 늘리고 낮은 변동률에 스톱 거리를 줄입니다.

  3. 수량 확인: 신호를 생성할 때 거래량이 확대되는지 확인하고, 거래량이 지원되는 경우에만 거래를 실행하여 신호 품질을 향상시킨다.

  4. 자금 관리 최적화: 계정 규모와 위험에 기반한 동적 포지션 관리를 구현하고, 각 거래의 위험을 총 자금의 일정한 비율 내에서 제어합니다.

  5. 시장 환경 필터를 개발: 시장 상태를 인식하는 모듈을 설계하여 트렌드 시장과 충격 시장을 구분하고, 다른 시장 상태에서 다른 거래 전략이나 매개 변수를 사용합니다.

  6. 피보나치 변수를 최적화: 현재 전략은 고정된 0.382 및 0.618 피포나치 레벨을 사용하며, 다른 레벨 (예: 0.5 또는 0.786) 의 효과를 테스트하거나, 시장 특성에 따라 역동적으로 최적의 피포나치 레벨을 선택할 수 있다.

  7. 트랜잭션 시간 필터를 추가합니다.: 중요한 경제 자료가 발표되거나 시장 유동성이 부족한 기간 동안 거래를 중단하여 과도한 슬라이드 포인트와 예측 불가능한 시장 행동을 피하십시오.

요약하다

이것은 기술 분석의 고전적 도구를 결합하여 트렌드 변화를 EMA를 통해 교차 인식하고 피보나치 수치를 활용하여 중요한 지지부진 지점을 설정하고 자동으로 스톱 ?? 관리를 구현하는 지능형 거래 전략입니다. 이 전략의 장점은 자율적 인 적응성과 완전한 위험 관리 시스템이지만 가짜 돌파구 및 변수 과잉 최적화 위험을 주의해야합니다.

이 전략은 여러 시간 프레임 확인, 변동율 조정, 거래량 필터링 및 시장 환경 인식 등의 기능을 추가하여 안정성과 수익성을 더욱 향상시킬 수 있습니다. 체계화된 거래 방법을 찾는 거래자에게는 개인 거래 스타일과 시장 특성에 따라 추가적으로 사용자 정의 및 최적화 할 수있는 견고한 기본 프레임 워크를 제공합니다.

전략 소스 코드
/*backtest
start: 2024-08-13 00:00:00
end: 2025-08-11 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":5000000}]
*/

//@version=5
strategy("ETH Futures Auto Buyer with Auto Fib by Govind", overlay=true, max_labels_count=500)

// ===== Inputs =====
timeframe_input = input.timeframe("5", "Signal Timeframe")
fastLen = input.int(9, "Fast EMA Length")
slowLen = input.int(21, "Slow EMA Length")
slPercent = input.float(0.5, "Stop Loss %")
tpPercent = input.float(1.0, "Take Profit %")
trailPercent = input.float(0.3, "Trailing SL %")
lookbackBars = input.int(100, "Fib Swing Lookback")
qty = input.int(1, "Order Quantity", minval=1)

// ===== EMA Logic with no repainting =====
price = request.security(syminfo.tickerid, timeframe_input, close, lookahead=barmerge.lookahead_off)
emaFast = request.security(syminfo.tickerid, timeframe_input, ta.ema(close, fastLen), lookahead=barmerge.lookahead_off)
emaSlow = request.security(syminfo.tickerid, timeframe_input, ta.ema(close, slowLen), lookahead=barmerge.lookahead_off)

longSignal = ta.crossover(emaFast, emaSlow)
shortSignal = ta.crossunder(emaFast, emaSlow)

// Confirm signals only on closed bar (no repaint)
longSignalConfirmed = longSignal and barstate.isconfirmed
shortSignalConfirmed = shortSignal and barstate.isconfirmed

// ===== Auto Fibonacci Levels =====
swingHigh = ta.highest(high, lookbackBars)
swingLow = ta.lowest(low, lookbackBars)
fib618 = swingHigh - (swingHigh - swingLow) * 0.618
fib382 = swingHigh - (swingHigh - swingLow) * 0.382

// ===== SL & TP Prices =====
longSL = fib618
shortSL = fib382
longTP = swingHigh
shortTP = swingLow

// ===== Strategy Entries =====
if (longSignalConfirmed)
    strategy.entry("Long", strategy.long, qty)
    strategy.exit("Long Exit", from_entry="Long", stop=longSL, limit=longTP)
if (shortSignalConfirmed)
    strategy.entry("Short", strategy.short, qty)
    strategy.exit("Short Exit", from_entry="Short", stop=shortSL, limit=shortTP)

// ===== Plotting =====
plot(longSL, color=color.lime, title="Long SL")
plot(shortSL, color=color.fuchsia, title="Short SL")
plot(longTP, color=color.blue, title="Long TP")
plot(shortTP, color=color.orange, title="Short TP")
plotshape(longSignalConfirmed, title="Long Signal", style=shape.labelup, text="BUY", location=location.belowbar, color=color.green, size=size.small)
plotshape(shortSignalConfirmed, title="Short Signal", style=shape.labeldown, text="SELL", location=location.abovebar, color=color.red, size=size.small)

// ===== Alerts =====
alertcondition(longSignalConfirmed, title="Long Signal", message="ETH Futures LONG Entry")
alertcondition(shortSignalConfirmed, title="Short Signal", message="ETH Futures SHORT Entry")