Chiến lược đánh dấu hồ sơ dao động 3 10 tạo ra tín hiệu giao dịch bằng cách tính toán sự khác biệt giữa trung bình di chuyển đơn giản 3 ngày và 10 ngày như chỉ số MACD và kết hợp phân tích khối lượng để xác định sức mạnh của người mua và người bán trên thị trường. Chiến lược cũng kết hợp xác nhận các cơ hội nhập và xuất bằng cách sử dụng các khu vực giá chính, đặc điểm khối lượng và đảo ngược chỉ số MACD.
Chỉ số cốt lõi của chiến lược này là MACD, bao gồm đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm. Đường nhanh là đường trung bình di chuyển đơn giản 3 ngày và đường chậm là đường trung bình di chuyển đơn giản 10 ngày. Sự khác biệt giữa chúng tạo thành biểu đồ MACD. Khi đường nhanh vượt qua đường chậm từ dưới, nó đại diện cho sức mua tăng và tạo ra tín hiệu mua. Ngược lại, khi đường nhanh vượt qua đường chậm từ trên, sức bán đang tăng và tín hiệu bán được tạo ra.
Ngoài ra, chiến lược bao gồm phân tích sức mạnh tương đối của khối lượng mua và bán dựa trên mối quan hệ kích thước giữa khối lượng mua và khối lượng bán của mỗi cây nến. Phương pháp cụ thể là: khối lượng mua = khối lượng x (Close - Low) ÷ (High - Low); khối lượng bán = khối lượng x (High - Close) ÷ (High - Low). Nếu khối lượng mua lớn hơn đáng kể khối lượng bán, điều đó có nghĩa là cây nến đóng với sức mua tương đối mạnh, đó là tín hiệu mua.
Bằng cách kết hợp chỉ số MACD và phân tích khối lượng, chiến lược có thể xác định hiệu quả mối quan hệ cung và cầu và hướng chờ đợi trên thị trường. Đồng thời, chiến lược cũng xác minh các điều kiện như liệu giá có ở một khu vực chính, liệu MACD có đảo ngược hiệu quả hay không, và liệu sự khác biệt giữa khối lượng mua và bán có đủ lớn, để lọc ra một số tiếng ồn bốc và đảm bảo khả năng và hiệu quả cao.
Lợi thế lớn nhất của chiến lược này là nó kết hợp hoàn toàn phán đoán về mối quan hệ cung và cầu trên thị trường. Biểu đồ MACD có thể xác định hiệu quả sự tương phản giữa sức mua và sức bán và hướng đang chờ trong thị trường; phân tích chênh lệch khối lượng có thể xác định rõ ràng sức mạnh thống trị giữa người mua và người bán. Đồng thời, chiến lược đặt nhiều điều kiện để xem xét để tránh theo đuổi tăng và đánh bại giảm, đảm bảo xác suất lợi nhuận tương đối cao. Ngoài ra, cơ chế dừng lợi nhuận và dừng lỗ tích hợp của chiến lược cũng có thể hạn chế lỗ đơn lẻ.
Các rủi ro trên có thể được tránh bằng cách: xác định chính xác xu hướng chính của thị trường để tránh sử dụng chiến lược này trong thời gian biến động thị trường; chú ý đến thông tin thị trường để xác định khối lượng giao dịch bị thổi phồng nhân tạo; điều chỉnh các tham số một cách cẩn thận hoặc tìm lời khuyên từ các chuyên gia.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Tóm lại, có thể thấy rằng có rất nhiều không gian để tối ưu hóa chiến lược này. Các nhà đầu tư có thể thực hiện các điều chỉnh và cải tiến thích hợp theo hoàn cảnh và điều kiện thị trường của riêng họ để đạt được hiệu quả chiến lược tốt hơn.
Chiến lược đánh dấu hồ sơ dao động 3 10 tích hợp thành công các ý tưởng phân tích MACD, so sánh khối lượng và xác minh lọc đa điều kiện. Nó có khả năng mạnh mẽ trong việc xác định mối quan hệ cung-nhu cầu và hướng chờ thị trường, đồng thời kiểm soát rủi ro thông qua các cơ chế dừng lợi nhuận và dừng lỗ tích hợp. Chiến lược có không gian tối ưu hóa lớn và triển vọng ứng dụng rộng đáng được xem xét và nghiên cứu sâu sắc cho các nhà đầu tư.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 Oscillator Profile Flagging", overlay=true) signalBiasValue = input(title="Signal Bias", defval=0.26) macdBiasValue = input(title="MACD Bias", defval=0.8) shortLookBack = input( title="Short LookBack", defval=3) longLookBack = input( title="Long LookBack", defval=10) takeProfit = input( title="Take Profit", defval=0.75) stopLoss = input( title="Stop Loss", defval=0.5) 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(macdSlope, color=color.red, title="Total Volume") //plot(signalSlope, color=color.green, title="Total Volume") intrabarRange = high - low getLookBackSlope(lookBack) => signal - signal[lookBack] 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 float s = 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 - signalBiasValue ) j += 1 j getSignalNoBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] < signalBiasValue and signal[i] > ( 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 and signalSlope[1] > 0 bool isNegativeMacdReversal = macdSlope < 0 and macdSlope[1] > 0 bool isPositiveSignalReversal = signalSlope > 0 and signalSlope[1] < 0 bool isPositiveMacdReversal = macdSlope > 0 and macdSlope[1] < 0 bool hasBearInversion = signalSlope > 0 and macdSlope < 0 bool hasBullInversion = signalSlope < 0 and macdSlope > 0 bool hasSignalBias = math.abs(signal) >= signalBiasValue bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0 - signalBiasValue ) bool hasSignalBuyerBias = hasSignalBias and signal > 0 bool hasSignalSellerBias = hasSignalBias and signal < 0 bool hasPositiveMACDBias = macd > macdBiasValue bool hasNegativeMACDBias = macd < ( 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 ) // 7.48 Profit 52.5% if ( hasSignificantBuyerVolBias and getPriceRising(shortLookBack) == shortLookBack and getBuyerVolBias(shortLookBack) == shortLookBack and hasPositiveMACDBias and hasBullInversion) strategy.entry("Short1", strategy.short, qty=10) strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss) // 32.53 Profit 47.91% if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias) strategy.entry("Long1", strategy.long, qty=10) strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)