Chiến lược giao dịch thông minh dừng lỗ động RSI

RSI SMA ATR
Ngày tạo: 2024-11-12 11:39:06 sửa đổi lần cuối: 2024-11-12 11:39:06
sao chép: 2 Số nhấp chuột: 503
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch thông minh dừng lỗ động RSI

Tổng quan

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.

Nguyên tắc chiến lược

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ể:

  1. Điều kiện nhập cảnh: RSI dưới 30 và giá trên SMA200
  2. Quản lý vị trí: 75% số tiền sử dụng trong một lần mở vị trí
  3. Cài đặt dừng lỗ: Động lực dừng lỗ dựa trên giá trị ATR 1,5 lần
  4. Chiến lược dừng chân: thiết lập ba điểm dừng chân ở vị trí 5%, 10% và 15%, theo tỷ lệ 33%, 66% và 100%

Lợi thế chiến lược

  1. Quản lý rủi ro động: Thích ứng với biến động thị trường thông qua ATR
  2. Bỏ bớt sự rối loạn cảm xúc và tăng khả năng kiếm tiền
  3. Xác định xu hướng: Phím tín hiệu giả bằng cách sử dụng đường đồng nhất
  4. Quản lý tiền: Kiểm soát tỷ lệ phần trăm để phù hợp với quy mô tài khoản khác nhau
  5. Tối ưu hóa hoa hồng: Ghi nhớ chi phí giao dịch, gần gũi hơn với giao dịch thực tế

Rủi ro chiến lược

  1. Sự chậm trễ của đường trung bình có thể gây ra sự chậm trễ trong nhập cảnh
  2. RSI vượt trội không nhất thiết là đảo ngược
  3. Một tỷ lệ lớn các vị trí có thể dẫn đến một sự rút lui lớn hơn
  4. Việc ngăn chặn hàng hóa có thể làm tăng chi phí giao dịch Những rủi ro này nên được quản lý bằng cách điều chỉnh các tham số và thêm các điều kiện lọc.

Hướng tối ưu hóa chiến lược

  1. Tăng tín hiệu xác nhận âm lượng
  2. Giới thiệu Chỉ báo Sức mạnh Xu hướng
  3. Tối ưu hóa phân phối tỷ lệ chốt
  4. Thêm bộ lọc thời gian
  5. Xem xét thêm quản lý vị trí thích ứng với tỷ lệ biến động

Tóm tắt

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.

Mã nguồn chiến lược
/*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