Chiến lược giao dịch khối lượng đệ quy


Ngày tạo: 2024-01-31 16:56:31 sửa đổi lần cuối: 2024-01-31 16:56:31
sao chép: 0 Số nhấp chuột: 596
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch khối lượng đệ quy

Tổng quan

Chiến lược này dựa trên chiến lược theo dõi và phá vỡ xu hướng của chỉ số Recursive Band được phát triển bởi Alex Grover. Chiến lược sử dụng chỉ số Recursive Band để xác định xu hướng giá và mức kháng cự hỗ trợ quan trọng, kết hợp với điều kiện động lượng để lọc phá vỡ giả, để thực hiện nhập cảnh có tần suất thấp nhưng chất lượng cao.

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

Tính toán chỉ số vòng lặp

Chỉ số dây chuyền luân hồi bao gồm dây chuyền trên, dây chuyền dưới và dây chuyền giữa. Cách tính toán chỉ số là:

Dải trên = giá trị tối đa ((dải trên của dòng K trước, giá đóng cửa + n*Tỷ lệ biến động) Dải dưới = giá trị tối thiểu ((dải dưới của dòng K trước, giá đóng cửa - n*Tỷ lệ biến động)
Vòng trung = (vòng trên + vòng dưới) / 2

Trong đó n là một hệ số mở rộng, dao động có thể chọn ATR, chênh lệch tiêu chuẩn, kênh giá trị trung bình và phương pháp RFV đặc biệt. Độ nhạy của chỉ số được điều khiển bởi tham số chiều dài, số lượng lớn hơn, chỉ số càng khó bị kích hoạt.

Quy tắc giao dịch chiến lược

Chiến lược đầu tiên là kiểm tra xem đường dưới có tiếp tục đi lên và đường trên có tiếp tục đi xuống để loại bỏ các đột phá giả.

Khi giá giảm xuống, bạn có thể làm nhiều hơn; khi giá vượt quá, bạn có thể làm ít hơn.

Ngoài ra, chiến lược này còn có một logic dừng lỗ.

Phân tích lợi thế

Chiến lược này có những lợi thế sau:

  1. Sử dụng khung quy định, tính toán chỉ số hiệu quả, tránh tính toán lặp lại
  2. Các tham số chỉ số có thể điều chỉnh để thích ứng với các môi trường thị trường khác nhau
  3. Kết hợp xu hướng và đột phá để tránh đột phá giả
  4. Bộ lọc điều kiện động lực để đảm bảo chất lượng tín hiệu giao dịch

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Thiết lập tham số không đúng có thể dẫn đến tần số giao dịch quá cao hoặc chất lượng tín hiệu kém
  2. Khi xu hướng chu kỳ lớn thay đổi, có thể có tổn thất lớn hơn
  3. Sự mất kiểm soát điểm trượt cực đoan có thể làm tăng thiệt hại

Những rủi ro này có thể được kiểm soát bằng cách tối ưu hóa các tham số, thiết lập lỗ hổng và tăng điểm trượt.

Hướng tối ưu hóa

Chiến lược này cũng có thể được tối ưu hóa theo các hướng sau:

  1. Kết hợp nhiều chỉ số chu kỳ để giao dịch nhiều khung thời gian
  2. Thêm mô-đun học máy để thực hiện tối ưu hóa tùy biến
  3. Thêm phân tích quan hệ định lượng để tìm các tham số kết hợp tốt nhất
  4. Sử dụng Deep Learning để dự đoán đường dẫn giá, nâng cao độ chính xác của tín hiệu

Tóm tắt

Chiến lược này nói chung là một chiến lược theo dõi xu hướng hiệu quả và rất thực tế. Nó kết hợp với khung định kỳ để tiết kiệm tài nguyên tính toán, sử dụng xu hướng hỗ trợ cho sự kháng cự để xác định hướng của xu hướng lớn, tăng điều kiện động lực để lọc các đột phá giả, do đó đảm bảo chất lượng tín hiệu giao dịch.

Mã nguồn chiến lược
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
// Original indicator by alexgrover
strategy('Extended Recursive Bands Strategy', overlay=true, commission_type=strategy.commission.percent,commission_value=0.06,default_qty_type =strategy.percent_of_equity,default_qty_value = 100,initial_capital =1000)
length = input.int(260, step=10, title='Length')
src = input(close, title='Source')
method = input.string('Classic', options=['Classic', 'Atr', 'Stdev', 'Ahlr', 'Rfv'], title='Method')
bandDirectionCheck = input.bool(true, title='Bands Hold Direction')
lookback = input(3)
//----
atr = ta.atr(length)
stdev = ta.stdev(src, length)
ahlr = ta.sma(high - low, length)
rfv = 0.
rfv := ta.rising(src, length) or ta.falling(src, length) ? math.abs(ta.change(src)) : rfv[1]
//-----
f(a, b, c) =>
    method == a ? b : c
v(x) =>
    f('Atr', atr, f('Stdev', stdev, f('Ahlr', ahlr, f('Rfv', rfv, x))))
//----
sc = 2 / (length + 1)
a = 0.
a := math.max(nz(a[1], src), src) - sc * v(math.abs(src - nz(a[1], src)))
b = 0.
b := math.min(nz(b[1], src), src) + sc * v(math.abs(src - nz(b[1], src)))
c = (a+b)/2

// Colors
beColor = #675F76
buColor = #a472ff

// Plots
pA = plot(a, color=color.new(beColor, 0), linewidth=2, title='Upper Band')
pB = plot(b, color=color.new(buColor, 0), linewidth=2, title='Lower Band')
pC = plot(c, color=color.rgb(120,123,134,0), linewidth=2, title='Middle Band')
fill(pC, pA, color=color.new(beColor,90))
fill(pC, pB, color=color.new(buColor,90))

// Band keeping direction
// By Adulari
longc = 0
shortc = 0
for i = 0 to lookback-1
    if b[i] > b[i+1]
        longc:=longc+1
    if a[i] < a[i+1]
        shortc:=shortc+1
bhdLong = if bandDirectionCheck
    longc==lookback
else
    true
bhdShort = if bandDirectionCheck
    shortc==lookback
else
    true

// Strategy
if b>=low and bhdLong
    strategy.entry(id='Long',direction=strategy.long)
if high>=a and bhdShort
    strategy.entry(id='Short',direction=strategy.short)

// TP at middle line
//if low<=c and strategy.position_size<0 and strategy.position_avg_price>close
    //strategy.exit(id="Short",limit=close)
//if high>=c and strategy.position_size>0 and strategy.position_avg_price<close
    //strategy.exit(id="Long",limit=close)