Chiến lược này là một hệ thống giao dịch định lượng tổng hợp dựa trên các mức khôi phục và mở rộng Fibonacci, kết hợp với xác định xu hướng EMA. Chiến lược xác định các mức hỗ trợ và kháng cự quan trọng trên thị trường và thực hiện giao dịch dựa trên các tín hiệu xu hướng. Hệ thống sử dụng EMA 20 giai đoạn và 50 giai đoạn để xác định xu hướng thị trường và sử dụng các mức khôi phục Fibonacci để tìm cơ hội giao dịch tối ưu.
Khái niệm cốt lõi bao gồm ba thành phần chính: Thứ nhất, nó tính toán giá cao nhất và thấp nhất trong 10 giai đoạn qua để xác định phạm vi giá; Thứ hai, nó tính toán năm mức khôi phục Fibonacci chính (0.236, 0.382, 0.5, 0.618, 0.786) dựa trên phạm vi này; Cuối cùng, nó xác định hướng xu hướng thông qua sự chéo chéo giữa các EMA 20 và 50 giai đoạn. Các tín hiệu mua được tạo ra khi giá vượt qua mức khôi phục trong xu hướng tăng, trong khi các tín hiệu bán được kích hoạt khi giá vượt qua mức khôi phục trong xu hướng giảm.
Chiến lược này xây dựng một hệ thống giao dịch tương đối hoàn chỉnh bằng cách kết hợp các công cụ phân tích kỹ thuật cổ điển. Mặc dù có các lĩnh vực tối ưu hóa, khung tổng thể cho thấy khả năng thích nghi thị trường tốt. Thông qua tối ưu hóa và cải tiến liên tục, chiến lược cho thấy hứa hẹn cho hiệu suất tốt hơn trong giao dịch thực tế.
/*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")