Chiến lược này được đặt tên là
Các tín hiệu đầu vào của chiến lược này chủ yếu được xác định bởi chỉ số RSI và giao thoa MA. Các thông số RSI được thiết lập thành 2 giai đoạn để nhanh chóng nắm bắt các tình huống mua quá mức và bán quá mức cho các cơ hội đảo ngược. MA nhanh và MA chậm được thiết lập thành 50 và 200 giai đoạn tương ứng để xác định hướng xu hướng. Cụ thể, logic đầu vào là:
Đăng nhập dài: MA nhanh vượt trên MA chậm, giá vượt trên MA chậm và RSI dưới mức bán quá mức (thất định 10%); Nhập ngắn: MA nhanh vượt dưới MA chậm, giá dưới MA chậm, và RSI trên mức mua quá mức (thất định 90%).
Ngoài ra, có một bộ lọc biến động tùy chọn trong chiến lược. Nó tính toán sự khác biệt giữa các độ dốc của MAs nhanh và chậm. Các vị trí sẽ chỉ được mở khi sự khác biệt vượt quá ngưỡng. Mục đích là tránh mở các vị trí khi không có hướng rõ ràng trong biến động thị trường.
Về phía exit, chiến lược sử dụng tỷ lệ stoploss. Dựa trên tỷ lệ phần trăm đầu vào, nó tính toán giá stop loss kết hợp với kích thước tick, để điều chỉnh stop loss một cách năng động.
Những lợi thế chính của chiến lược này là:
Có một số rủi ro trong chiến lược này:
Các hướng tối ưu hóa rủi ro là:
Các hướng tối ưu hóa cho chiến lược này là:
Nói chung, đây là một xu hướng tương đối ổn định sau chiến lược. Bằng cách kết hợp hai chỉ số RSI và MA, nó đảm bảo sự ổn định nhất định trong khi nắm bắt các cơ hội đảo ngược xu hướng rõ ràng hơn. Bộ lọc biến động tránh một số rủi ro và tỷ lệ dừng lỗ cũng kiểm soát hiệu quả lỗ giao dịch duy nhất. Chiến lược này có thể được sử dụng như một chiến lược chung đa biểu tượng và cũng có thể được tối ưu hóa trên các tham số và mô hình cho các biểu tượng cụ thể để đạt được kết quả tốt hơn.
/*backtest start: 2023-11-11 00:00:00 end: 2023-12-11 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // Scalping strategy // © Lukescream and Ninorigo // (original version by Lukescream - lastest versions by Ninorigo) - v1.3 // //@version=4 strategy(title="Scalping using RSI 2 indicator", shorttitle="RSI 2 Strategy", overlay=true, pyramiding=0, process_orders_on_close=false) var bool ConditionEntryL = false var bool ConditionEntryS = false //*********** // Costants //*********** def_start_date = timestamp("01 Jan 2021 07:30 +0000") def_end_date = timestamp("01 Dec 2024 07:30 +0000") def_rsi_length = 2 def_overbought_value = 90 def_oversold_value = 10 def_slow_ma_length = 200 def_fast_ma_length = 50 def_ma_choice = "EMA" def_tick = 0.5 def_filter = true def_trailing_stop = 1 //*********** // Change the optional parameters //*********** start_time = input(title="Start date", defval=def_start_date, type=input.time) end_time = input(title="End date", defval=def_end_date, type=input.time) // RSI src = input(title="Source", defval=close, type=input.source) rsi_length = input(title="RSI Length", defval=def_rsi_length, minval=1, type=input.integer) overbought_threshold = input(title="Overbought threshold", defval=def_overbought_value, type=input.float) oversold_threshold = input(title="Oversold threshold", defval=def_oversold_value, type=input.float) // Moving average slow_ma_length = input(title="Slow MA length", defval=def_slow_ma_length, type=input.integer) fast_ma_length = input(title="Fast MA length", defval=def_fast_ma_length, type=input.integer) ma_choice = input(title="MA choice", defval="EMA", options=["SMA", "EMA"]) // Input ticker tick = input(title="Ticker size", defval=def_tick, type=input.float) filter = input(title="Trend Filter", defval=def_filter, type=input.bool) // Trailing stop (%) ts_rate = input(title="Trailing Stop %", defval=def_trailing_stop, type=input.float) //*********** // RSI //*********** // Calculate RSI up = rma(max(change(src), 0), rsi_length) down = rma(-min(change(src), 0), rsi_length) rsi = (down == 0 ? 100 : (up == 0 ? 0 : 100-100/(1+up/down))) //*********** // Moving averages //*********** slow_ma = (ma_choice == "SMA" ? sma(close, slow_ma_length) : ema(close, slow_ma_length)) fast_ma = (ma_choice == "SMA" ? sma(close, fast_ma_length) : ema(close, fast_ma_length)) // Show the moving averages plot(slow_ma, color=color.white, title="Slow MA") plot(fast_ma, color=color.yellow, title="Fast MA") //*********** // Strategy //*********** if true // Determine the entry conditions (only market entry and market exit conditions) // Long position ConditionEntryL := (filter == true ? (fast_ma > slow_ma and close > slow_ma and rsi < oversold_threshold) : (fast_ma > slow_ma and rsi < oversold_threshold)) // Short position ConditionEntryS := (filter == true ? (fast_ma < slow_ma and close < slow_ma and rsi > overbought_threshold) : (fast_ma < slow_ma and rsi > overbought_threshold)) // Calculate the trailing stop ts_calc = close * (1/tick) * ts_rate * 0.01 // Submit the entry orders and the exit orders // Long position if ConditionEntryL strategy.entry("RSI Long", strategy.long) // Exit from a long position strategy.exit("Exit Long", "RSI Long", trail_points=0, trail_offset=ts_calc) // Short position if ConditionEntryS strategy.entry("RSI Short", strategy.short) // Exit from a short position strategy.exit("Exit Short", "RSI Short", trail_points=0, trail_offset=ts_calc) // Highlights long conditions bgcolor (ConditionEntryL ? color.navy : na, transp=60, offset=1, editable=true, title="Long position band") // Highlights short conditions bgcolor (ConditionEntryS ? color.olive : na, transp=60, offset=1, editable=true, title="Short position band")