Chiến lược này kết hợp trung bình chuyển động, băng Bollinger và chỉ số giá trung bình trọng số (VWAP). Nó đi vào các vị trí dài khi hình thành chéo vàng và trung bình chuyển động nhanh phá vỡ trên mức chậm. Chiến lược cũng sử dụng kênh băng Bollinger và chỉ xem xét vào khi giá chạm vào dải dưới, do đó tránh nhiều lần vào và ra trong bối cảnh biến động của thị trường.
Logic cốt lõi dựa trên các đường trung bình động để xác định hướng xu hướng và các dải Bollinger để xác định phạm vi biến động cho tín hiệu mua.
Xây dựng hệ thống đường chéo vàng bằng cách sử dụng đường EMA 50 ngày và đường EMA 200 ngày.
Khi giá trên VWAP, nó cho thấy giá đang trong giai đoạn tăng mà ủng hộ các vị trí dài.
Khi giá chỉ chạm hoặc phá vỡ dải Bollinger dưới, nó cho thấy giá có thể gần điểm hồi phục do đó cung cấp một cơ hội tốt.
Ra khỏi các vị trí dài với lợi nhuận khi giá vượt quá dải Bollinger trên.
Bằng cách kết hợp các quy tắc này, chiến lược có thể xác định vị trí đầu vào dài phù hợp trong thị trường tăng và đặt dừng lỗ / lợi nhuận để đảm bảo lợi nhuận.
Hệ thống chéo vàng xác định hướng xu hướng chính, tránh những chiến thắng và thua lỗ nhỏ trong bối cảnh hợp nhất.
VWAP đo hướng sóng giá để có tín hiệu mua chính xác hơn.
Các băng tần Bollinger tăng khả năng phục hồi bằng cách xác định vị trí mua trong khi thiết lập dừng lỗ / lợi nhuận lấy khóa trong lợi nhuận.
Nhiều chỉ số xác nhận tăng độ tin cậy.
Chữ thập vàng có thể đưa ra tín hiệu sai.
Các thông số Bollinger không đúng có thể làm cho chiến lược không hiệu quả tối ưu hóa thời gian và lệch chuẩn.
Một ngưỡng dừng lỗ quá rộng không hạn chế hiệu quả lỗ.
Tối ưu hóa sự kết hợp MA bằng cách thử nghiệm các thông số khác nhau để tìm ra tốt nhất.
Kiểm tra thời gian Bollinger và các thiết lập tham số để có băng thông và biến động tốt hơn.
Kiểm tra và điều chỉnh phạm vi mất mát dừng để cân bằng kiểm soát rủi ro và tránh kích hoạt sớm.
Chiến lược này tạo ra sự cân bằng giữa phát hiện cơ hội và kiểm soát rủi ro bằng cách tích hợp phân tích MA, Bollinger và VWAP cho các mục.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 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="VWAP and BB strategy [$$]", overlay=true,pyramiding=2, default_qty_value=1, default_qty_type=strategy.fixed, initial_capital=10000, currency=currency.USD) fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 6, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2020, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 8, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2020, title = "To Year", minval = 1970) // Calculate start/end date and time condition DST = 1 //day light saving for usa //--- Europe London = iff(DST==0,"0000-0900","0100-1000") //--- America NewYork = iff(DST==0,"0400-1300","0500-1400") //--- Pacific Sydney = iff(DST==0,"1300-2200","1400-2300") //--- Asia Tokyo = iff(DST==0,"1500-2400","1600-0100") //-- Time In Range timeinrange(res, sess) => time(res, sess) != 0 london = timeinrange(timeframe.period, London) newyork = timeinrange(timeframe.period, NewYork) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = time >= startDate and time <= finishDate is_price_dipped_bb(pds,source1) => t_bbDipped=false for i=1 to pds t_bbDipped:= (t_bbDipped or close[i]<source1) ? true : false if t_bbDipped==true break else continue t_bbDipped is_bb_per_dipped(pds,bbrSrc) => t_bbDipped=false for i=1 to pds t_bbDipped:= (t_bbDipped or bbrSrc[i]<=0) ? true : false if t_bbDipped==true break else continue t_bbDipped // variables BEGIN shortEMA = input(50, title="fast EMA", minval=1) longEMA = input(200, title="slow EMA", minval=1) //BB smaLength = input(7, title="BB SMA Length", minval=1) bbsrc = input(close, title="BB Source") strategyCalcOption = input(title="strategy to use", type=input.string, options=["BB", "BB_percentageB"], defval="BB") //addOnDivergence = input(true,title="Add to existing on Divergence") //exitOption = input(title="exit on RSI or BB", type=input.string, options=["RSI", "BB"], defval="BB") //bbSource = input(title="BB source", type=input.string, options=["close", "vwap"], defval="close") //vwap_res = input(title="VWAP Resolution", type=input.resolution, defval="session") stopLoss = input(title="Stop Loss%", defval=1, minval=1) //variables END longEMAval= ema(close, longEMA) shortEMAval= ema(close, shortEMA) ema200val = ema(close, 200) vwapVal=vwap(close) // Drawings //plot emas plot(shortEMAval, color = color.green, linewidth = 1, transp=0) plot(longEMAval, color = color.orange, linewidth = 1, transp=0) plot(ema200val, color = color.purple, linewidth = 2, style=plot.style_line ,transp=0) //bollinger calculation mult = input(2.0, minval=0.001, maxval=50, title="StdDev") basis = sma(bbsrc, smaLength) dev = mult * stdev(bbsrc, smaLength) upperBand = basis + dev lowerBand = basis - dev offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) bbr = (bbsrc - lowerBand)/(upperBand - lowerBand) //bollinger calculation //plot bb //plot(basis, "Basis", color=#872323, 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=#198787, transp=95) plot(vwapVal, color = color.purple, linewidth = 2, transp=0) // Colour background //barcolor(shortEMAval>longEMAval and close<=lowerBand ? color.yellow: na) //longCondition= shortEMAval > longEMAval and close>open and close>vwapVal longCondition= ( shortEMAval > longEMAval and close>open and close>vwapVal and close<upperBand ) //and time_cond // and close>=vwapVal //Entry strategy.entry(id="long", comment="VB LE" , long=true, when= longCondition and ( strategyCalcOption=="BB"? is_price_dipped_bb(10,lowerBand) : is_bb_per_dipped(10,bbr) ) and strategy.position_size<1 ) //is_price_dipped_bb(10,lowerBand)) //and strategy.position_size<1 is_bb_per_dipped(15,bbr) //add to the existing position strategy.entry(id="long", comment="Add" , long=true, when=strategy.position_size>=1 and close<strategy.position_avg_price and close>vwapVal) //and time_cond) barcolor(strategy.position_size>=1 ? color.blue: na) strategy.close(id="long", comment="TP Exit", when=crossover(close,upperBand) ) //stoploss stopLossVal = strategy.position_avg_price * (1-(stopLoss*0.01) ) //strategy.close(id="long", comment="SL Exit", when= close < stopLossVal) //strategy.risk.max_intraday_loss(stopLoss, strategy.percent_of_equity)