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.
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 đủ.
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.
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