Chiến lược này sử dụng trung bình di chuyển nhanh 3 ngày, trung bình di chuyển chậm 10 ngày và trung bình di chuyển làm mịn tín hiệu 16 ngày để xây dựng chỉ số MACD, được bổ sung bằng chỉ số RSI và các đặc điểm khối lượng, và thiết lập các đặc điểm đường K đa chiều để xác định sự mở rộng quá mức của xu hướng thị trường, hình thành xu hướng dao động dải và đảo ngược các mục dài hoặc ngắn để lấy lợi nhuận.
Chiến lược này nhằm mục đích nắm bắt sự đảo ngược giá nhanh chóng từ mức mua quá mức hoặc bán quá mức tại địa phương.
Chiến lược này chủ yếu sử dụng trung bình di chuyển nhanh 3 ngày trừ trung bình di chuyển chậm 10 ngày để tạo ra chỉ số MACD, với đường tín hiệu 16 ngày để làm mịn, tạo thành một chiến lược MACD tiêu chuẩn. Nó cũng kết hợp phân tích khối lượng của khối lượng mua và bán để xác định đặc điểm động lực. Chỉ số RSI được giới thiệu để xác định mức mua quá mức hoặc bán quá mức. Thông qua sự kết hợp của nhiều chỉ số, nó đánh giá đặc điểm thị trường và phát hiện những thay đổi trong xu hướng dao động khoảng để xây dựng các tín hiệu nhập cảnh.
Đặc biệt, bằng cách quan sát mối quan hệ giữa đường MACD và đường tín hiệu, cũng như sự thay đổi độ dốc, nó xác định dòng chảy và dòng chảy của các lực tăng và giảm để phát hiện cơ hội đảo ngược. Đồng thời, thay đổi khối lượng mua và bán phản ánh sự thay đổi trong đà tăng và giảm. Kết hợp với những thay đổi trong chỉ số RSI để xác định điều kiện mua quá mức và bán quá mức, các chỉ số này cho phép chúng ta xác định các tính năng hồ sơ thị trường địa phương và thời gian đảo ngược tiềm năng.
Chiến lược đặt ra tổng cộng 3 tín hiệu nhập cảnh:
Long khi khối lượng mua không có lợi thế so với khối lượng bán, chỉ số RSI dưới 41 trong khi tăng, tín hiệu MACD không có độ lệch đáng kể;
Long khi khối lượng mua mạnh hơn khối lượng bán, RSI trong phạm vi 45-55 và tăng, MACD và đường tín hiệu di chuyển lên đồng thời;
Mới khi MACD vượt quá ngưỡng trong khi tăng.
Ba kịch bản này đều phản ánh sự dao động trong phạm vi địa phương trong sự mở rộng quá mức theo hướng, được đánh giá là thời gian đảo ngược thích hợp cho các mục nhập theo hướng ngược.
Các lối ra được đặt là Take profit (lệnh giới hạn) và Stop loss, để kiểm soát rút tiền và thực hiện lợi nhuận.
Chiến lược này kết hợp nhiều chỉ số để xác định các điều kiện dao động và mua quá mức / bán quá mức, với một logic lợi nhuận đảo ngược rõ ràng. Nó sử dụng phân tích khối lượng để xác nhận thêm về các mục nhập.
Cụ thể, những lợi thế bao gồm:
MACD như là bộ dao động động lượng khối lượng cân nhắc, tránh phân tích kỹ thuật đơn giản;
Các điều kiện về khối lượng làm tăng khả năng nhập cảnh;
RSI giúp phát hiện các sự đảo ngược tiềm năng;
Dừng lỗ và lấy lợi nhuận kiểm soát rút tiền quá mức và khóa trong một số lợi nhuận.
Mặc dù kết hợp các chỉ số để cải thiện tỷ lệ chiến thắng, tất cả các chiến lược đều có rủi ro.
Khả năng tín hiệu sai, chẳng hạn như tiếp tục sau khi đảo ngược ban đầu;
Các thiết lập dừng lỗ và lấy lợi nhuận không đầy đủ dẫn đến việc rút tiền quá lớn và không thể khóa lợi nhuận;
Điều chỉnh tham số như chiều dài MA, thời gian RSI, tỷ lệ lợi nhuận có thể cần tối ưu hóa thêm.
Những rủi ro này có thể được giảm thiểu thông qua tối ưu hóa bổ sung.
Vẫn còn chỗ cho việc tối ưu hóa hơn nữa, chủ yếu là:
Kiểm tra các kết hợp tham số MA khác nhau để có kết quả tốt nhất;
Kiểm tra các khoảng thời gian tìm kiếm RSI để tìm ra người đánh giá mua quá mức tối ưu / bán quá mức;
Tối ưu hóa tỷ lệ thu lợi nhuận và dừng lỗ để cân bằng các khoản rút và thu lợi nhuận;
Giới thiệu các mô hình học máy, tận dụng nhiều dữ liệu hơn để giảm các đánh giá sai và cải thiện tỷ lệ chiến thắng.
Những điều này có thể được thực hiện thông qua các thử nghiệm hậu quả có hệ thống hơn. Khi không gian tham số mở rộng và quy mô mẫu tăng lên, tỷ lệ chiến thắng chiến lược và lợi nhuận cũng sẽ được cải thiện.
Chiến lược này kết hợp MACD, RSI và phân tích khối lượng để xác định các tính năng phạm vi thị trường, thiết lập các mục vào các vùng đảo ngược để nắm bắt các động thái đảo ngược.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("3 1 Oscillator Profile Flagging", shorttitle="3 1 Oscillator Profile Flagging", overlay=false) signalBiasValue = input(title="Signal Bias", defval=0.26) macdBiasValue = input(title="MACD Bias", defval=0.7) shortLookBack = input( title="Short LookBack", defval=3) longLookBack = input( title="Long LookBack", defval=6) takeProfit = input( title="Take Profit", defval=2) stopLoss = input( title="Stop Loss", defval=0.7) fast_ma = ta.sma(close, 3) slow_ma = ta.sma(close, 10) macd = fast_ma - slow_ma signal = ta.sma(macd, 16) hline(0, "Zero Line", color = color.black) buyVolume = volume*((close-low)/(high-low)) sellVolume = volume*((high-close)/(high-low)) buyVolSlope = buyVolume - buyVolume[1] sellVolSlope = sellVolume - sellVolume[1] signalSlope = ( signal - signal[1] ) macdSlope = ( macd - macd[1] ) plot(macd, color=color.blue, title="Total Volume") plot(signal, color=color.orange, title="Total Volume") plot(macdSlope, color=color.green, title="MACD Slope") plot(signalSlope, color=color.red, title="Signal Slope") intrabarRange = high - low rsi = ta.rsi(close, 14) rsiSlope = rsi - rsi[1] plot(rsiSlope, color=color.black, title="RSI Slope") getRSISlopeChange(lookBack) => j = 0 for i = 0 to lookBack if ( rsi[i] - rsi[ i + 1 ] ) > -5 j += 1 j getBuyerVolBias(lookBack) => j = 0 for i = 1 to lookBack if buyVolume[i] > sellVolume[i] j += 1 j getSellerVolBias(lookBack) => j = 0 for i = 1 to lookBack if sellVolume[i] > buyVolume[i] j += 1 j getVolBias(lookBack) => float b = 0.0 float s = 0.0 for i = 1 to lookBack b += buyVolume[i] s += sellVolume[i] b > s getSignalBuyerBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] > signalBiasValue j += 1 j getSignalSellerBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] < ( 0.0 - signalBiasValue ) j += 1 j getSignalNoBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] < signalBiasValue and signal[i] > ( 0.0 - signalBiasValue ) j += 1 j getPriceRising(lookBack) => j = 0 for i = 1 to lookBack if close[i] > close[i + 1] j += 1 j getPriceFalling(lookBack) => j = 0 for i = 1 to lookBack if close[i] < close[i + 1] j += 1 j getRangeNarrowing(lookBack) => j = 0 for i = 1 to lookBack if intrabarRange[i] < intrabarRange[i + 1] j+= 1 j getRangeBroadening(lookBack) => j = 0 for i = 1 to lookBack if intrabarRange[i] > intrabarRange[i + 1] j+= 1 j bool isNegativeSignalReversal = signalSlope < 0.0 and signalSlope[1] > 0.0 bool isNegativeMacdReversal = macdSlope < 0.0 and macdSlope[1] > 0.0 bool isPositiveSignalReversal = signalSlope > 0.0 and signalSlope[1] < 0.0 bool isPositiveMacdReversal = macdSlope > 0.0 and macdSlope[1] < 0.0 bool hasBearInversion = signalSlope > 0.0 and macdSlope < 0.0 bool hasBullInversion = signalSlope < 0.0 and macdSlope > 0.0 bool hasSignalBias = math.abs(signal) >= signalBiasValue bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0.0 - signalBiasValue ) bool hasSignalBuyerBias = hasSignalBias and signal > 0.0 bool hasSignalSellerBias = hasSignalBias and signal < 0.0 bool hasPositiveMACDBias = macd > macdBiasValue bool hasNegativeMACDBias = macd < ( 0.0 - macdBiasValue ) bool hasBullAntiPattern = ta.crossunder(macd, signal) bool hasBearAntiPattern = ta.crossover(macd, signal) bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 ) bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 ) // 202.30 Profit 55.29% 5m if ( ( getVolBias(longLookBack) == false ) and rsi <= 41 and math.abs(rsi - rsi[shortLookBack]) > 1 and hasNoSignalBias and rsiSlope > 1.5 and close > open) strategy.entry("5C1", strategy.long, qty=1) strategy.exit("TPS", "5C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss) // 171.70 Profit 50.22% 5m if ( getVolBias(longLookBack) == true and rsi > 45 and rsi < 55 and macdSlope > 0 and signalSlope > 0) strategy.entry("5C2", strategy.long, qty=1) strategy.exit("TPS", "5C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss) // 309.50 Profit 30.8% 5m 2 tp .7 sl 289 trades if ( macd > macdBiasValue and macdSlope > 0) strategy.entry("5P1", strategy.short, qty=1) strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)