Chiến lược giao dịch đảo ngược trung bình dựa trên Bollinger Bands và tỷ lệ vàng

Tác giả:ChaoZhang, Ngày: 2023-11-16 16:52:55
Tags:

img

Tổng quan

Chiến lược này sử dụng đường tỷ lệ vàng của Bollinger Bands kết hợp với các hình thành trung bình động để giao dịch đảo ngược trung bình. Khi giá chạm vào đường tỷ lệ vàng, nó được coi là tín hiệu mua để tận dụng xu hướng đảo ngược trung bình.

Chiến lược logic

  1. Tính toán Bollinger Bands dải giữa, dải trên và dải dưới tỷ lệ vàng
  • Phạm vi giữa: vwma của n thời gian
  • Dải trên: Dải giữa + độ lệch chuẩn k * n thời gian
  • Dải dưới tỷ lệ vàng: Dải giữa - 0.618 * độ lệch chuẩn thời gian n
  1. Các nhóm thẩm phán
  • MA 50 ngày trên MA 200 ngày, cho thấy xu hướng tăng
  • Giá chạm hoặc dưới tỷ lệ vàng dải dưới, như tín hiệu mua
  1. Đi ra
  • Khi giá vượt qua dải trên BB, giá được coi là đã di chuyển ra khỏi dải dưới, vị trí đóng
  1. Stop loss
  • Đặt tỷ lệ dừng lỗ cố định, ví dụ 5%

Ưu điểm

  1. Sử dụng vwma thay vì sma cho đường giữa BB phản ánh tốt hơn sự biến động của giá

  2. Tỷ lệ vàng là hỗ trợ / kháng cự quan trọng, cung cấp cơ sở để đảo ngược

  3. MA trong xu hướng tăng đảm bảo xu hướng tổng thể là tăng

  4. Các loại giao dịch khác

Rủi ro

  1. Đường tỷ lệ vàng không được đảm bảo hỗ trợ, giá có thể phá vỡ

  2. Đặt dừng lỗ cố định có thể là tùy ý, nên xem xét điều chỉnh dựa trên biến động

  3. MA xu hướng tăng có thể là breakout sai, nên kiểm tra thêm các chỉ số

  4. Không chắc chắn về chiều dài đảo ngược, cần lợi nhuận hợp lý khi ra khỏi

Tăng cường

  1. Kiểm tra các kết hợp khác nhau của các thông số như thời gian BB, SD nhân, tỷ lệ dừng lỗ cố định vv

  2. Thêm thêm các chỉ số để xác định xu hướng thị trường và xác suất đảo ngược, ví dụ như MACD, KD v.v.

  3. Xem xét dừng động, chẳng hạn như ATR hoặc dừng lại

  4. Tối ưu hóa lợi nhuận như di chuyển dừng lợi nhuận, lợi nhuận một phần lấy vv

Tóm lại

Chiến lược giao dịch này có nghĩa là đảo ngược bằng cách sử dụng đường tỷ lệ vàng BB, với logic rõ ràng, các tham số đơn giản và giảm giá có thể kiểm soát được. Nhưng cũng có rủi ro, yêu cầu kiểm tra và tối ưu hóa thêm, thêm nhiều chỉ số kỹ thuật cho xu hướng và dừng / thoát tốt hơn trước khi sử dụng thực tế.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © mohanee

//@version=4

strategy(title="Bollinger Band with Fib Golden Ratio (0.618)",  shorttitle="Bollinger Band with Fib Golden Ratio" , overlay=true, pyramiding=1,     default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  

length = input(50,title="BB Length" , minval=1)
src1 = input(hlc3, title="Source")
//mult1 = input(1.33, minval=0.001, maxval=50)
mult = input(1.5,title="multplier", minval=0.001, maxval=50)

stopLoss=input(5,title="Stop Loss",minval=1)

basis = vwma(src1, length)
dev = mult * stdev(src1, length)

//dev3 = mult3 * stdev(src, length)

upper_618= basis + (0.618*dev)
lower_618= basis - (0.618*dev)

//lower_618_dev3= basis - (0.618*dev3)



plot_upper618= plot(upper_618, color=color.purple, linewidth=2, title="0.618")
plot(basis, color=color.purple,style=plot.style_circles,  linewidth=2)

plot_lower618= plot(lower_618, color=color.purple, linewidth=2, title="0.618 entry")
//plot_lower618_dev3= plot(lower_618_dev3, color=color.red, linewidth=1, title="0.618 stop")

//plot_lower618= plot(lower_618, color=color.purple, linewidth=1, title="0.618 entry")

ema200=ema(close,200)
ema50=ema(close,50)

plot (ema200, title="ema200", color=color.orange, linewidth=2)
plot (ema50, title="ema50", color=color.blue , linewidth=2)


longCondition= ema50 > ema200

strategy.entry(id="BB_Fib618", long=true, when = longCondition and ( close < lower_618  or  low <= lower_618)  )

strategy.close(id="BB_Fib618",  comment="points="+tostring(close - strategy.position_avg_price,  "###.##") , when = strategy.position_size >= 1  and crossover(close,upper_618 )) 

//stoploss exit
stopLossVal = strategy.position_size>=1 ?  strategy.position_avg_price * ( 1 - (stopLoss/100) ) : 0.00
strategy.close(id="BB_Fib618", comment="SL="+tostring(close - strategy.position_avg_price,  "###.##"), when=abs(strategy.position_size)>=1 and close < stopLossVal ) //and close > strategy.position_avg_price )


Thêm nữa