Эта стратегия определяет сигналы покупки и продажи на основе скрещивания между индикатором RSI и его скользящей средней, относящейся к краткосрочным торговым стратегиям. Она будет покупать, когда RSI ниже, чем ее MA, и продавать, когда RSI выше, чем ее MA, что является типичной стратегией низкой покупки-высокой продажи.
Это типичная стратегия реверсии среднего значения, использующая свойства перекупленности/перепроданности индикатора RSI для определения торговых сигналов.
Короче говоря, это простая и практичная краткосрочная торговая стратегия.
Следует отметить некоторые риски:
Эти риски могут быть уменьшены путем настройки параметров, добавления фильтров и т.д.
Стратегия может быть оптимизирована в следующих аспектах:
Значительное повышение производительности может быть достигнуто с помощью комбинаций с несколькими индикаторами, управления потерями остановки, оптимизации параметров и т. д.
В общем, это очень типичная и практичная краткосрочная торговая стратегия. Она использует перекупленные/перепроданные уровни RSI для определения входов и выходов, с дополнительным фильтром MA. Логика проста и ясна, параметры гибкие, легко внедряются. Есть определенные рыночные риски, но могут быть решены с помощью уточнения механизмов входа/выхода, настройки параметров и т. Д. В сочетании с более техническими индикаторами и методами управления рисками эта стратегия может стать относительно стабильной краткосрочной стратегией.
/*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)