BB21_SMA200 Xu hướng theo chiến lược

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

img


Tổng quan

Chiến lược này kết hợp Bollinger Bands và Moving Average để thiết kế một xu hướng sau hệ thống giao dịch. Nó đi dài khi giá vượt qua dải trên của Bollinger Bands và dải dưới là trên SMA200, đóng một phần vị trí khi giá vượt qua dải dưới và thoát ra tất cả khi giá vượt qua dưới SMA200. Chiến lược theo xu hướng và cắt lỗ theo thời gian khi xu hướng thay đổi.

Chiến lược logic

  1. Tính toán SMA200 như là trung bình chuyển động biểu thức để xác định xu hướng chính
  2. Tính toán Bollinger Bands, bao gồm dải trên, dải giữa và dải dưới và điền màu như phạm vi lợi nhuận
  3. Khi cả hai dải trên và dưới đều trên SMA200, nó cho thấy xu hướng tăng
  4. Khi giá phá vỡ qua dải giữa của Bollinger Bands lên, đi dài
  5. Khi giá vượt qua dải dưới xuống, đóng vị trí một phần
  6. Khi giá vượt dưới SMA200, nó chỉ ra sự đảo ngược xu hướng chính, đóng tất cả các vị trí
  7. Thiết lập điểm dừng mất mát để ngăn ngừa mất mát quá mức
  8. Tính toán kích thước giao dịch dựa trên vốn tài khoản và rủi ro chấp nhận được

Nguyên lý của chiến lược này để xác định xu hướng là các Bollinger Bands nên hoàn toàn trên SMA200, chỉ đi dài khi có xu hướng tăng rõ ràng. Khi xu hướng giảm, rủi ro được kiểm soát bằng cách dừng lỗ một phần và dừng lỗ đầy đủ.

Phân tích lợi thế

  1. Sử dụng Bollinger Bands thay vì chỉ số duy nhất để xác định xu hướng rõ ràng
  2. SMA200 xác định hướng xu hướng chính, tránh giao dịch không cần thiết trong thị trường giới hạn phạm vi
  3. Đặt lỗ dừng một phần theo xu hướng chạy
  4. Ngưng lỗ kịp thời tại các điểm chính để giảm thiểu lỗ
  5. Tính toán kích thước giao dịch giới thiệu quản lý rủi ro để ngăn ngừa tổn thất quá mức trên một giao dịch duy nhất

Phân tích rủi ro

  1. Các tín hiệu đột phá được tạo ra từ Bollinger Bands có thể có tín hiệu sai tương đối cao
  2. Các điểm dừng lỗ một phần cần phải được tối ưu hóa để ngăn ngừa dừng lỗ sớm
  3. Nếu điểm dừng lỗ quá chật, dừng lỗ có thể được kích hoạt quá thường xuyên
  4. Thời gian SMA cần được thử nghiệm và tối ưu hóa để cân bằng sự chậm trễ và độ nhạy
  5. Phương pháp tính toán kích thước giao dịch có thể cần tối ưu hóa để ngăn chặn kích thước quá lớn trên các giao dịch duy nhất

Những rủi ro này có thể được giảm bằng cách kiểm tra cẩn thận các thông số Bollinger Bands, tối ưu hóa chiến lược dừng lỗ một phần, điều chỉnh thời gian SMA và giới thiệu các phương pháp quản lý rủi ro khoa học hơn.

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

  1. Kiểm tra và tối ưu hóa các thông số Bollinger Bands để giảm tín hiệu sai
  2. Nghiên cứu làm thế nào để thiết lập đúng điểm dừng lỗ một phần
  3. Kiểm tra thời gian SMA tối ưu
  4. Xem xét các điểm dừng thích nghi thay vì các điểm dừng lỗ cố định
  5. Nghiên cứu sử dụng kích thước vị trí dựa trên biến động để tính toán kích thước giao dịch khoa học hơn
  6. Backtest với chi phí giao dịch để mô phỏng giao dịch thực tế
  7. Xem xét kết hợp với các chỉ số khác để cải thiện tính vững chắc của chiến lược

Kết luận

Chiến lược này tích hợp Bollinger Bands và SMA để thiết kế một hệ thống theo xu hướng tương đối hoàn chỉnh. Nó đáng tin cậy trong việc xác định sự tồn tại của xu hướng và có khả năng theo dõi xu hướng mạnh mẽ. Bằng cách liên tục tối ưu hóa chiến lược dừng lỗ, giảm lỗi tín hiệu và giới thiệu các kỹ thuật quản lý rủi ro khoa học, chiến lược này có thể trở thành một hệ thống đáng để theo dõi trong giao dịch trực tiếp. Nó cung cấp một cách tiếp cận kết hợp nhiều chỉ số cho thiết kế chiến lược giao dịch định lượng.


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
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="BB9_MA200_Strategy", overlay=true, pyramiding=1,     default_qty_type=strategy.cash,  initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed, 


var stopLossVal=0.00

//variables BEGIN
smaLength=input(200,title="MA Length")
bbLength=input(21,title="BB Length")  

bbsrc = input(close, title="BB Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")


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

riskCapital = input(title="Risk % of capital  == Based on this trade size is claculated    numberOfShares = (AvailableCapital*risk/100) / stopLossPoints", defval=10, minval=1)


sma200=ema(close,smaLength)

plot(sma200, title="SMA 200", color=color.orange)


//bollinger calculation
basis = sma(bbsrc, bbLength)
dev = mult * stdev(bbsrc, bbLength)
upperBand = basis + dev
lowerBand = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

//plot bb
plot(basis, "Basis", color=color.teal, style=plot.style_circles , offset = offset)
p1 = plot(upperBand, "Upper", color=color.teal, offset = offset)
p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=color.teal, transp=95)


strategy.initial_capital = 50000

//Entry---

strategy.entry(id="LE", comment="LE capital="+tostring(strategy.initial_capital + strategy.netprofit ,"######.##"), qty=( (strategy.initial_capital + strategy.netprofit ) * riskCapital / 100)/(close*stopLoss/100) , long=true,  when=strategy.position_size<1 and upperBand>sma200 and lowerBand > sma200 and crossover(close, basis) )     //  // aroonOsc<0  //(strategy.initial_capital * 0.10)/close


barcolor(color=strategy.position_size>=1? color.blue: na)

//partial Exit
tpVal=strategy.position_size>1 ? strategy.position_avg_price * (1+(stopLoss/100) ) : 0.00
strategy.close(id="LE", comment="Partial points="+tostring(close - strategy.position_avg_price, "####.##"),  qty_percent=30 , when=abs(strategy.position_size)>=1 and close>tpVal and crossunder(lowerBand, sma200)   )   //close<ema55 and rsi5Val<20 //ema34<ema55


//close All on stop loss
//stoploss
stopLossVal:=   strategy.position_size>1 ? strategy.position_avg_price * (1-(stopLoss/100) ) : 0.00

strategy.close_all( comment="SL Exit points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and close < stopLossVal  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89//

strategy.close_all( comment="BB9 X SMA200 points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and  crossunder(basis, sma200)  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89
    

Thêm nữa