Chiến lược định lượng tấn công đáy

Tác giả:ChaoZhang, Ngày: 2024-01-18 16:25:33
Tags:

img

Tổng quan

Chiến lược này xác định đáy ngắn hạn bằng cách phát hiện khối lượng nổi bật trong xu hướng giảm, và có các vị trí dài trong điều kiện bán quá mức.

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

Khi khối lượng vượt quá 2 độ lệch chuẩn trên khối lượng trung bình dựa trên SMA, nó được coi là khối lượng tồn tại. Trong khi đó, chỉ số RSI dưới 30 cho thấy tình trạng bán quá mức. Khi cả hai điều kiện được đáp ứng, nó được đánh giá là đáy ngắn hạn và vị trí dài được thực hiện ngay lập tức. Vị trí sẽ được đóng sau một khoảng thời gian nhất định (ví dụ: 10 thanh).

Vì vậy, logic của chiến lược này rất đơn giản:

  1. Tính toán SMA khối lượng 20 bar làm điểm chuẩn
  2. Tính toán 2 độ lệch chuẩn của khối lượng 20 bar làm ngưỡng cho khối lượng còn tồn tại
  3. Tính toán chỉ số RSI 20 bar để đánh giá tình trạng bán quá mức
  4. Khi khối lượng vượt quá điểm chuẩn + 2 độ lệch chuẩn và RSI < 30, đánh giá là đáy ngắn hạn
  5. Lấy vị trí dài ngay dưới cùng.
  6. Chặn vị trí sau 10 bar tự động

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Logic đơn giản, dễ hiểu và tối ưu hóa
  2. Sử dụng khối lượng nổi bật để phát hiện các điểm chuyển đổi ngắn hạn
  3. RSI đảm bảo chỉ mua dài trong khu vực bán quá mức, tránh theo đuổi đỉnh
  4. Stop loss tự động tối đa hóa việc tránh rủi ro ở đáy

Tóm lại, chiến lược này tận dụng lợi thế của việc phá vỡ khối lượng để nắm bắt sự đảo ngược xu hướng, trong khi kiểm soát rủi ro nghiêm ngặt.

Phân tích rủi ro

Những rủi ro chính của chiến lược này bao gồm:

  1. Khối lượng và RSI có thể tạo ra các tín hiệu đột phá sai, gây ra các lỗ và lỗ sai.
  2. Thời gian dừng lỗ cố định có thể không dừng lỗ hoặc dừng lỗ quá sớm trong thời gian đảo ngược thị trường đáng kể.
  3. Điều chỉnh tham số kém tối ưu có thể dẫn đến quá ít hoặc quá nhiều tín hiệu.

Để giải quyết những rủi ro này, tối ưu hóa có thể được thực hiện trong các khía cạnh sau:

  1. Thêm các chỉ số khác để lọc các tín hiệu đột phá sai.
  2. Thiết lập stop loss theo dõi động thay vì số lượng thanh cố định.
  3. Kiểm tra tham số toàn diện và điều chỉnh để đảm bảo độ bền.

Hướng dẫn tối ưu hóa

Chiến lược này có thể được tối ưu hóa thêm trong các khía cạnh sau:

  1. Thêm mô hình ML để đánh giá độ tin cậy của việc phá vỡ khối lượng để tránh tín hiệu sai
  2. Thêm cơ chế dừng mất mát thích nghi thay vì thanh cố định
  3. Tối ưu hóa bộ dữ liệu đa chiều cho các thông số khối lượng còn tồn tại
  4. Tăng độ chính xác của tín hiệu bán quá mức bằng cách sàng lọc ML
  5. Kết hợp phân tích tình cảm để cải thiện alpha

Bằng cách giới thiệu các kỹ thuật tiên tiến hơn, có thể đạt được sự cải thiện đáng kể về sự ổn định, tỷ lệ alpha và Sharpe.

Kết luận

Tóm lại, đây là một chiến lược đột phá ngắn hạn rất đơn giản, đơn giản và hợp lý. Bằng cách tận dụng đúng khối lượng để phát hiện sự đảo ngược xu hướng và kiểm soát nghiêm ngặt rủi ro, hiệu suất vững chắc có thể đạt được. Nhưng rủi ro tín hiệu sai và độ bền của tham số tồn tại. Chúng có thể được giải quyết dần dần bằng cách giới thiệu các kỹ thuật tiên tiến hơn để cải thiện thêm chiến lược.


/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © footlz

//@version=4
strategy("Bottom catch strategy", overlay=true)

v_len = input(20, title="Volume SMA Length")
mult = input(2)
rsi_len = input(20, title="RSI Length")
oversold = input(30, title="Oversold")
close_time = input(10, title="Close After")

v = volume
basis = sma(v, v_len)
dev = mult * stdev(v, v_len)
upper_volume = basis + dev

rsi = rsi(close, rsi_len)

long = v > upper_volume and rsi < oversold

strategy.entry("Long", true, when=long)

passed_time = 0.0
if strategy.position_size != 0
    passed_time := 1
else
    passed_time := 0

if strategy.position_size != 0 and strategy.position_size[1] != 0
    passed_time := passed_time[1] + 1

if passed_time >= close_time
    strategy.close_all()

// If want to enable plot, change overlay=false.
v_color = close >= close[1] ? color.new(#3eb370, 0) : color.new(#e9546b, 0)

// plot(v, title="volume", color=v_color, style=plot.style_columns)
// plot(upper_volume, title="Threshold", color=color.aqua)

Thêm nữa