Chiến lược theo dõi đảo ngược CCTBBO

Tác giả:ChaoZhang, Ngày: 2023-11-23 13:42:03
Tags:

img

Tổng quan

Chiến lược này dựa trên chỉ số CCT Bollinger Band Oscillator (CCTBO) được phát triển bởi Steve Karnish. Nó xác định sự đảo ngược giá bằng cách phát hiện sự đột phá giá của đường trung bình động kết hợp với cơ chế dừng lại.

Chiến lược logic

Chiến lược này sử dụng giá cao như dữ liệu nguồn để tính toán giá trị của CCTBBO. Máy dao động dao động giữa -200 và 200, trong đó 0 đại diện cho giá trung bình trừ 2 độ lệch chuẩn và 100 là giá trung bình cộng với 2 độ lệch chuẩn. Các tín hiệu giao dịch được tạo ra khi máy dao động vượt qua hoặc giảm xuống dưới đường EMA của nó. Cụ thể, khi máy dao động vượt qua đường EMA của nó và khoảng cách giữa chúng lớn hơn giá trị ký quỹ thiết lập, một vị trí dài được mở. Khi máy dao động giảm xuống dưới đường EMA của nó và khoảng cách nhỏ hơn giá trị ký quỹ âm, một vị trí ngắn được mở. Kích thước ký quỹ vị trí được tính toán theo tỷ lệ phần trăm thiết lập. Ngoài ra, chiến lược sử dụng stop loss theo dõi dựa trên tỷ lệ thay đổi giá hoặc số lượng chuyển động tick để thoát khỏi các vị trí.

Phân tích lợi thế

  • Sử dụng chỉ số CCT Bollinger Band Oscillator có ảnh hưởng để giảm tín hiệu sai
  • Kết hợp đường EMA và điều kiện ký quỹ lọc tín hiệu để tránh giao dịch vô hiệu quá mức trong các dao động
  • Áp dụng cơ chế dừng lỗ sau để dừng lỗ kịp thời khi lỗ quá lớn

Phân tích rủi ro

  • Bản thân dao động CCT có một số trễ, do đó không có thời điểm tốt nhất cho sự đảo ngược giá
  • Giá trị ký quỹ quá cao và cài đặt thời gian EMA quá ngắn làm tăng tần suất giao dịch và rủi ro
  • Đặt lệnh dừng lỗ quá lỏng làm tăng rủi ro mất mát

Quản lý rủi ro:

  • Điều chỉnh thời gian đường EMA, sử dụng thời gian dài hơn để lọc
  • Điều chỉnh giá trị ký quỹ phù hợp để cân bằng rủi ro và lợi nhuận
  • Giảm tỷ lệ phần trăm vị trí để kiểm soát lỗ đơn
  • Giảm một cách hợp lý phạm vi mất mát dừng kéo theo để dừng nhanh hơn

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

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

  1. Thay thế bằng các chỉ số biến động khác như Bollinger Bands, Keltner Channels, v.v. để xác định các bước vào và ra
  2. Thêm các chỉ số lọc khác như MACD, RSI để đảm bảo độ tin cậy tín hiệu
  3. Sử dụng các thuật toán học máy để tự động tối ưu hóa các thông số như thời gian EMA, giá trị ký quỹ, vv
  4. Thêm cơ chế định kích thước vị trí như phân số cố định, Martingale để kiểm soát rủi ro giao dịch
  5. Tối ưu hóa các cơ chế dừng lỗ sau sử dụng sự biến động hoặc dừng ATR

Tóm lại

Tóm lại, đây là một chiến lược giao dịch định lượng để xác định sự đảo ngược giá bằng cách sử dụng chỉ số CCT Bollinger Band. Nó có một số ưu điểm nhất định nhưng cũng có chỗ để cải thiện. Bằng cách tối ưu hóa các tham số, thêm bộ lọc, sử dụng kỹ thuật tính năng, giới thiệu máy học, vv, sự ổn định và lợi nhuận của chiến lược này có thể được tăng thêm.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-17 11:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// This strategy is based on the CCT Bollinger Band Oscillator (CCTBO) 
// developed by Steve Karnish of Cedar Creek Trading and coded by LazyBear.
// Indicator is available here https://www.tradingview.com/v/iA4XGCJW/

strategy("Strategy CCTBBO v2 | Fadior", shorttitle="Strategy CCTBBO v2", pyramiding=0, precision=2, calc_on_order_fills=false, initial_capital=1000, default_qty_type=strategy.percent_of_equity, currency="USD", default_qty_value=100, overlay=false)

length_stddev=input(title="Stddev loopback period",defval=20)
length_ema=input(title="EMA period", defval=2)
margin=input(title="Margin", defval=0, type=float, step=0.1)
price = input(title="Source", defval=high)
digits= input(title="Number of digits",defval=2,step=1,minval=2,maxval=6)
offset = input(title="Trailing offset (0.01 = 1%) :", defval=0.013, type=float, step=0.01)
pips= input(title="Offset in ticks ?",defval=false,type=bool)

src=request.security(syminfo.tickerid, "1440", price)

cctbbo=100 * ( src + 2*stdev( src, length_stddev) - sma( src, length_stddev ) ) / ( 4 * stdev( src, length_stddev ) )

ul=hline(150, color=gray, editable=true)
ll=hline(-50, color=gray)
hline(50, color=gray)
fill(ul,ll, color=green, transp=90)
plot(style=line, series=cctbbo, color=blue, linewidth=2)
plot(ema(cctbbo, length_ema), color=red)

d = digits == 2 ? 100 : digits == 3 ? 1000 : digits == 4 ? 10000 : digits == 5 ? 100000 : digits == 6 ? 1000000 : na

TS = 1
TO = pips ? offset : close*offset*d
CQ = 100
TSP = TS
TOP = (TO > 0) ? TO : na

longCondition = crossover(cctbbo, ema(cctbbo, length_ema)) and cctbbo - ema(cctbbo, length_ema) > margin
if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("Close Long", "Long", qty_percent=CQ, trail_points=TSP, trail_offset=TOP)


shortCondition = crossunder(cctbbo, ema(cctbbo, length_ema)) and cctbbo - ema(cctbbo, length_ema) < -margin
if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("Close Short", "Short", qty_percent=CQ, trail_points=TSP, trail_offset=TOP)
    
    

Thêm nữa