
Chiến lược này kết hợp các chỉ số đường trung bình di chuyển, chỉ số Brin và chỉ số giá trung bình có trọng lượng giao dịch để đánh giá nhập cảnh trong điều kiện hình thành gai vàng, đường trung bình ngắn xuyên qua đường trung bình dài. Chiến lược cũng sử dụng kênh Brin, chỉ xem xét nhập cảnh khi giá chạm vào đường dây Brin, để tránh xuất cảnh thường xuyên trong biến động thị trường.
Chiến lược này chủ yếu sử dụng chỉ số đường trung bình để xác định xu hướng, sử dụng Brin để chọn điểm mua trong khoảng dao động định vị. Cụ thể, chiến lược bao gồm một số quy tắc quan trọng sau:
Sử dụng 50 ngày EMA và 200 ngày EMA để xây dựng hệ thống phán đoán vàng, được coi là ở xu hướng tăng nhiều đầu khi vượt qua trung bình di chuyển chậm trên đường trung bình di chuyển nhanh;
Khi giá lớn hơn VWAP, họ cho rằng giá đang ở giai đoạn tăng, có lợi cho việc đặt nhiều hơn;
Giá chỉ vừa chạm hoặc phá vỡ đường đi xuống của Bollinger Bands, cho thấy giá cổ phiếu có thể ở gần điểm phục hồi, cơ hội tốt hơn;
Sau khi nhập vào nhiều vị trí nắm giữ, giá vượt qua Brin mang theo đường ray và dừng lại khi Brin rút ra.
Bằng cách kết hợp các quy tắc này, chiến lược này có thể chọn mua điểm thích hợp trong thị trường bò và thiết lập điểm dừng lỗ để đảm bảo lợi nhuận.
Sử dụng hệ thống đánh giá vàng để xác định xu hướng lớn và tránh thua lỗ trong tình huống chấn động;
Chỉ số VWAP có thể xác định hướng biến động của giá, giúp lựa chọn điểm mua chính xác hơn;
Các chỉ số BRI cho thấy điểm mua giúp chiến lược trở nên kiên cường hơn, đồng thời thiết lập các điểm dừng lỗ để khóa lợi nhuận;
Nhiều chỉ số được xác minh lẫn nhau để đưa ra quyết định chính xác và đáng tin cậy hơn.
Hệ thống đánh giá kim loại có thể phát ra tín hiệu sai, nên rút ngắn thời gian chu kỳ đường trung bình một cách thích hợp và hợp tác với các chỉ số khác để xác minh;
Thiết lập không đúng các tham số Brin cũng làm cho chiến lược không có hiệu lực, nên điều chỉnh chu kỳ Brin và tham số chênh lệch chuẩn;
Các điểm dừng lỗ được thiết lập quá lỏng lẻo và không thể kiểm soát tổn thất một cách hiệu quả. Các phạm vi dừng lỗ nên được thắt chặt thích hợp để đảm bảo rủi ro có thể kiểm soát được.
Tối ưu hóa kết hợp đồng nhất, thử nghiệm các tham số đồng nhất khác nhau để tìm tham số tối ưu;
Kiểm tra các tham số băng tần Brin với các chu kỳ khác nhau để tìm ra sự kết hợp tham số tốt nhất về độ lớn và tính phân ly;
Kiểm tra và tối ưu hóa phạm vi dừng để kiểm soát rủi ro một cách hiệu quả và không quá dễ bị kích hoạt.
Chiến lược này sử dụng tổng hợp hệ thống đồng tuyến, băng tròn và chỉ số VWAP để đánh giá thời gian tham gia, cân bằng giữa cơ hội phát hiện và kiểm soát rủi ro. Bằng cách tối ưu hóa các tham số tiếp theo và sửa đổi quy tắc, hy vọng sẽ khóa cơ hội bền vững trong ngành và thị trường.
/*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)