Chiến lược này là một hệ thống giao dịch định lượng kết hợp các băng tần Bollinger, Chỉ số sức mạnh tương đối (RSI) và Trung bình chi phí động (DCA). Chiến lược thực hiện xây dựng vị trí tự động thông qua các quy tắc quản lý tiền được thiết lập trong thời gian biến động của thị trường, đồng thời tích hợp các chỉ số kỹ thuật để xác định tín hiệu mua / bán để đạt được việc thực hiện rủi ro có kiểm soát. Hệ thống cũng bao gồm logic lấy lợi nhuận và chức năng theo dõi lợi nhuận tích lũy để giám sát và quản lý hiệu quả hiệu suất giao dịch.
Chiến lược hoạt động dựa trên các thành phần cốt lõi sau:
Chiến lược này xây dựng một hệ thống giao dịch toàn diện thông qua kết hợp các phương pháp phân tích kỹ thuật và quản lý tiền bạc. Sức mạnh của nó nằm trong xác nhận nhiều tín hiệu và quản lý rủi ro kỹ lưỡng, mặc dù nó vẫn đòi hỏi phải thử nghiệm và tối ưu hóa rộng rãi trong giao dịch trực tiếp. Thông qua việc cải thiện liên tục các thiết lập tham số và các chỉ số phụ trợ bổ sung, chiến lược cho thấy hứa hẹn cho hiệu suất ổn định trong giao dịch thực tế.
/*backtest start: 2023-11-27 00:00:00 end: 2024-11-26 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Combined BB RSI with Cumulative Profit, Market Change, and Futures Strategy (DCA)", shorttitle="BB RSI Combined DCA Strategy", overlay=true) // Input Parameters length = input.int(20, title="BB Length") // Adjusted BB length mult = input.float(2.5, title="BB Multiplier") // Adjusted BB multiplier rsiLength = input.int(14, title="RSI Length") // Adjusted RSI length rsiBuyLevel = input.int(25, title="RSI Buy Level") // Adjusted RSI Buy Level rsiSellLevel = input.int(75, title="RSI Sell Level") // Adjusted RSI Sell Level dcaPositionSizePercent = input.float(1, title="DCA Position Size (%)", tooltip="Percentage of equity to use in each DCA step") takeProfitPercentage = input.float(5, title="Take Profit (%)", tooltip="Take profit percentage for DCA strategy") // Calculate DCA position size equity = strategy.equity // Account equity dcaPositionSize = (equity * dcaPositionSizePercent) / 100 // DCA position size as percentage of equity // Bollinger Bands Calculation basis = ta.sma(close, length) dev = mult * ta.stdev(close, length) upper = basis + dev lower = basis - dev // RSI Calculation rsi = ta.rsi(close, rsiLength) // Plotting Bollinger Bands and RSI levels plot(upper, color=color.red, title="Bollinger Upper") plot(lower, color=color.green, title="Bollinger Lower") hline(rsiBuyLevel, "RSI Buy Level", color=color.green) hline(rsiSellLevel, "RSI Sell Level", color=color.red) // Buy and Sell Signals buySignal = (rsi < rsiBuyLevel and close <= lower) sellSignal = (rsi > rsiSellLevel and close >= upper) // DCA Strategy: Enter Long or Short based on signals with calculated position size if (buySignal) strategy.entry("DCA Buy", strategy.long) if (sellSignal) strategy.entry("DCA Sell", strategy.short) // Take Profit Logic if (strategy.position_size > 0) // If long strategy.exit("Take Profit Long", from_entry="DCA Buy", limit=close * (1 + takeProfitPercentage / 100)) if (strategy.position_size < 0) // If short strategy.exit("Take Profit Short", from_entry="DCA Sell", limit=close * (1 - takeProfitPercentage / 100)) // Plot Buy/Sell Signals on the chart plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", textcolor=color.white) plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", textcolor=color.white) // Alerts for Buy/Sell Signals alertcondition(buySignal, title="Buy Alert", message="Buy Signal Detected") alertcondition(sellSignal, title="Sell Alert", message="Sell Signal Detected") // Cumulative Profit Calculation var float buyPrice = na var float profit = na var float cumulativeProfit = 0.0 // Cumulative profit tracker if (buySignal) buyPrice := close if (sellSignal and not na(buyPrice)) profit := (close - buyPrice) / buyPrice * 100 cumulativeProfit := cumulativeProfit + profit // Update cumulative profit label.new(bar_index, high, text="P: " + str.tostring(profit, "#.##") + "%", color=color.blue, style=label.style_label_down) buyPrice := na // Reset buyPrice after sell // Plot cumulative profit on the chart var label cumulativeLabel = na if (not na(cumulativeProfit)) if not na(cumulativeLabel) label.delete(cumulativeLabel) cumulativeLabel := label.new(bar_index, high + 10, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "%", color=color.purple, style=label.style_label_up) // Market Change over 3 months Calculation threeMonthsBars = 3 * 30 * 24 // Approximation of 3 months in bars (assuming 1 hour per bar) priceThreeMonthsAgo = request.security(syminfo.tickerid, "D", close[threeMonthsBars]) marketChange = (close - priceThreeMonthsAgo) / priceThreeMonthsAgo * 100 // Plot market change over 3 months var label marketChangeLabel = na if (not na(marketChange)) if not na(marketChangeLabel) label.delete(marketChangeLabel) marketChangeLabel := label.new(bar_index, high + 20, text="Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.orange, style=label.style_label_up) // Both labels (cumulative profit and market change) are displayed simultaneously var label infoLabel = na if (not na(cumulativeProfit) and not na(marketChange)) if not na(infoLabel) label.delete(infoLabel) infoLabel := label.new(bar_index, high + 30, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "% | Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.purple, style=label.style_label_upper_right)