Chiến lược này là một hệ thống giao dịch theo xu hướng chỉ số đa kỹ thuật kết hợp Bollinger Bands, chỉ số xu hướng, chỉ số động lực và chỉ số biến động, đưa ra quyết định giao dịch thông qua phân tích giá-tháng lượng. Chiến lược này sử dụng Bollinger Bands breakout như là tín hiệu đầu tiên, kết hợp với xác nhận sức mạnh xu hướng ADX và xác minh khối lượng, sử dụng MACD và ATR trailing stop như cơ chế thoát.
Logic cốt lõi của chiến lược dựa trên các khía cạnh sau: 1. Sử dụng Bollinger Bands như một tham chiếu cho phạm vi biến động giá, tìm kiếm các cơ hội dài khi giá phá vỡ trên dải trên và cơ hội ngắn khi nó phá vỡ dưới dải dưới Sử dụng chỉ số ADX để đánh giá sức mạnh xu hướng, chỉ mở các vị trí khi xu hướng đủ mạnh (ADX>25) 3. Yêu cầu tăng khối lượng (1,5 lần so với khối lượng trung bình 20 ngày) để xác nhận tính hợp lệ của sự phá vỡ giá 4. Sử dụng chỉ số SuperTrend như bộ lọc hướng xu hướng, chỉ nhập vị trí khi giá nằm ở phía bên phải của đường xu hướng 5. Sử dụng MACD death cross, ATR trailing stop, hoặc ADX suy yếu như điều kiện thoát
Đây là một chiến lược theo xu hướng đa chỉ số được thiết kế tốt, xây dựng một hệ thống giao dịch kết hợp theo xu hướng và kiểm soát rủi ro thông qua tích hợp hữu cơ các dải Bollinger, ADX, SuperTrend, MACD và các chỉ số khác.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-10 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Nifty Options Trendy Markets with TSL", overlay=true) // Input Parameters lengthBB = input(20, title="Bollinger Bands Length") multBB = input(2.0, title="Bollinger Bands Multiplier") adxLength = input(14, title="ADX Length") adxThreshold = input(25, title="ADX Entry Threshold") adxExitThreshold = input(20, title="ADX Exit Threshold") superTrendLength = input(10, title="Supertrend Length") superTrendMultiplier = input(3.0, title="Supertrend Multiplier") macdFast = input(12, title="MACD Fast Length") macdSlow = input(26, title="MACD Slow Length") macdSignal = input(9, title="MACD Signal Length") atrLength = input(14, title="ATR Length") atrMultiplier = input(1.5, title="Trailing Stop ATR Multiplier") volumeSpikeMultiplier = input(1.5, title="Volume Spike Multiplier") // Calculations [macdLine, signalLine,_ ] = ta.macd(close, macdFast, macdSlow, macdSignal) macdCrossover = ta.crossover(macdLine, signalLine) macdCrossunder = ta.crossunder(macdLine, signalLine) [middleBB,upperBB,lowerBB] = ta.bb(close, lengthBB, multBB) [supertrend, direction] = ta.supertrend(superTrendMultiplier,superTrendLength) len = input.int(17, minval=1, title="DI Length") lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50) [diplus, diminus, adx] = ta.dmi(len, lensig) atr = ta.atr(atrLength) trailingStopLong = close - atr * atrMultiplier // For long trades trailingStopShort = close + atr * atrMultiplier // For short trades volumeSpike = volume > ta.sma(volume, 20) * volumeSpikeMultiplier // Entry Conditions longEntry = ta.crossover(close, upperBB) and adx > adxThreshold and volumeSpike and close > supertrend shortEntry = ta.crossunder(close, lowerBB) and adx > adxThreshold and volumeSpike and close < supertrend // Exit Conditions longExit = ta.crossunder(macdLine, signalLine) or close < trailingStopLong or adx < adxExitThreshold shortExit = ta.crossover(macdLine, signalLine) or close > trailingStopShort or adx < adxExitThreshold // Strategy Entries and Exits if (longEntry) strategy.entry("Long", strategy.long) if (shortEntry) strategy.entry("Short", strategy.short) if (longExit) strategy.close("Long") if (shortExit) strategy.close("Short") // Plotting plot(supertrend, color=color.blue, style=plot.style_line, linewidth=2, title="Supertrend Line") plot(trailingStopLong, title="Trailing Stop for Long", color=color.green, style=plot.style_line) plot(trailingStopShort, title="Trailing Stop for Short", color=color.red, style=plot.style_line) bgcolor(longEntry ? color.new(color.green, 90) : shortEntry ? color.new(color.red, 90) : na, title="Background for Entry") // Alerts alertcondition(longEntry, title="Long Entry", message="Buy Call: Long entry conditions met") alertcondition(shortEntry, title="Short Entry", message="Buy Put: Short entry conditions met") alertcondition(longExit, title="Long Exit", message="Exit Call: Long exit conditions met") alertcondition(shortExit, title="Short Exit", message="Exit Put: Short exit conditions met")