Chiến lược này là một chiến lược giao dịch dựa trên Bollinger Bands và Stochastic Oscillator. Nó sử dụng Bollinger Bands để xác định phạm vi biến động của thị trường và sử dụng Stochastic Oscillator để đánh giá tình trạng mua quá nhiều và bán quá nhiều của thị trường. Khi giá vượt qua Bollinger Band trên, chiến lược sẽ đi dài; khi giá giảm xuống dưới Bollinger Band dưới, chiến lược sẽ đi ngắn. Đồng thời, chiến lược cũng sử dụng Stochastic Oscillator để lọc tín hiệu giao dịch để cải thiện độ chính xác và độ tin cậy của chiến lược.
Cốt lõi của chiến lược này là hai chỉ số kỹ thuật: Bollinger Bands và Stochastic Oscillator. Bollinger Bands bao gồm ba đường: dải giữa, dải trên và dải dưới. Dải giữa là một đường trung bình di chuyển đơn giản của giá, trong khi dải trên và dưới là dải giữa cộng và trừ một số lần số của độ lệch chuẩn của giá. Khi giá vượt trên dải trên, nó cho thấy thị trường có thể mua quá mức; khi giá giảm xuống dưới dải dưới, nó cho thấy thị trường có thể bán quá mức.
Đường %K đo vị trí của giá đóng trong mức giá cao nhất và thấp nhất trong một khoảng thời gian gần đây, và đường %D là trung bình động của đường %K. Khi đường %K vượt qua trên đường %D, nó cho thấy thị trường có thể mua quá mức; khi đường %K vượt qua dưới đường %D, nó cho thấy thị trường có thể bán quá mức.
Chiến lược này kết hợp hai chỉ số này. Khi giá vượt trên Bollinger Band trên và đường Stochastic Oscillator %K vượt trên đường %D, chiến lược sẽ dài; khi giá giảm xuống dưới Bollinger Band dưới và đường Stochastic Oscillator %K vượt dưới đường %D, chiến lược sẽ ngắn. Sự kết hợp này có thể nắm bắt hiệu quả xu hướng thị trường trong khi tránh giao dịch thường xuyên trên các thị trường biến động.
Chiến lược này là một chiến lược giao dịch đơn giản nhưng hiệu quả kết hợp hai chỉ số kỹ thuật cổ điển, Bollinger Bands và Stochastic Oscillator, để đạt được lợi nhuận ổn định trong cả trạng thái thị trường xu hướng và dao động.
/*backtest start: 2023-05-03 00:00:00 end: 2024-05-08 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Unique Bollinger Bands Strategy", overlay=true) src = input(close) length = input.int(34, minval=1) mult = input.float(2.0, minval=0.001, maxval=50) basis = ta.sma(src, length) dev = ta.stdev(src, length) dev2 = mult * dev upper1 = basis + dev lower1 = basis - dev upper2 = basis + dev2 lower2 = basis - dev2 colorBasis = src >= basis ? color.blue : color.orange pBasis = plot(basis, linewidth=2, color=colorBasis) pUpper1 = plot(upper1, color=color.new(color.blue, 0), style=plot.style_circles) pUpper2 = plot(upper2, color=color.new(color.blue, 0)) pLower1 = plot(lower1, color=color.new(color.orange, 0), style=plot.style_circles) pLower2 = plot(lower2, color=color.new(color.orange, 0)) fill(pBasis, pUpper2, color=color.new(color.blue, 80)) fill(pUpper1, pUpper2, color=color.new(color.blue, 80)) fill(pBasis, pLower2, color=color.new(color.orange, 80)) fill(pLower1, pLower2, color=color.new(color.orange, 80)) // Parameters bbLength = input.int(34, title="Length", minval=1) bbMultiplier = input.float(2.0, title="Multiplier", minval=0.001, maxval=50) // Source priceData = close // Unique name for price data source // Bollinger Bands Calculation bbBasis = ta.sma(priceData, bbLength) bbDeviation = ta.stdev(priceData, bbLength) bbDeviationMultiplied = bbMultiplier * bbDeviation bbUpperBand = bbBasis + bbDeviationMultiplied bbLowerBand = bbBasis - bbDeviationMultiplied // Plot Bollinger Bands plot(bbBasis, color=color.blue, linewidth=2) plot(bbUpperBand, color=color.blue) plot(bbLowerBand, color=color.orange) // Strategy Logic for Entry and Exit enterLong = ta.crossover(priceData, bbUpperBand) enterShort = ta.crossunder(priceData, bbLowerBand) // Enter Long when price crosses over upper band if (enterLong) strategy.entry("Long", strategy.long) // Enter Short when price crosses under lower band if (enterShort) strategy.entry("Short", strategy.short) // Close Long when Short condition is met (i.e., price under lower band) if (enterShort) strategy.close("Long") // Close Short when Long condition is met (i.e., price over upper band) if (enterLong) strategy.close("Short")