
Chiến lược này là một hệ thống giao dịch dừng lỗ động dựa trên chỉ số RSI, kết hợp đường SMA và chỉ số ATR để tối ưu hóa quyết định giao dịch. Chiến lược sử dụng một chương trình dừng nhiều cấp để tối đa hóa lợi nhuận thông qua cách đặt hàng bằng kim tự tháp, đồng thời sử dụng dừng động ATR để kiểm soát rủi ro. Chiến lược có khả năng thích ứng cao, có thể tự động điều chỉnh các tham số giao dịch theo biến động của thị trường.
Chiến lược này dựa chủ yếu vào RSI oversold ((RSI <30) là tín hiệu mở vị trí và yêu cầu giá nằm trên đường trung bình 200 ngày để đảm bảo xu hướng tăng. Hệ thống sử dụng mục tiêu dừng ba lần ((5% , 10% , 15%) và kết hợp với dừng động ATR). Cụ thể:
Chiến lược này kết hợp các chỉ số kỹ thuật và quản lý rủi ro động, xây dựng một hệ thống giao dịch tương đối hoàn chỉnh. Ưu điểm của nó là khả năng thích ứng mạnh mẽ, rủi ro có thể kiểm soát được, nhưng vẫn cần tối ưu hóa các tham số dựa trên tình hình thị trường thực tế. Chiến lược phù hợp với nhà đầu tư trung hạn và dài hạn, có thể là điểm khởi đầu tốt cho giao dịch có hệ thống.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef
//@version=5
strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)
// Rsi
oversoldLevel = input(30, title="Oversold Level")
overboughtLevel = input(70, title="Overbought Level")
rsi = ta.rsi(close, 5)
rsi_overbought = rsi > overboughtLevel
rsi_oversold = rsi < oversoldLevel
// Sma 200
lenghtSMA = input(200, title = "SMA lenght")
sma200 = ta.sma(close, lenghtSMA)
// ATR stop-loss
atrLength = input.int(20, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
var float long_stop_level = na
var float short_stop_level = na
var float tp1_level = na
var float tp2_level = na
var float tp3_level = na
// Strategy entry
long = (rsi_oversold ) and close > sma200
// Take Profit levels
tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1)
tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1)
tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1)
if long
strategy.entry('Long', strategy.long)
long_stop_level := close - atrMultiplier * atrValue
tp1_level := strategy.position_avg_price * (1 + tp_1 / 100)
tp2_level := strategy.position_avg_price * (1 + tp_2 / 100)
tp3_level := strategy.position_avg_price * (1 + tp_3 / 100)
// basic SL - this code is from author RafaelZioni, modified by wielkieef
sl = input.float(25.0, 'Basic Stop Loss %', step=0.1)
per(procent) =>
strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
// ATR SL
if (strategy.position_size > 0 and (close <= long_stop_level))
strategy.close("Long")
tp1_level := na
tp2_level := na
tp3_level := na
plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss")
// TP levels
if (strategy.position_size > 0)
if (not na(tp1_level) and close >= tp1_level)
tp1_level := na
if (not na(tp2_level) and close >= tp2_level)
tp2_level := na
if (not na(tp3_level) and close >= tp3_level)
tp3_level := na
plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1")
plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2")
plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3")
// Strategy exit points for Take Profits
strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl))
strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl))
strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl))
// by wielkieef