Chiến lược này sử dụng đường chéo trung bình động như các tín hiệu giao dịch, kết hợp với chỉ số biến động BB và chỉ số động lực tùy chỉnh để lọc, nhằm cải thiện độ tin cậy của các tín hiệu chéo MA và giảm các tín hiệu sai.
Sử dụng EMA 50 giai đoạn và SMA 200 giai đoạn để tạo ra tín hiệu chéo vàng và chéo chết.
Khi giá đang trong xu hướng tăng, yêu cầu giá phải ở trên đường 200 ngày và giá trị chỉ số động lực tùy chỉnh dưới 25 để tạo ra tín hiệu mua.
Khi giá đang trong xu hướng giảm, yêu cầu giá phải dưới đường 200 ngày và giá trị chỉ số động lực tùy chỉnh trên 75 để tạo ra tín hiệu bán.
Chỉ số động lượng tùy chỉnh lập bản đồ đường trung và khoảng cách băng tần BB vào phạm vi 0-100 dựa trên mức tối đa và tối thiểu trong lịch sử.
Chỉ số động lực phản ánh sự biến động giá tương đối, lọc ngưỡng giúp giảm các chéo sai.
Sử dụng điểm mạnh của EMA và SMA để nắm bắt xu hướng trung bình dài hạn.
Tăng độ lọc với chỉ số động lực cải thiện độ tin cậy và giảm tín hiệu sai.
Khoảng cách băng tần BB phản ánh cường độ biến động, bình thường hóa lịch sử tránh sự phụ thuộc tham số.
EMA có thể tùy chỉnh, thời gian SMA và ngưỡng động lực thích nghi với môi trường thị trường khác nhau.
Logic đơn giản với tính linh hoạt tối ưu hóa, tính thực tế mạnh mẽ.
EMA và SMA có hiệu ứng chậm trễ, có thể bỏ lỡ các cơ hội ngắn hạn.
Xu hướng theo bản chất không phù hợp với các thị trường giới hạn phạm vi.
Mức giới hạn động lực đòi hỏi kiểm tra ngược lặp lại cho tham số tối ưu, rủi ro quá phù hợp.
Các hệ thống dài hạn hơn cung cấp lợi nhuận tuyệt đối ổn định nhưng có khả năng hạn chế.
Có thể rút ngắn thời gian MA hoặc thêm các chỉ số bổ sung để cải thiện khả năng thích nghi.
Kiểm tra các kết hợp MA khác nhau cho các thông số tối ưu.
Thêm các chỉ số bổ sung như MACD, KD để xác nhận thêm.
Tối ưu hóa các thông số chỉ số động lực như thời gian nhìn lại, phạm vi lập bản đồ.
Bao gồm stop loss để kiểm soát rủi ro.
Điều chỉnh các thông số cụ thể của biểu tượng bằng cách trích xuất tính năng học máy.
Thêm các chỉ số âm lượng để tránh các tín hiệu chéo không hợp lý.
Chiến lược này kết hợp các điểm mạnh của việc theo dõi xu hướng dài hạn và lọc ngưỡng nhịp độ kép để có độ tin cậy cao và giá trị thực tế. Những cải tiến hơn nữa có thể được thực hiện thông qua tối ưu hóa tham số và các kỹ thuật bổ sung. Khái niệm sáng tạo này cung cấp những hiểu biết có giá trị cho các hệ thống xu hướng khác. Một bổ sung có giá trị cho thư viện chiến lược giao dịch thuật toán.
/*backtest start: 2023-10-26 00:00:00 end: 2023-10-27 13:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="EMA Difference Mapping with Trades", shorttitle="EMA Diff Map", overlay=false) // Inputs emaLength = input(20, "EMA Length") stdDevLength = input(2, "Standard Deviation Length") priceSource = close takeProfitPoints = input(1000, title="Take Profit (in Points)") stopLossPoints = input(2500, title="Stop Loss (in Points)") // Calculate EMA ema = ema(priceSource, emaLength) // Calculate Standard Deviation stdDev = stdev(priceSource, stdDevLength) // Calculate differences diff1 = (ema + stdDev) - ema diff2 = ema - (ema - stdDev) // Calculate min and max differences from last year lookbackPeriod = 504 // Number of trading days in a year minDiff1 = lowest(diff1, lookbackPeriod) maxDiff1 = highest(diff1, lookbackPeriod) minDiff2 = lowest(diff2, lookbackPeriod) maxDiff2 = highest(diff2, lookbackPeriod) // Map differences based on requirements mappedDiff1 = 50 + 50 * ((diff1 - minDiff1) / (maxDiff1 - minDiff1)) mappedDiff2 = 50 - 50 * ((diff2 - minDiff2) / (maxDiff2 - minDiff2)) // Combine mapped differences into a single line mappedLine = if close > ema mappedDiff1 else mappedDiff2 // Plot 'mappedLine' in the main chart area conditionally plot(mappedLine, title="EMA Difference Mapping", color=(close > ema ? color.blue : na), style=plot.style_line, linewidth=2) // Calculate the 50EMA and 200SMA ema50 = ema(close, 50) sma200 = sma(close, 200) // Plot the 50EMA and 200SMA on the main chart plot(ema50, color=color.blue, title="50 SMA", linewidth=2) plot(sma200, color=color.red, title="200 SMA", linewidth=2) // Initialize trade variables var bool waitingForBuy = na var bool waitingForSell = na var bool buyConditionMet = false var bool sellConditionMet = false if not sellConditionMet and crossunder(ema50, sma200) sellConditionMet := true waitingForBuy := false if sellConditionMet waitingForSell := true sellConditionMet := false if waitingForSell and close < sma200 and mappedLine > 75 strategy.entry("Sell", strategy.short) strategy.exit("Sell Exit", "Sell", profit=takeProfitPoints, loss=stopLossPoints) waitingForSell := false // Define the strategy conditions and execute trades if not buyConditionMet and crossover(ema50, sma200) buyConditionMet := true waitingForSell := false if buyConditionMet waitingForBuy := true buyConditionMet := false if waitingForBuy and close > sma200 and mappedLine < 25 strategy.entry("Buy", strategy.long) strategy.exit("Buy Exit", "Buy", profit=takeProfitPoints, loss=stopLossPoints) waitingForBuy := false