Chiến lược này xác định tín hiệu mua và bán dựa trên sự chéo giữa chỉ số RSI và đường trung bình động của nó, thuộc về các chiến lược giao dịch ngắn hạn. Nó sẽ mua khi RSI thấp hơn MA của nó và bán khi RSI cao hơn MA của nó, đó là một chiến lược mua thấp-bán cao điển hình.
Đây là một chiến lược đảo ngược trung bình điển hình, sử dụng các thuộc tính mua quá mức / bán quá mức của chỉ số RSI để xác định tín hiệu giao dịch.
Tóm lại, đó là một chiến lược giao dịch ngắn hạn đơn giản và thực tế.
Có một số rủi ro cần lưu ý:
Những rủi ro này có thể được giảm thiểu thông qua điều chỉnh tham số, thêm bộ lọc vv.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Nâng cao hiệu suất đáng kể có thể đạt được thông qua kết hợp nhiều chỉ số, quản lý mất mát dừng, tối ưu hóa tham số vv.
Tóm lại, đây là một chiến lược giao dịch ngắn hạn rất điển hình và thực tế. Nó tận dụng mức mua quá mức / bán quá mức của RSI để xác định các bước vào và ra, với bộ lọc MA bổ sung. Logic đơn giản và rõ ràng, các tham số linh hoạt, dễ thực hiện. Có một số rủi ro thị trường nhất định, nhưng có thể được giải quyết thông qua các cơ chế nhập / ra tinh chế, điều chỉnh tham số vv.v. Khi kết hợp với các chỉ số kỹ thuật và kỹ thuật quản lý rủi ro hơn, chiến lược này có thể trở thành một chiến lược ngắn hạn tương đối ổn định.
/*backtest start: 2022-11-24 00:00:00 end: 2023-11-30 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/ // © I11L //@version=5 strategy("I11L - Meanreverter 4h", overlay=false, pyramiding=3, default_qty_value=10000, initial_capital=10000, default_qty_type=strategy.cash,process_orders_on_close=false, calc_on_every_tick=false) frequency = input.int(10) rsiFrequency = input.int(40) buyZoneDistance = input.int(5) avgDownATRSum = input.int(3) useAbsoluteRSIBarrier = input.bool(true) barrierLevel = 50//input.int(50) momentumRSI = ta.rsi(close,rsiFrequency) momentumRSI_slow = ta.sma(momentumRSI,frequency) isBuy = momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) //and (momentumRSI < barrierLevel or not(useAbsoluteRSIBarrier)) isShort = momentumRSI > momentumRSI_slow*(1+buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier)) momentumRSISoftClose = (momentumRSI > momentumRSI_slow) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier)) isClose = momentumRSISoftClose plot(momentumRSI,color=isClose ? color.red : momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) ? color.green : color.white) plot(momentumRSI_slow,color=color.gray) plot(barrierLevel,color=useAbsoluteRSIBarrier ? color.white : color.rgb(0,0,0,0)) plot(momentumRSI_slow*(1-buyZoneDistance/100),color=color.gray) plot(momentumRSI_slow*(1+buyZoneDistance/100),color=color.gray) plot(momentumRSI_slow*(1+(buyZoneDistance*2)/100),color=color.gray) // plot(strategy.wintrades - strategy.losstrades) if(isBuy) strategy.entry("Buy",strategy.long, comment="#"+str.tostring(strategy.opentrades+1)) // if(isShort) // strategy.entry("Sell",strategy.short, comment="#"+str.tostring(strategy.opentrades+1)) if(isClose) strategy.exit("Close",limit=close)