Chiến lược này là một hệ thống giao dịch khung thời gian kép dựa trên chỉ số SuperTrend và RSI. Nó kết hợp các chỉ số phân tích kỹ thuật từ các khung thời gian 120 phút và 15 phút, sử dụng SuperTrend để nắm bắt hướng xu hướng trung hạn trong khi sử dụng RSI để kiếm lợi nhuận. Chiến lược thực hiện định kích thước vị trí thông qua phân bổ tỷ lệ phần trăm và bao gồm các điều kiện lấy lợi nhuận dựa trên tỷ lệ phần trăm.
Logic cốt lõi được xây dựng trên một số yếu tố chính:
Đây là một chiến lược theo xu hướng có cấu trúc tốt với logic rõ ràng. Nó kết hợp các chỉ số kỹ thuật khung thời gian khác nhau để nắm bắt xu hướng trong khi duy trì kiểm soát rủi ro. Mặc dù có chỗ cho tối ưu hóa, thiết kế tổng thể phù hợp với các nguyên tắc giao dịch định lượng. Các nhà giao dịch nên kiểm tra lại và tối ưu hóa các tham số trước khi giao dịch trực tiếp và điều chỉnh kích thước vị trí theo khả năng dung nạp rủi ro của họ.
/*backtest start: 2024-10-01 00:00:00 end: 2024-10-31 23:59:59 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © felipemiransan //@version=5 strategy("Supertrend Strategy", overlay=true) // Function for Supertrend supertrend(_factor, _atrPeriod) => [out, _] = ta.supertrend(_factor, _atrPeriod) out // Supertrend Settings factor = input.float(3.42, title="Supertrend Factor") atrPeriod = input.int(14, title="ATR Period") tf2 = input.timeframe("120", title="Supertrend Timeframe") // RSI Settings rsi_tf = input.timeframe("15", title="RSI Timeframe") rsiLength = input.int(5, title="RSI Length") rsiUpper = input.int(95, title="RSI Upper Limit") rsiLower = input.int(5, title="RSI Lower Limit") // RSI Timeframe rsi_tf_value = request.security(syminfo.tickerid, rsi_tf, ta.rsi(close, rsiLength), lookahead=barmerge.lookahead_off, gaps=barmerge.gaps_off) // Supertrend Timeframe supertrend_tf2 = request.security(syminfo.tickerid, tf2, supertrend(factor, atrPeriod), lookahead=barmerge.lookahead_off, gaps=barmerge.gaps_off) // Take Profit Settings (Percentage in relation to the average price) takeProfitPercent = input.float(30, title="Take Profit", step=0.1) / 100 // Entry conditions based on price crossover with Supertrend Timeframe longCondition = ta.crossover(close, supertrend_tf2) and barstate.isconfirmed shortCondition = ta.crossunder(close, supertrend_tf2) and barstate.isconfirmed // Execution of reversal orders with closing of previous position if (longCondition) // Close a short position before opening a long position if (strategy.position_size < 0) strategy.close("Short", comment="Close Short for Long Entry") strategy.entry("Long", strategy.long) if (shortCondition) // Close long position before opening short position if (strategy.position_size > 0) strategy.close("Long", comment="Close Long for Short Entry") strategy.entry("Short", strategy.short) // Calculate take profit levels relative to the average entry price if (strategy.position_size > 0) takeProfitLong = strategy.position_avg_price * (1 + takeProfitPercent) strategy.exit("Take Profit Long", "Long", limit=takeProfitLong) if (strategy.position_size > 0 and (rsi_tf_value >= rsiUpper)) strategy.close("Long", comment="RSI Take Profit Long") if (strategy.position_size < 0) takeProfitShort = strategy.position_avg_price * (1 - takeProfitPercent) strategy.exit("Take Profit Short", "Short", limit=takeProfitShort) if (strategy.position_size < 0 and (rsi_tf_value <= rsiLower)) strategy.close("Short", comment="RSI Take Profit Short") // Plot Supertrend timeframe with commit check to avoid repainting plot(barstate.isconfirmed ? supertrend_tf2 : na, color=color.blue, title="Supertrend Timeframe (120 min)", linewidth=1) // Plot RSI for visualization plot(rsi_tf_value, "RSI", color=color.purple) hline(rsiUpper, "RSI Upper", color=color.red) hline(rsiLower, "RSI Lower", color=color.green)