Chiến lược này sử dụng các chỉ số trung bình, Brin và RSI để đánh giá xu hướng giá và quá mua quá bán để phát hiện cơ hội giao dịch. Chiến lược này kết hợp các lợi thế của nhiều chỉ số để tăng độ chính xác của quyết định giao dịch.
Nguyên tắc chiến lược:
Tính toán đường trung bình và đường bạch cầu của nó để xác định xu hướng đường dài của giá.
Tính toán chỉ số RSI để xác định xem đang mua hay bán quá mức.
Khi giá từ dưới lên phá vỡ đường mòn của Bollinger Bands và RSI có nhiều chéo, hãy làm nhiều hơn.
Khi giá vượt qua BRI từ trên xuống và RSI xuất hiện một đường chéo trục trặc, hãy thực hiện điều này.
Thiết lập đường dừng lỗ, kiểm soát tổn thất đơn lẻ.
Những lợi thế của chiến lược này:
Kiểm tra kết hợp nhiều chỉ số có thể làm giảm khả năng giao dịch sai.
Chỉ số RSI có thể bổ sung cho hệ thống không đồng nhất.
Các điểm đột phá có thể được xác định bằng các vạch tròn.
Rủi ro của chiến lược này:
Gói đa chỉ số cần thời gian để tối ưu hóa tham số.
RSI có một mức độ trùng lặp với Brin.
Các giao dịch đột phá có thể tạo ra hiệu ứng đầu, có thể bị đảo ngược.
Nói tóm lại, chiến lược này thông qua kết hợp đường trung bình, Brin và chỉ số RSI, trong khi đánh giá xu hướng, xác định cơ hội đảo ngược. Sử dụng chỉ số kết hợp có thể tăng hiệu quả, nhưng cần chú ý đến các vấn đề tối ưu hóa tham số, kiểm soát rủi ro.
/*backtest
start: 2023-08-13 00:00:00
end: 2023-09-12 00:00:00
period: 30m
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/
// © LucasVivien
//@version=4
strategy("MA Bolinger Bands + RSI ", shorttitle="MABB + RSI", overlay=true)
// User input
source = input(title="Price source" , type=input.source , defval=close)
RSIlen = input(title="RSI Length" , type=input.integer , defval=6 , group="RSI")
RSIlvlOB = input(title="RSI Overbough" , type=input.integer , defval=50 , group="RSI")
RSIlvlOS = input(title="RSI Oversold" , type=input.integer , defval=50 , group="RSI")
RSIN = input(title="RSI Neutral" , type=input.integer , defval=50 , group="RSI")
MAlen = input(title="MA Length" , type=input.integer , defval=200 , group="MABB")
BBlen = input(title="BB Length" , type=input.integer , defval=200 , group="MABB")
BBmult = input(title="BB multiplier" , type=input.float , defval=2.0 , group="MABB" , tooltip="Set BB closer / appart", minval=0.001, maxval=50)
MAtype = input(title="MA type" , type=input.string , defval="SMA", group="MABB" , tooltip="MA type used in BB", options=["SMA", "EMA", "HMA"])
//SLmult = input(title="SL value" ,type=input.float , defval=0.06)
// Used indicators
RSI = rsi(source, RSIlen)
MA = sma(source, MAlen)
if MAtype == "EMA"
MA := ema(source, MAlen)
if MAtype == "HMA"
MA := hma(source, MAlen)
// Perform Calculations
BBdev = BBmult * stdev(source, BBlen)
BBupper = MA + BBdev
BBlower = MA - BBdev
longSL = close - close * 0.06
shortSL = close + close * 0.06
// Signals validation ([0] is trade displayed from strategy() on chart => long/short entry)
BBbull = (open < BBlower) and (close > BBlower)
BBbear = (open > BBupper) and (close < BBupper)
RSIbull = crossover(RSI , RSIN)
RSIbear = crossunder(RSI, RSIN)
Longsignal = (BBbull) and (RSIbull or RSIbull[1] or
RSIbull[2] or RSIbull[3] or RSIbull[4] or
RSIbull[5] or RSIbull[6] or RSIbull[7] or
RSIbull[8] or RSIbull[9] or RSIbull[10])
Shortsignal = (BBbear) and (RSIbear or RSIbear[1] or
RSIbear[2] or RSIbear[3] or RSIbear[4] or
RSIbear[5] or RSIbear[6] or RSIbear[7] or
RSIbear[8] or RSIbear[9] or RSIbear[10])
// Save SL values
var SLlongsaved = 0.0
var SLshortsaved = 0.0
if Longsignal and (strategy.position_size == -1) ///////////////////////////////
SLlongsaved := longSL
if Shortsignal and (strategy.position_size == 1) ////////////////////////////////
SLshortsaved := shortSL
// Plots
//plotshape(Longsignal , size=size.small, color=color.teal)
//plotshape(Shortsignal, size=size.small, color=color.fuchsia)
plot(Longsignal ? longSL : na, color=color.red, style=plot.style_linebr, linewidth=6)
plot(Shortsignal ? shortSL : na, color=color.red, style=plot.style_linebr, linewidth=6)
p1 = plot(BBupper,title="Bollinger Bands Upper Line", color=color.gray, transp=60)
p2 = plot(BBlower,title="Bollinger Bands Lower Line", color=color.gray, transp=60)
plot(MA, title="Bollinger Bands MA Basis Line" , color=color.white, transp=50)
fill(p1, p2, color=color.white, transp=92)
// Strategy Entry & Exit
//if Longsignal
strategy.entry(id="Long entry", long=true, when=Longsignal) //, oca_name="x", oca_type=strategy.oca.cancel)
//if Shortsignal
strategy.entry(id="Short entry", long=false, when=Shortsignal) //, oca_name="x", oca_type=strategy.oca.cancel)
strategy.close(id="Long exit", when=strategy.position_size > 0)//, from_entry="Long entry" //, when=strategy.position_size > 0 // , stop=SLlongsaved)
strategy.close(id="Short Exit", when=strategy.position_size < 0)//, from_entry="Short entry" //, when=strategy.position_size < 0 //, stop=SLshortsaved)
plot(strategy.position_size) //////////////////////////////////////////////