이 전략은 EMA 트렌드 결정과 결합된 피보나치 리트레이싱 및 확장 레벨을 기반으로 한 복합 양적 거래 시스템입니다. 이 전략은 시장에서 중요한 지원 및 저항 수준을 식별하고 트렌드 신호를 기반으로 거래를 실행합니다. 시스템은 시장 트렌드를 결정하기 위해 20 기간 및 50 기간 EMA를 사용하고 최적의 거래 기회를 찾기 위해 피보나치 리트레이싱 레벨을 사용합니다.
핵심 논리는 세 가지 주요 구성 요소로 구성됩니다. 첫째, 가격 범위를 결정하기 위해 지난 10 기간 동안 가장 높고 가장 낮은 가격을 계산합니다. 둘째,이 범위에 기반하여 다섯 가지 주요 피보나치 리트레이싱 레벨 (0.236, 0.382, 0.5, 0.618, 0.786) 을 계산합니다. 마지막으로, 20 및 50 기간 EMA의 교차를 통해 트렌드 방향을 결정합니다. 가격이 상승 추세에서 리트레이싱 수준을 넘을 때 구매 신호가 생성되며, 가격이 하락 추세에서 리트레이싱 수준을 넘을 때 판매 신호가 유발됩니다.
이 전략은 고전적인 기술 분석 도구를 결합하여 비교적 완전한 거래 시스템을 구축합니다. 최적화의 영역이 있지만 전반적인 프레임워크는 좋은 시장 적응력을 보여줍니다. 지속적인 최적화와 개선으로 전략은 실제 거래에서 더 나은 성능을 얻을 수 있습니다. 실시간 거래 전에 철저한 역사 데이터 백테스팅과 매개 변수 최적화를 수행하는 것이 좋습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-11 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Fibonacci Retracement and Extension Strategy", overlay=true) // Define the Fibonacci levels for retracement and extension fibRetracementLevels = array.new_float(5) array.set(fibRetracementLevels, 0, 0.236) array.set(fibRetracementLevels, 1, 0.382) array.set(fibRetracementLevels, 2, 0.5) array.set(fibRetracementLevels, 3, 0.618) array.set(fibRetracementLevels, 4, 0.786) fibExtensionLevels = array.new_float(5) array.set(fibExtensionLevels, 0, 1.618) array.set(fibExtensionLevels, 1, 2.618) array.set(fibExtensionLevels, 2, 3.618) array.set(fibExtensionLevels, 3, 4.236) array.set(fibExtensionLevels, 4, 5.618) // Calculate the high and low prices for the last 10 bars highPrice = ta.highest(high, 10) lowPrice = ta.lowest(low, 10) // Calculate the Fibonacci retracement levels fibRetracement = array.new_float(5) for i = 0 to 4 array.set(fibRetracement, i, highPrice - (highPrice - lowPrice) * array.get(fibRetracementLevels, i)) // Calculate the trend using the Exponential Moving Average (EMA) shortEMA = ta.ema(close, 20) longEMA = ta.ema(close, 50) // Define the trend conditions isUptrend = shortEMA > longEMA isDowntrend = shortEMA < longEMA // Generate buy and sell signals var float lastFibRetracementLevel = na var float lastFibExtensionLevel = na // Buy condition: price crosses above the highest retracement level if (isUptrend) for i = 0 to 4 if (close > array.get(fibRetracement, i)) lastFibRetracementLevel := array.get(fibRetracement, i) strategy.entry("Buy", strategy.long) // Sell condition: price crosses below the lowest retracement level if (isDowntrend) for i = 0 to 4 if (close < array.get(fibRetracement, i)) lastFibRetracementLevel := array.get(fibRetracement, i) strategy.entry("Sell", strategy.short) // Plotting the Fibonacci levels on the chart // for i = 0 to 4 // line.new(bar_index[10], array.get(fibRetracement, i), bar_index, array.get(fibRetracement, i), color=color.new(color.blue, 70), width=1) // Plot the EMAs plot(shortEMA, color=color.red, title="Short EMA") plot(longEMA, color=color.blue, title="Long EMA")