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 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í.
Quản lý rủi ro:
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
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)