Tài nguyên đang được tải lên... tải...

Chiến lược số lượng tăng giá quá mức của ATR Stop-Loss RSI

Tác giả:ChaoZhang, Ngày: 2024-11-29 16:18:55
Tags:RSISMAATRTPSL

img

Tổng quan

Chiến lược này là một hệ thống giao dịch định lượng dựa trên các tín hiệu bán quá mức RSI và dừng lỗ ATR động. Sử dụng dữ liệu khung thời gian hàng ngày, nó kết hợp các tín hiệu bán quá mức RSI với bộ lọc xu hướng trung bình động 200 ngày để nắm bắt các cơ hội phục hồi trong điều kiện thị trường bán quá mức. Chiến lược sử dụng cả cơ chế dừng lỗ ATR động và tỷ lệ dừng lỗ tĩnh, cùng với mục tiêu lợi nhuận ba lần được thực hiện thông qua giảm vị trí từng giai đoạn.

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

Logic cốt lõi bao gồm các yếu tố chính sau:

  1. Tín hiệu nhập cảnh: Hệ thống tạo ra các tín hiệu dài khi RSI ((5) giảm xuống dưới mức bán quá mức 30 và giá trên mức trung bình động 200 ngày.
  2. Cơ chế dừng lỗ: Kết hợp 1,5x ATR ((20) dừng lỗ động với 25% dừng lỗ cố định.
  3. Mục tiêu lợi nhuận: Đặt ba mục tiêu là 5%, 10% và 15%, giảm vị trí lần lượt 33%, 66% và 100%.
  4. Quản lý vị trí: Khuyến cáo sử dụng kích thước vị trí được tính theo tiêu chí Kelly là 59,13% hoặc kích thước vị trí 75% thận trọng.

Ưu điểm chiến lược

  1. Xác nhận xu hướng kép: Xác nhận các giao dịch thông qua cả xu hướng bán quá mức RSI và xu hướng trung bình động, cải thiện tỷ lệ thắng.
  2. Kiểm soát rủi ro linh hoạt: Đường dừng lỗ ATR động thích nghi với sự biến động của thị trường trong khi lệnh dừng lỗ cố định cung cấp bảo vệ tối đa.
  3. Quản lý lợi nhuận thông minh: Mục tiêu ba với giảm vị trí theo giai đoạn đảm bảo lợi nhuận trong khi duy trì tiềm năng tăng.
  4. Quản lý vốn khoa học: Tối ưu hóa kích thước vị trí bằng tiêu chí Kelly, cân bằng rủi ro và phần thưởng.

Rủi ro chiến lược

  1. Tùy thuộc vào xu hướng: Chiến lược có thể gây ra các điểm dừng thường xuyên trong các thị trường khác nhau. Lời khuyên: Thêm bộ lọc dao động để giảm tín hiệu sai.

  2. Lợi nhuận dừng thương mại rộng: Lợi nhuận dừng thương mại cố định 25% có thể dẫn đến tổn thất lớn trong giao dịch đơn. Lời khuyên: Điều chỉnh tỷ lệ dừng lỗ dựa trên khả năng chấp nhận rủi ro cá nhân.

  3. Nguy cơ rút vốn: Lấy lợi nhuận theo giai đoạn có thể giảm các vị trí quá sớm trong xu hướng mạnh. Lời khuyên: Xem xét mục tiêu lợi nhuận năng động hoặc giữ lại một phần để theo xu hướng.

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

  1. Tối ưu hóa tín hiệu:
  • Thêm xác nhận âm lượng
  • Bao gồm các chỉ số xu hướng như MACD
  • Thực hiện bộ lọc biến động
  1. Tối ưu hóa dừng lỗ:
  • Thực hiện tỷ lệ stoploss năng động
  • Thêm dừng dựa trên thời gian
  • Bao gồm các bộ lọc rủi ro-lợi nhuận
  1. Tối ưu hóa lợi nhuận:
  • Đặt các mục tiêu động dựa trên ATR
  • Thực hiện dừng lại
  • Tối ưu hóa tỷ lệ giảm vị trí

Tóm lại

Chiến lược này xây dựng một hệ thống giao dịch hoàn chỉnh bằng cách kết hợp các tín hiệu bán quá mức RSI với việc lọc xu hướng trung bình động, được bổ sung bằng các mục tiêu dừng lỗ và lợi nhuận gấp ba lần ATR năng động.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08: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

Có liên quan

Thêm nữa