
Chiến lược này được gọi là chiến lược dừng theo dõi xu hướng dựa trên chỉ số RSI. Chiến lược này sử dụng chỉ số RSI để xác định trường hợp quá mua quá bán, kết hợp với chỉ số MA nhanh và chậm để xác định hướng xu hướng, đặt điều kiện vào.
Chiến lược này chủ yếu sử dụng chỉ số RSI và chỉ số MA để xác định thời gian vào thị trường. Các tham số của chỉ số RSI được thiết lập là 2 chu kỳ, để xác định tình trạng quá mua quá bán.
Thêm đầu vào: Thêm đầu vào khi giá cao hơn MA chậm trên MA nhanh và RSI thấp hơn khu vực bán tháo (bằng 10%)
Bước vào đầu rỗng: Bước vào đầu rỗng dưới MA nhanh và giá thấp hơn MA chậm, đồng thời RSI cao hơn vùng mua quá mức (bước vào đầu rỗng là 90%).
Ngoài ra, chiến lược cũng thiết lập một bộ lọc tỷ lệ dao động tùy chọn. Bộ lọc này tính toán chênh lệch độ của MA một cách nhanh chóng và chỉ mở vị trí khi chênh lệch vượt quá ngưỡng thiết lập. Mục đích của nó là để tránh mở vị trí khi không có định hướng rõ ràng trong giai đoạn biến động giá.
Trên exit, chiến lược sử dụng phương thức theo dõi tỷ lệ phần trăm. Dựa trên tỷ lệ phần trăm của đầu vào, kết hợp với mỗi chênh lệch giá nhảy để tính giá dừng, thực hiện động điều chỉnh dừng.
Chiến lược này có những lợi thế chính như sau:
Chiến lược này cũng có một số rủi ro, đặc biệt là:
Đối với các rủi ro trên, có thể tối ưu hóa theo các khía cạnh sau:
Chiến lược này có thể được tối ưu hóa bằng cách:
Chiến lược này nói chung là một chiến lược theo dõi xu hướng ổn định hơn. Nó kết hợp với phán đoán của chỉ số kép RSI và MA, đồng thời đảm bảo sự ổn định nhất định, cũng có thể bắt được cơ hội đảo ngược xu hướng rõ ràng hơn. Đồng thời, thiết lập bộ lọc tỷ lệ dao động có thể tránh một phần rủi ro, phương pháp dừng lỗ phần trăm cũng có thể kiểm soát hiệu quả tổn thất đơ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")