Mô hình ba yếu tố để phát hiện dao động giá là một chiến lược giao dịch ngắn hạn tích hợp nhiều yếu tố để đánh giá. Chiến lược này tính đến các yếu tố như tỷ lệ khối lượng, RSI, MACD và đường tín hiệu để phát hiện dao động giá và khám phá cơ hội giao dịch ngắn hạn.
Logic cốt lõi của chiến lược này là:
Tính toán các chỉ số kỹ thuật như MA nhanh, MA chậm, MACD và đường tín hiệu;
Đánh giá nhiều yếu tố bao gồm tỷ lệ khối lượng, RSI, MACD và đường tín hiệu;
Xác nhận giai đoạn dao động giá hiện tại và các cơ hội mua/bán dựa trên phân tích nhiều yếu tố;
Lấy các vị trí LONG hoặc SHORT và đặt lấy lợi nhuận và dừng lỗ;
Đóng các vị trí khi giá đạt mức lấy lợi nhuận hoặc dừng lỗ.
Chiến lược này sử dụng các yếu tố linh hoạt như tỷ lệ khối lượng, RSI, MACD và đường tín hiệu để phát hiện dao động giá và nắm bắt các cơ hội ngắn hạn. Sự kết hợp của nhiều yếu tố giúp tránh tín hiệu sai từ một yếu tố duy nhất và cải thiện độ chính xác.
Những lợi thế của chiến lược này:
Những rủi ro của chiến lược này:
Để giải quyết các rủi ro trên, các tối ưu hóa có thể được thực hiện trong:
Các hướng tối ưu hóa chính:
Tối ưu hóa cân nặng yếu tố một cách năng động. Các cân nặng có thể được điều chỉnh dựa trên điều kiện thị trường để cải thiện khả năng thích nghi;
giới thiệu các thuật toán học máy để đạt được tối ưu hóa thích nghi của các yếu tố. Các thuật toán như mạng thần kinh và thuật toán di truyền có thể được sử dụng để đào tạo mô hình và tối ưu hóa các thông số;
Tối ưu hóa các chiến lược dừng lỗ. Các kết hợp khác nhau của việc theo dõi dừng lỗ và dừng lỗ di chuyển có thể được thử nghiệm để tìm ra giải pháp tốt nhất;
Bao gồm các chỉ số kỹ thuật tiên tiến. Nhiều chỉ số như biến động biến động và dao động động lực có thể làm phong phú các yếu tố.
Mô hình ba yếu tố để phát hiện dao động giá sử dụng đầy đủ các đặc điểm của dao động giá để thực hiện một chiến lược giao dịch ngắn hạn hiệu quả. Nó đánh giá các điểm vào và ra tốt nhất dựa trên nhiều yếu tố như khối lượng, RSI, MACD và đường tín hiệu. Nhiều yếu tố tăng độ chính xác và dẫn đến lợi nhuận ổn định.
/*backtest start: 2024-01-26 00:00:00 end: 2024-02-25 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("3 10.0 Oscillator Profile Flagging", shorttitle="3 10.0 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.0) 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.0) 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.0) strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)